diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index 4b3dc27..18e949f 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -485,28 +485,26 @@ class Line(metaclass=PoolMeta): premium = fields.Numeric("Premium/Discount",digits='unit') fee_ = fields.Many2One('fee.fee',"Fee") - attributes = fields.Dict('product.attribute', 'Attributes', + attributes = fields.Dict( + 'product.attribute', 'Attributes', domain=[ - ('sets', '=', Eval('product._parent_template', {}).get('attribute_set', - Eval('attribute_set', -1))), - ], + ('sets', '=', Eval('attribute_set')), + ], states={ - 'readonly': (~Eval('attribute_set') - & ~Eval('product._parent_template', {}).get('attribute_set')), - }, - depends={'product.template'}, - help="Add attributes to the variant.") - - attributes_name = fields.Function(fields.Char( - "Attributes Name", - states={ - 'invisible': ~Eval('attribute_set'), - }), - 'on_change_with_attributes_name') + 'readonly': ~Eval('attribute_set'), + }, + depends=['product', 'attribute_set'], + help="Add attributes to the variant." + ) + + attributes_name = fields.Function( + fields.Char("Attributes Name"), + 'on_change_with_attributes_name' + ) @fields.depends('product', 'attributes') def on_change_with_attributes_name(self, name=None): - if not self.product.attribute_set or not self.attributes: + if not self.product or not self.product.attribute_set or not self.attributes: return def key(attribute): @@ -516,10 +514,47 @@ class Line(metaclass=PoolMeta): for attribute in sorted(self.product.attribute_set.attributes, key=key): if attribute.name in self.attributes: value = self.attributes[attribute.name] - values.append(gettext('product_attribute.msg_label_value', - label=attribute.string, - value=attribute.format(value))) + values.append(gettext( + 'product_attribute.msg_label_value', + label=attribute.string, + value=attribute.format(value) + )) return " | ".join(filter(None, values)) + # attributes = fields.Dict('product.attribute', 'Attributes', + # domain=[ + # ('sets', '=', Eval('product._parent_template', {}).get('attribute_set', + # Eval('attribute_set', -1))), + # ], + # states={ + # 'readonly': (~Eval('attribute_set') + # & ~Eval('product._parent_template', {}).get('attribute_set')), + # }, + # depends={'product.template'}, + # help="Add attributes to the variant.") + + # attributes_name = fields.Function(fields.Char( + # "Attributes Name", + # states={ + # 'invisible': ~Eval('attribute_set'), + # }), + # 'on_change_with_attributes_name') + + # @fields.depends('product', 'attributes') + # def on_change_with_attributes_name(self, name=None): + # if not self.product.attribute_set or not self.attributes: + # return + + # def key(attribute): + # return getattr(attribute, 'sequence', attribute.name) + + # values = [] + # for attribute in sorted(self.product.attribute_set.attributes, key=key): + # if attribute.name in self.attributes: + # value = self.attributes[attribute.name] + # values.append(gettext('product_attribute.msg_label_value', + # label=attribute.string, + # value=attribute.format(value))) + # return " | ".join(filter(None, values)) @classmethod def default_price_type(cls):