From 3880bee74403fc5360e2e7152ee269bc5a46c983 Mon Sep 17 00:00:00 2001 From: Thibault Libioulle Date: Thu, 10 Feb 2022 10:23:03 +0100 Subject: [PATCH] [IMP] {,website_}sale_product_configurator: add hooks This commit adds hooks to improve inheritability capabilities. task-2382027 --- .../controllers/main.py | 3 +++ .../controllers/main.py | 27 ++++++++++--------- .../static/src/js/website_sale_options.js | 6 +++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py index 541246ba703..580d3feeda6 100644 --- a/addons/sale_product_configurator/controllers/main.py +++ b/addons/sale_product_configurator/controllers/main.py @@ -61,6 +61,9 @@ class ProductConfiguratorController(http.Controller): combination = request.env['product.template.attribute.value'].browse(variant_values) add_qty = int(kw.get('add_qty', 1)) + if 'kwargs' in kw and 'context' in kw['kwargs']: + product = product.with_context(**kw['kwargs']['context']) + no_variant_attribute_values = combination.filtered( lambda product_template_attribute_value: product_template_attribute_value.attribute_id.create_variant == 'no_variant' ) diff --git a/addons/website_sale_product_configurator/controllers/main.py b/addons/website_sale_product_configurator/controllers/main.py index eb29fbf4af4..11c7db05a1f 100644 --- a/addons/website_sale_product_configurator/controllers/main.py +++ b/addons/website_sale_product_configurator/controllers/main.py @@ -78,19 +78,22 @@ class WebsiteSale(main.WebsiteSale): add_qty=main_product['quantity'], product_custom_attribute_values=main_product['product_custom_attribute_values'], no_variant_attribute_values=main_product['no_variant_attribute_values'], + **kwargs ) - # Link option with its parent. - option_parent = {main_product['unique_id']: value['line_id']} - for option in product_and_options[1:]: - parent_unique_id = option['parent_unique_id'] - option_value = order._cart_update( - product_id=option['product_id'], - set_qty=option['quantity'], - linked_line_id=option_parent[parent_unique_id], - product_custom_attribute_values=option['product_custom_attribute_values'], - no_variant_attribute_values=option['no_variant_attribute_values'], - ) - option_parent[option['unique_id']] = option_value['line_id'] + if value['line_id']: + # Link option with its parent iff line has been created. + option_parent = {main_product['unique_id']: value['line_id']} + for option in product_and_options[1:]: + parent_unique_id = option['parent_unique_id'] + option_value = order._cart_update( + product_id=option['product_id'], + set_qty=option['quantity'], + linked_line_id=option_parent[parent_unique_id], + product_custom_attribute_values=option['product_custom_attribute_values'], + no_variant_attribute_values=option['no_variant_attribute_values'], + **kwargs + ) + option_parent[option['unique_id']] = option_value['line_id'] return str(order.cart_quantity) diff --git a/addons/website_sale_product_configurator/static/src/js/website_sale_options.js b/addons/website_sale_product_configurator/static/src/js/website_sale_options.js index b2ad18b721a..932ae557cd0 100644 --- a/addons/website_sale_product_configurator/static/src/js/website_sale_options.js +++ b/addons/website_sale_product_configurator/static/src/js/website_sale_options.js @@ -106,8 +106,10 @@ publicWidget.registry.WebsiteSale.include({ this.optionalProductsModal.getAndCreateSelectedProducts() .then((products) => { const productAndOptions = JSON.stringify(products); - ajax.post('/shop/cart/update_option', {product_and_options: productAndOptions}) - .then(function (quantity) { + ajax.post('/shop/cart/update_option', { + product_and_options: productAndOptions, + ...this._getOptionalCombinationInfoParam() + }).then(function (quantity) { if (goToShop) { window.location.pathname = "/shop/cart"; }