details:   https://code.tryton.org/tryton/commit/5d69467e8add
branch:    7.0
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 377a86d82d99 -r 5d69467e8add modules/account_fr_chorus/account.py
--- a/modules/account_fr_chorus/account.py      Mon Aug 31 13:43:41 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
@@ -181,6 +182,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):
     "Invoice Chorus"
@@ -310,20 +327,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.
@@ -369,20 +376,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