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')

Reply via email to