From a0e6ffc7dd2bbe2adf372bab98c8f9e34b68ae3b Mon Sep 17 00:00:00 2001 From: Thibault Libioulle Date: Thu, 10 Feb 2022 18:59:12 +0100 Subject: [PATCH] [IMP] website_sale: improve inheritability on cart updates This commit adds hooks to give more flexibility on cart updates. It allows to add parameters when a product is added to a cart. It gives a method to disable the quick add and multiple hooks for further smooths developments. task-2382027 --- addons/website_sale/controllers/main.py | 23 +++++++---- .../data/product_snippet_template_data.xml | 16 +++++--- addons/website_sale/models/product_product.py | 3 ++ .../website_sale/models/product_template.py | 24 ++++++++++-- addons/website_sale/models/sale_order.py | 8 ++++ addons/website_sale/models/sale_order_line.py | 9 +++++ addons/website_sale/models/website.py | 6 ++- .../static/src/js/website_sale.js | 39 ++++++++++++------- addons/website_sale/views/templates.xml | 16 +++++--- 9 files changed, 108 insertions(+), 36 deletions(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index c6bd04ed6ab..7f8415f1608 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -420,7 +420,7 @@ class WebsiteSale(http.Controller): 'categories': ProductCategory.search([('parent_id', '=', False)]), 'main_object': product, 'product': product, - 'add_qty': 1.0, + 'add_qty': 1, 'view_track': view_track, } @@ -540,7 +540,8 @@ class WebsiteSale(http.Controller): add_qty=add_qty, set_qty=set_qty, product_custom_attribute_values=product_custom_attribute_values, - no_variant_attribute_values=no_variant_attribute_values + no_variant_attribute_values=no_variant_attribute_values, + **kwargs ) if express: @@ -549,7 +550,10 @@ class WebsiteSale(http.Controller): return request.redirect("/shop/cart") @http.route(['/shop/cart/update_json'], type='json', auth="public", methods=['POST'], website=True, csrf=False) - def cart_update_json(self, product_id, line_id=None, add_qty=None, set_qty=None, display=True, **kw): + def cart_update_json( + self, product_id, line_id=None, add_qty=None, set_qty=None, display=True, + product_custom_attribute_values=None, no_variant_attribute_values=None, **kw + ): """ This route is called : - When changing quantity from the cart. @@ -564,15 +568,20 @@ class WebsiteSale(http.Controller): else: return {} - pcav = kw.get('product_custom_attribute_values') - nvav = kw.get('no_variant_attribute_values') + if product_custom_attribute_values: + product_custom_attribute_values = json_scriptsafe.loads(product_custom_attribute_values) + + if no_variant_attribute_values: + no_variant_attribute_values = json_scriptsafe.loads(no_variant_attribute_values) + values = order._cart_update( product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty, - product_custom_attribute_values=json_scriptsafe.loads(pcav) if pcav else None, - no_variant_attribute_values=json_scriptsafe.loads(nvav) if nvav else None + product_custom_attribute_values=product_custom_attribute_values, + no_variant_attribute_values=no_variant_attribute_values, + **kw ) if not order.cart_quantity: diff --git a/addons/website_sale/data/product_snippet_template_data.xml b/addons/website_sale/data/product_snippet_template_data.xml index 298b8b89f4a..c1db44b01c7 100644 --- a/addons/website_sale/data/product_snippet_template_data.xml +++ b/addons/website_sale/data/product_snippet_template_data.xml @@ -1,6 +1,6 @@ - +