Include administrators in button states based on groups

Since 6ebedcf8826e, administrators have no more groups.

Closes #15097
This commit is contained in:
Cédric Krier
2026-09-15 15:19:40 +02:00
parent c55bdeed26
commit 7a563a3789
6 changed files with 48 additions and 20 deletions
+12 -6
View File
@@ -115,14 +115,16 @@ class Invoice(
'readonly': (
Eval('has_report_cache', False)
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
description = fields.Char("Description", size=None,
states={
'readonly': (
(Eval('state') != 'draft')
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
validated_by = employee_field(
"Validated By",
@@ -305,7 +307,8 @@ class Invoice(
'readonly': (
(Eval('state') != 'draft')
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
origins = fields.Function(fields.Char('Origins'), 'get_origins')
origin_invoices = fields.Function(fields.Many2Many(
@@ -2581,7 +2584,8 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin):
states={
'readonly': (_states['readonly']
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
summary = fields.Function(
fields.Char('Summary'), 'on_change_with_summary',
@@ -3247,7 +3251,8 @@ class InvoiceTax(sequence_ordered(), ModelSQL, ModelView):
states={
'readonly': (_states['readonly']
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
sequence_number = fields.Function(fields.Integer('Sequence Number'),
'get_sequence_number')
@@ -3292,7 +3297,8 @@ class InvoiceTax(sequence_ordered(), ModelSQL, ModelView):
states={
'readonly': (_states['readonly']
& ~Id('account', 'group_account_admin').in_(
Eval('context', {}).get('groups', []))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
})
del _states
+3 -1
View File
@@ -207,7 +207,9 @@ class Production(
| (Eval('state').in_(['running', 'done'])
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -223,8 +223,11 @@ class BlanketAgreement(Workflow, ModelSQL, ModelView, ChatMixin):
'run': {
'invisible': (
(Eval('state') != 'draft')
& ~(Id('purchase', 'group_purchase_admin').in_(
Eval('context', {}).get('groups', []))
& ~(
(Id('purchase', 'group_purchase_admin').in_(
Eval('context', {}).get('groups', []))
| Eval('context', {}).get(
'administrator', False))
& (Eval('state') == 'closed'))),
'readonly': (~Eval('lines')
| (Eval('from_date', Date()) > Date())),
+5 -2
View File
@@ -224,8 +224,11 @@ class BlanketAgreement(Workflow, ModelSQL, ModelView, ChatMixin):
'run': {
'invisible': (
(Eval('state') != 'draft')
& ~(Id('sale', 'group_sale_admin').in_(
Eval('context', {}).get('groups', []))
& ~(
(Id('sale', 'group_sale_admin').in_(
Eval('context', {}).get('groups', []))
| Eval('context', {}).get(
'administrator', False))
& (Eval('state') == 'closed'))),
'readonly': (~Eval('lines')
| (Eval('from_date', Date()) > Date())),
+3 -1
View File
@@ -497,7 +497,9 @@ class Move(Workflow, ModelSQL, ModelView):
| ((Eval('state') == 'done')
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'readonly': Eval('shipment') | Eval('_parent_shipment'),
'depends': ['state', 'shipment'],
},
+20 -8
View File
@@ -515,7 +515,9 @@ class ShipmentIn(
| ((Eval('state') == 'done')
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -927,7 +929,9 @@ class ShipmentInReturn(
| ((Eval('state') == 'done')
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -1331,7 +1335,9 @@ class ShipmentOut(
| ((Eval('state') == 'done')
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -2009,7 +2015,9 @@ class ShipmentOutReturn(
| ((Eval('state') == 'done')
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -2523,7 +2531,9 @@ class ShipmentInternal(
| (Eval('state').in_(['shipped', 'done'])
& ~Id('stock',
'group_stock_cancellation').in_(
Eval('context', {}).get('groups', [])))),
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get(
'administrator', False))),
'depends': ['state'],
},
'draft': {
@@ -3044,9 +3054,11 @@ class Assign(Wizard):
Button("Ignore", 'ignore', 'tryton-forward'),
Button("Force", 'force', 'tryton-forward',
states={
'invisible': ~Id('stock',
'group_stock_force_assignment').in_(
Eval('context', {}).get('groups', [])),
'invisible': (
~Id('stock',
'group_stock_force_assignment').in_(
Eval('context', {}).get('groups', []))
& ~Eval('context', {}).get('administrator', False)),
}),
])
cancel = StateTransition()