main #7

Merged
admin merged 620 commits from main into dev 2026-03-29 13:03:25 +00:00
2 changed files with 40 additions and 0 deletions
Showing only changes of commit ae0817e0ac - Show all commits

View File

@@ -19,6 +19,9 @@ this repository contains the full copyright notices and license terms. -->
<label name="concentration"/>
<field name="concentration"/>
<newline/>
<label name="attributes"/>
<field name="attributes"/>
<newline/>
<label name="del_period"/>
<field name="del_period"/>
<label name="period_at"/>

View File

@@ -2,6 +2,7 @@
# this repository contains the full copyright notices and license terms.
from functools import wraps
from trytond.model import ModelSingleton, ModelSQL, ModelView, fields
from trytond.i18n import gettext
from trytond.report import Report
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, Id, If, PYSONEncoder
@@ -483,6 +484,42 @@ class Line(metaclass=PoolMeta):
})
premium = fields.Numeric("Premium/Discount",digits='unit')
fee_ = fields.Many2One('fee.fee',"Fee")
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):