From 60c438dfb79a847057fd51b4b05f387c70df7883 Mon Sep 17 00:00:00 2001 From: Alex Tuyls Date: Tue, 6 Aug 2019 12:38:38 +0000 Subject: [PATCH] [FIX] sale_coupon: performance issue with promotion programs In case of large cart and promotion program with a discount reward of percentage type, we are rewriting the reward order lines multiple times while we can do all in one update. opw-2038791 closes odoo/enterprise#5086 Signed-off-by: Nicolas Martinelli (nim) X-port/Cherry-pick of odoo/enterprise@243e66663a9651965fab7d9fecb639a35dcae995 --- addons/sale_coupon/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale_coupon/models/sale_order.py b/addons/sale_coupon/models/sale_order.py index 5eb12f59b7f..0daa6d96a73 100644 --- a/addons/sale_coupon/models/sale_order.py +++ b/addons/sale_coupon/models/sale_order.py @@ -305,14 +305,14 @@ class SaleOrder(models.Model): # Check commit 6bb42904a03 for next if/else # Remove reward line if price or qty equal to 0 if values['product_uom_qty'] and values['price_unit']: - order.write({'order_line': [(1, line.id, values) for line in lines]}) + lines.write(values) else: if program.reward_type != 'free_shipping': # Can't remove the lines directly as we might be in a recordset loop lines_to_remove += lines else: values.update(price_unit=0.0) - order.write({'order_line': [(1, line.id, values) for line in lines]}) + lines.write(values) return lines_to_remove self.ensure_one()