[FIX] product: keep attribute on a variant with only one attribute
When adding informational attribute, with only one possible value, it used to be skipped. Instead keep it and add it on every variant. To avoid dropping and recreating product (and lose eventual customisations), the attributes with only one possible value are set on every product. This makes sure that in following test, these are not considered in variants_inactive variable. Fixes #3204
This commit is contained in:
parent
f317fedc4b
commit
d3c562d4e8
|
@ -650,14 +650,25 @@ class product_template(osv.osv):
|
|||
for tmpl_id in tmpl_ids:
|
||||
|
||||
# list of values combination
|
||||
variant_alone = []
|
||||
all_variants = [[]]
|
||||
for variant_id in tmpl_id.attribute_line_ids:
|
||||
if len(variant_id.value_ids) > 1:
|
||||
temp_variants = []
|
||||
if len(variant_id.value_ids) == 1:
|
||||
variant_alone.append(variant_id.value_ids[0])
|
||||
temp_variants = []
|
||||
for variant in all_variants:
|
||||
for value_id in variant_id.value_ids:
|
||||
for variant in all_variants:
|
||||
temp_variants.append(variant + [int(value_id)])
|
||||
all_variants = temp_variants
|
||||
temp_variants.append(variant + [int(value_id)])
|
||||
all_variants = temp_variants
|
||||
|
||||
# adding an attribute with only one value should not recreate product
|
||||
# write this attribute on every product to make sure we don't lose them
|
||||
for variant_id in variant_alone:
|
||||
product_ids = []
|
||||
for product_id in tmpl_id.product_variant_ids:
|
||||
if variant_id.id not in map(int, product_id.attribute_value_ids):
|
||||
product_ids.append(product_id.id)
|
||||
product_obj.write(cr, uid, product_ids, {'attribute_value_ids': [(4, variant_id.id)]}, context=ctx)
|
||||
|
||||
# check product
|
||||
variant_ids_to_active = []
|
||||
|
|
|
@ -126,9 +126,10 @@ class website_sale(http.Controller):
|
|||
currency_id = self.get_pricelist().currency_id.id
|
||||
for p in product.product_variant_ids:
|
||||
price = currency_obj.compute(cr, uid, website_currency_id, currency_id, p.lst_price)
|
||||
attribute_value_ids.append([p.id, map(int, p.attribute_value_ids), p.price, price])
|
||||
attribute_value_ids.append([p.id, [v.id for v in p.attribute_value_ids if len(v.attribute_id.value_ids) > 1], p.price, price])
|
||||
else:
|
||||
attribute_value_ids = [[p.id, map(int, p.attribute_value_ids), p.price, p.lst_price] for p in product.product_variant_ids]
|
||||
attribute_value_ids = [[p.id, [v.id for v in p.attribute_value_ids if len(v.attribute_id.value_ids) > 1], p.price, p.lst_price]
|
||||
for p in product.product_variant_ids]
|
||||
|
||||
return attribute_value_ids
|
||||
|
||||
|
|
Loading…
Reference in New Issue