details: https://code.tryton.org/tryton/commit/f76cf6faec77
branch: 7.8
user: Cédric Krier <[email protected]>
date: Wed Sep 09 12:22:52 2026 +0200
description:
Use decorator before ModelView.button to set default records for cron
task
Closes #15076
(grafted from e92eb501cc50ea906fa839596f2c533b787126d6)
diffstat:
modules/account_fr_chorus/account.py | 46 ++++++++++++++++-------------------
1 files changed, 21 insertions(+), 25 deletions(-)
diffs (80 lines):
diff -r a61c544f6d91 -r f76cf6faec77 modules/account_fr_chorus/account.py
--- a/modules/account_fr_chorus/account.py Sat Sep 19 10:03:57 2026 +0200
+++ b/modules/account_fr_chorus/account.py Wed Sep 09 12:22:52 2026 +0200
@@ -5,6 +5,7 @@
import logging
import posixpath
from collections import defaultdict
+from functools import wraps
from oauthlib.oauth2 import BackendApplicationClient, TokenExpiredError
from requests_oauthlib import OAuth2Session
@@ -204,6 +205,22 @@
InvoiceChorus.save(invoices_chorus)
+def default_records(state):
+ def decorator(func):
+ @wraps(func)
+ def wrapper(cls, records=None):
+ transaction = Transaction()
+ if records is None:
+ records = cls.search([
+ ('invoice.company', '=',
+ transaction.context.get('company')),
+ ('state', '=', state),
+ ])
+ return func(cls, records)
+ return wrapper
+ return decorator
+
+
class InvoiceChorus(
Workflow, ModelSQL, ModelView, _SyntaxMixin, metaclass=PoolMeta):
__name__ = 'account.invoice.chorus'
@@ -337,20 +354,10 @@
}
@classmethod
- def send(cls, records=None):
- transaction = Transaction()
- if not records:
- records = cls.search([
- ('invoice.company', '=',
- transaction.context.get('company')),
- ('state', '=', 'draft'),
- ])
- cls.send_button(records)
-
- @classmethod
+ @default_records('draft')
@ModelView.button
@Workflow.transition('sent')
- def send_button(cls, records=None):
+ def send(cls, records=None):
"""Send invoice to Chorus
The transaction is committed after each invoice.
@@ -396,20 +403,9 @@
}
@classmethod
+ @default_records('sent')
+ @ModelView.button
def update(cls, records=None):
- transaction = Transaction()
-
- if not records:
- records = cls.search([
- ('invoice.company', '=',
- transaction.context.get('company')),
- ('state', '=', 'sent'),
- ])
- cls.update_button(records)
-
- @classmethod
- @ModelView.button
- def update_button(cls, records=None):
"Update state from Chorus"
pool = Pool()
Credential = pool.get('account.credential.chorus')