From b2318ced509a4a17bb4f714dd5fa24eb56a13264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Warnon?= Date: Tue, 25 Sep 2018 18:54:07 +0200 Subject: [PATCH] [IMP] product,(website_)sale: Allow users to fully configure products Purpose ======= - Configure a product from a sales order as easily as in the ecommerce The backend uses the same template as the frontend to configure a products and its options - Display optionnal products of optionnal products in the "sale options" section - Allow adding exlusions to some combinations of the product and/or to some combinations of the optionnal and accessory products - Product attributes can now have custom values. These values are specified by the user during the SO creation. They are also available on the webshop frontend. - Product attributes can be configured to create variants "on demand". This means that product.templates having these attributes will only create product.product variant when that combination is actually selected in a sale order/in the web shop. Product attribute values are also improved to handle extra prices and exclusions in all three modes ("never", "dynamic, "always") Specification ============= 1. Improve the "Add to cart" with optional products - When you add an option to cart, move the product to the cart & show the options of this option - Don't open the option wizard if no option available (in case this module becomes generic, it's better to skip this step when it's not needed) - Display the options right under their related product in the cart 2. Do not allow to add the product as an optional product for itself Why ? - No functional sense - Creates issues in the add to cart wizard 3. Exclude some attribute combinations within the product or with related options and accessory products - Rename VARIANT PRICES button -> CONFIGURE VARIANTS - When you click this button and select a value, open form view rather than inline edition - Form view of variant values: - Attribute - Value - HTML Color Index - Attribute Price Extra - Not Compatible with: o2m tab with 2 fields: Product AND Attribute Value (of this product) [m2m tag selection] - in any new line, autocomplete the current product by default - Tooltip: A list of product and attribute values that you want to exclude for this product's attribue value. Also applies on optionnal and accessory products. 4. New option to configure a product in a sales order line - This option is only visible if the corresponding option is activated in the sales settings - It opens a wizard to select a product template, configure related attribute values and select optional products (based on frontend view) - Attributes not compatible with other selected attributes should not be selectable - Must work like in the frontend 5. Create variants on demand - add a new mode to generate variants as they are added to the order/cart (needed for big # of combinations managed in the inventory and/or produced in mrp with specific boms) - replace the boolean by a selection radio tooltip for this new field: Always: Variants are generated straight away when the attribute values are combined in the product configuration. Only when the product is added to a sales order: Variants are generated once the combination is selected in the sales order. This is advised when variants are customized on demand and manufactured as such in Odoo. Never: Advised when variants are not needed in Odoo. The selected values just show up in the description of sales order lines. - ability to define attribute extra prices & exclude combinations in all variant modes - if at least one attribute of the product in set to "on demand" mode, generate all the variants "on demand" --- models/sale_order.py | 4 ++-- static/src/js/website_sale_coupon.test.js | 19 +++++-------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/models/sale_order.py b/models/sale_order.py index a009b938c3d..2b1bbc050ea 100644 --- a/models/sale_order.py +++ b/models/sale_order.py @@ -19,7 +19,7 @@ class SaleOrder(models.Model): 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) + def _cart_update(self, product_id=None, line_id=None, add_qty=0, set_qty=0, **kwargs): + res = super(SaleOrder, self)._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty, **kwargs) self.recompute_coupon_lines() return res diff --git a/static/src/js/website_sale_coupon.test.js b/static/src/js/website_sale_coupon.test.js index 61573c728a8..45696dc4233 100644 --- a/static/src/js/website_sale_coupon.test.js +++ b/static/src/js/website_sale_coupon.test.js @@ -91,6 +91,11 @@ tour.register('shop_sale_coupon', { trigger: '#wrap:not(:has(#cart_products))', run: function () {}, // it's a check }, + { + content: "check cart is empty (2)", + trigger: 'div.js_cart_lines:contains(Your cart is empty!)', + run: function () {}, // it's a check + }, /* 4. Disabled customize options coupon box & 'Show # found'*/ { content: "open customize menu", @@ -107,18 +112,4 @@ tour.register('shop_sale_coupon', { }, ] ); - -//Check if website_sale_options is installed since its adding an extra step to add to cart -if ('website_sale_options.website_sale' in odoo.__DEBUG__.services) { - var steps = tour.tours.shop_sale_coupon.steps; - for (var k=0; k