[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"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<steps.length; k++) {
|
||||
if (steps[k].content === "click on 'Add to Cart' button") {
|
||||
steps.splice(k+1, 0, {
|
||||
content: "click in modal on 'Proceed to Checkout' button",
|
||||
trigger: 'a:contains("Proceed to Checkout")',
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user