details: https://code.tryton.org/tryton/commit/a54c00182549
branch: default
user: Cédric Krier <[email protected]>
date: Tue Sep 15 15:19:40 2026 +0200
description:
Include administrators in button states based on groups
Since 6ebedcf8826e, administrators have no more groups.
Closes #15097
diffstat:
modules/account_invoice/invoice.py | 18 +++++++++++-----
modules/production/production.py | 4 ++-
modules/purchase_blanket_agreement/purchase.py | 7 ++++-
modules/sale_blanket_agreement/sale.py | 7 ++++-
modules/stock/move.py | 4 ++-
modules/stock/shipment.py | 28 ++++++++++++++++++-------
6 files changed, 48 insertions(+), 20 deletions(-)
diffs (197 lines):
diff -r 508d2755ddc5 -r a54c00182549 modules/account_invoice/invoice.py
--- a/modules/account_invoice/invoice.py Tue Sep 08 09:58:42 2026 +0200
+++ b/modules/account_invoice/invoice.py Tue Sep 15 15:19:40 2026 +0200
@@ -115,14 +115,16 @@
'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 @@
'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 @@
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 @@
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 @@
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
diff -r 508d2755ddc5 -r a54c00182549 modules/production/production.py
--- a/modules/production/production.py Tue Sep 08 09:58:42 2026 +0200
+++ b/modules/production/production.py Tue Sep 15 15:19:40 2026 +0200
@@ -207,7 +207,9 @@
| (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': {
diff -r 508d2755ddc5 -r a54c00182549
modules/purchase_blanket_agreement/purchase.py
--- a/modules/purchase_blanket_agreement/purchase.py Tue Sep 08 09:58:42
2026 +0200
+++ b/modules/purchase_blanket_agreement/purchase.py Tue Sep 15 15:19:40
2026 +0200
@@ -223,8 +223,11 @@
'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())),
diff -r 508d2755ddc5 -r a54c00182549 modules/sale_blanket_agreement/sale.py
--- a/modules/sale_blanket_agreement/sale.py Tue Sep 08 09:58:42 2026 +0200
+++ b/modules/sale_blanket_agreement/sale.py Tue Sep 15 15:19:40 2026 +0200
@@ -224,8 +224,11 @@
'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())),
diff -r 508d2755ddc5 -r a54c00182549 modules/stock/move.py
--- a/modules/stock/move.py Tue Sep 08 09:58:42 2026 +0200
+++ b/modules/stock/move.py Tue Sep 15 15:19:40 2026 +0200
@@ -497,7 +497,9 @@
| ((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'],
},
diff -r 508d2755ddc5 -r a54c00182549 modules/stock/shipment.py
--- a/modules/stock/shipment.py Tue Sep 08 09:58:42 2026 +0200
+++ b/modules/stock/shipment.py Tue Sep 15 15:19:40 2026 +0200
@@ -515,7 +515,9 @@
| ((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 @@
| ((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 @@
| ((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 @@
| ((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 @@
| (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 @@
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()