Use editable instead of of readonly for account template override

This commit is contained in:
Cédric Krier
2026-09-21 15:24:43 +02:00
parent a5b3061674
commit cbb762530b
10 changed files with 54 additions and 52 deletions
+9 -7
View File
@@ -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'))
+14 -18
View File
@@ -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",
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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
+7 -5
View File
@@ -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.")
+4 -4
View File
@@ -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)),
})
@@ -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'
+7 -5
View File
@@ -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.")
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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