From ee7928d4bc92b53e36d3fc559c5e4046ca970498 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Mon, 11 Dec 2017 12:54:59 +0100 Subject: [PATCH] [FIX] website_sale_coupon: fix performance issue on cart update. It was a bad idea to recompute_coupon_lines into the function 'sale_get_order'. This function is called several times on each pages. The purpose of this one is to return a browse record only and IF needed recompute more. But apply a method that take several secondes will dramastically reduce the ecommerce performance. Now, we call the method only when we change the cart and so potentially change the right to benefit of a coupon or not. And not at each call of the method 'sale_get_order'. In checkout, that reduce from 6 call on some page to one this costly method that take several seconds. --- models/__init__.py | 1 - models/sale_order.py | 6 ++++++ models/website.py | 12 ------------ 3 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 models/website.py diff --git a/models/__init__.py b/models/__init__.py index 1cc49f34af5..146839e75cc 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -3,4 +3,3 @@ import sale_coupon_rule import sale_order -import website diff --git a/models/sale_order.py b/models/sale_order.py index 3effee6a17c..a009b938c3d 100644 --- a/models/sale_order.py +++ b/models/sale_order.py @@ -17,3 +17,9 @@ class SaleOrder(models.Model): if error and delete: request.session.pop('error_promo_code') return error + + @api.multi + def _cart_update(self, product_id=None, line_id=None, add_qty=0, set_qty=0, attributes=None, **kwargs): + res = super(SaleOrder, self)._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty, attributes=attributes, **kwargs) + self.recompute_coupon_lines() + return res diff --git a/models/website.py b/models/website.py deleted file mode 100644 index 37f93c7f64b..00000000000 --- a/models/website.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import models, fields, api - - -class Website(models.Model): - _inherit = "website" - - @api.multi - def sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False): - order = super(Website, self).sale_get_order(force_create, code, update_pricelist, force_pricelist) - order.recompute_coupon_lines() - return order