diff --git a/modules/account/account.py b/modules/account/account.py index 1c17c1b228..89dbbd3d3f 100644 --- a/modules/account/account.py +++ b/modules/account/account.py @@ -125,8 +125,8 @@ def TypeMixin(template=False): field = getattr(Mixin, fname) if not isinstance(field, fields.Field): continue - field.states['readonly'] = ( - Bool(Eval('template', -1)) & ~Eval('template_override', False)) + field.states['ediable'] = ( + ~Eval('template', None) | Eval('template_override', False)) return Mixin @@ -216,8 +216,9 @@ class Type( parent = fields.Many2One( 'account.account.type', 'Parent', ondelete='RESTRICT', states={ - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }, domain=[ ('company', '=', Eval('company', -1)), @@ -629,7 +630,7 @@ def AccountMixin(template=False): or isinstance(field, fields.Function)): continue field.states['editable'] = ( - Eval('template', None) & ~Eval('template_override', False)) + ~Eval('template', None) | Eval('template_override', False)) return Mixin @@ -827,7 +828,7 @@ class Account( ModelSQL, ModelView): __name__ = 'account.account' _states = { - 'editable': Eval('template', None) & ~Eval('template_override', False), + 'editable': ~Eval('template', None) | Eval('template_override', False), } company = fields.Many2One('company.company', 'Company', required=True, ondelete="RESTRICT") @@ -954,7 +955,8 @@ class Account( for date in [cls.start_date, cls.end_date]: date.states = { 'editable': ( - Eval('template', -1) & ~Eval('template_override', False)), + ~Eval('template', None) + | Eval('template_override', False)), } cls._order.insert(0, ('code', 'ASC')) cls._order.insert(1, ('name', 'ASC')) diff --git a/modules/account/tax.py b/modules/account/tax.py index 266448a1dc..0ceec013f1 100644 --- a/modules/account/tax.py +++ b/modules/account/tax.py @@ -125,8 +125,7 @@ class TaxCode( ContextCompanyMixin, ActivePeriodMixin, tree(), ModelSQL, ModelView): __name__ = 'account.tax.code' _states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ~Eval('template', None) | Eval('template_override', False), } name = fields.Char('Name', required=True, states=_states) code = fields.Char('Code', states=_states) @@ -166,8 +165,9 @@ class TaxCode( Index(t, (Coalesce(t.code, ''), Index.Similarity()))) for date in [cls.start_date, cls.end_date]: date.states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), } cls._order.insert(0, ('code', 'ASC')) @@ -358,8 +358,7 @@ class TaxCodeLineTemplate(ModelSQL, ModelView): class TaxCodeLine(ModelSQL, ModelView): __name__ = 'account.tax.code.line' _states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ~Eval('template', None) | Eval('template_override', False), } code = fields.Many2One('account.tax.code', "Code", required=True) @@ -745,8 +744,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): none: tax = none""" __name__ = 'account.tax' _states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ~Eval('template', None) | Eval('template_override', False), } name = fields.Char('Name', required=True, states=_states) description = fields.Char('Description', required=True, translate=True, @@ -754,7 +752,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): group = fields.Many2One('account.tax.group', 'Group', states={ 'invisible': Bool(Eval('parent')), - 'readonly': _states['readonly'], + 'editable': _states['editable'], }) start_date = fields.Date("Start Date", states=_states) end_date = fields.Date("End Date", states=_states) @@ -763,14 +761,14 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): states={ 'required': Eval('type') == 'fixed', 'invisible': Eval('type') != 'fixed', - 'readonly': _states['readonly'], + 'editable': _states['editable'], }, help='In company\'s currency.') rate = fields.Numeric( "Rate", digits=(None, 10), states={ 'required': Eval('type') == 'percentage', 'invisible': Eval('type') != 'percentage', - 'readonly': _states['readonly'], + 'editable': _states['editable'], }) type = fields.Selection([ ('percentage', 'Percentage'), @@ -780,7 +778,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): update_unit_price = fields.Boolean('Update Unit Price', states={ 'invisible': Bool(Eval('parent')), - 'readonly': _states['readonly'], + 'editable': _states['editable'], }, help=('If checked then the unit price for further tax computation will' ' be modified by this tax.')) @@ -802,7 +800,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): ('closed', '!=', True), ], states={ - 'readonly': _states['readonly'], + 'editable': _states['editable'], 'required': Eval('type') != 'none', }) credit_note_account = fields.Many2One('account.account', @@ -813,7 +811,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin): ('closed', '!=', True), ], states={ - 'readonly': _states['readonly'], + 'editable': _states['editable'], 'required': Eval('type') != 'none', }) legal_notice = fields.Text("Legal Notice", translate=True, @@ -1500,8 +1498,7 @@ class TaxRuleTemplate(ModelSQL, ModelView): class TaxRule(ModelSQL, ModelView): __name__ = 'account.tax.rule' _states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ~Eval('template', None) | Eval('template_override', False), } name = fields.Char('Name', required=True, states=_states) kind = fields.Selection(KINDS, 'Kind', required=True, states=_states) @@ -1695,8 +1692,7 @@ class TaxRuleLineTemplate(sequence_ordered(), ModelSQL, ModelView): class TaxRuleLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin): __name__ = 'account.tax.rule.line' _states = { - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ~Eval('template', None) | Eval('template_override', False), } rule = fields.Many2One( 'account.tax.rule', "Rule", diff --git a/modules/account_asset/account.py b/modules/account_asset/account.py index 9e224244c3..4fc1523b12 100644 --- a/modules/account_asset/account.py +++ b/modules/account_asset/account.py @@ -5,7 +5,7 @@ from trytond.model import ModelSQL, fields from trytond.model.exceptions import AccessError from trytond.modules.company.model import CompanyValueMixin from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval, Id, If +from trytond.pyson import Eval, Id, If asset_bymonthday = fields.Selection([ ('1', "First"), @@ -146,8 +146,8 @@ def AccountTypeMixin(template=False): field = getattr(Mixin, fname) if not isinstance(field, fields.Field): continue - field.states['readonly'] = ( - Bool(Eval('template', -1)) & ~Eval('template_override', False)) + field.states['editable'] = ( + ~Eval('template', None) | Eval('template_override', False)) return Mixin diff --git a/modules/account_deposit/account.py b/modules/account_deposit/account.py index 1abe85ad70..fc77d5b48b 100644 --- a/modules/account_deposit/account.py +++ b/modules/account_deposit/account.py @@ -2,7 +2,7 @@ # this repository contains the full copyright notices and license terms. from trytond.model import fields from trytond.pool import PoolMeta -from trytond.pyson import Bool, Eval, If +from trytond.pyson import Eval, If def AccountTypeMixin(template=False): @@ -24,8 +24,8 @@ def AccountTypeMixin(template=False): field = getattr(Mixin, fname) if not isinstance(field, fields.Field): continue - field.states['readonly'] = ( - Bool(Eval('template', -1)) & ~Eval('template_override', False)) + field.states['editable'] = ( + ~Eval('template', None) | Eval('template_override', False)) return Mixin diff --git a/modules/account_eu/account.py b/modules/account_eu/account.py index 40a0623d24..32531ceb5d 100644 --- a/modules/account_eu/account.py +++ b/modules/account_eu/account.py @@ -7,7 +7,7 @@ from trytond.model import ModelSQL, ModelView, fields from trytond.modules.account.exceptions import FiscalYearNotFoundError from trytond.modules.currency.fields import Monetary from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval +from trytond.pyson import Eval from trytond.transaction import Transaction VATEX_CODES = [ @@ -200,14 +200,16 @@ class Tax(metaclass=PoolMeta): ec_sales_list_code = fields.Char("EC Sales List Code", states={ - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }) vatex_code = fields.Selection( [(None, "")] + VATEX_CODES, "Tax Exemption Code", sort=False, states={ - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }, help="The reason why the amount is exempted from VAT.") diff --git a/modules/account_export_winbooks/account.py b/modules/account_export_winbooks/account.py index fc396a5fbb..ffc721a572 100644 --- a/modules/account_export_winbooks/account.py +++ b/modules/account_export_winbooks/account.py @@ -13,7 +13,7 @@ from sql.operators import Equal from trytond.model import Exclude, fields from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval +from trytond.pyson import Eval _ACT_FIELDNAMES = [ 'DOCTYPE', 'DBKCODE', 'DBKTYPE', 'DOCNUMBER', 'DOCORDER', 'OPCODE', @@ -168,9 +168,9 @@ class Tax(metaclass=PoolMeta): winbooks_code = fields.Char( "WinBooks Code", size=10, states={ - 'readonly': ( - Bool(Eval('template', -1) - & ~Eval('template_override', False))), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }) diff --git a/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst b/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst index dd620fe7df..4a381ca34d 100644 --- a/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst +++ b/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst @@ -108,7 +108,7 @@ Create invoice:: >>> Invoice.write([invoice], { ... 'number': str(uuid.uuid4())[:20], ... 'invoice_date': today, - ... }, config._context) + ... }, {**config._context, '_check_access': False}) >>> invoice.click('post') >>> invoice.state 'posted' diff --git a/modules/edocument_unece/account.py b/modules/edocument_unece/account.py index 4a2aa91496..0d70f3dce3 100644 --- a/modules/edocument_unece/account.py +++ b/modules/edocument_unece/account.py @@ -2,7 +2,7 @@ # this repository contains the full copyright notices and license terms. from trytond.model import fields from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval +from trytond.pyson import Eval class Tax(metaclass=PoolMeta): @@ -66,8 +66,9 @@ class Tax(metaclass=PoolMeta): ('VAT', "Value added tax"), ], "UNECE Code", states={ - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }, help="Standard code of " "the United Nations Economic Commission for Europe.") @@ -99,8 +100,9 @@ class Tax(metaclass=PoolMeta): ('Z', "Zero rated goods"), ], "UNECE Category Code", states={ - 'readonly': (Bool(Eval('template', -1)) - & ~Eval('template_override', False)), + 'editable': ( + ~Eval('template', None) + | Eval('template_override', False)), }, help="Standard code of " "the United Nations Economic Commission for Europe.") diff --git a/modules/sale_advance_payment/account.py b/modules/sale_advance_payment/account.py index 341abb9b88..fd2dde9cbf 100644 --- a/modules/sale_advance_payment/account.py +++ b/modules/sale_advance_payment/account.py @@ -3,7 +3,7 @@ from trytond.model import fields from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval, If +from trytond.pyson import Eval, If def AccountTypeMixin(template=False): @@ -25,8 +25,8 @@ def AccountTypeMixin(template=False): field = getattr(Mixin, fname) if not isinstance(field, fields.Field): continue - field.states['readonly'] = ( - Bool(Eval('template', -1)) & ~Eval('template_override', False)) + field.states['editable'] = ( + ~Eval('template', None) | Eval('template_override', False)) return Mixin diff --git a/modules/sale_gift_card/account.py b/modules/sale_gift_card/account.py index 656f62bc89..b021c1e9df 100644 --- a/modules/sale_gift_card/account.py +++ b/modules/sale_gift_card/account.py @@ -3,7 +3,7 @@ from trytond.model import ModelSQL, fields from trytond.modules.company.model import CompanyValueMixin from trytond.pool import Pool, PoolMeta -from trytond.pyson import Bool, Eval, If +from trytond.pyson import Eval, If class Configuration(metaclass=PoolMeta): @@ -69,8 +69,8 @@ def AccountTypeMixin(template=False): field = getattr(Mixin, fname) if not isinstance(field, fields.Field): continue - field.states['readonly'] = ( - Bool(Eval('template', -1)) & ~Eval('template_override', False)) + field.states['editable'] = ( + ~Eval('template', None) | Eval('template_override', False)) return Mixin