details:   https://code.tryton.org/tryton/commit/5c97f460a670
branch:    7.0
user:      Cédric Krier <[email protected]>
date:      Sun Sep 06 10:21:56 2026 +0200
description:
        Set button decorator for sending and updating invoices on Chorus to a 
different method than the cron

        Closes #15069
        (grafted from 59d049637f6755f0678f5acb460525b5be5d72b4)
diffstat:

 modules/account_fr_chorus/account.py                                   |  33 
++++++---
 modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst |  11 
++-
 2 files changed, 30 insertions(+), 14 deletions(-)

diffs (96 lines):

diff -r db39257b65ab -r 5c97f460a670 modules/account_fr_chorus/account.py
--- a/modules/account_fr_chorus/account.py      Fri Sep 04 08:30:25 2026 +0200
+++ b/modules/account_fr_chorus/account.py      Sun Sep 06 10:21:56 2026 +0200
@@ -310,9 +310,20 @@
             }
 
     @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
     @ModelView.button
     @Workflow.transition('sent')
-    def send(cls, records=None):
+    def send_button(cls, records=None):
         """Send invoice to Chorus
 
         The transaction is committed after each invoice.
@@ -321,13 +332,6 @@
         Credential = pool.get('account.credential.chorus')
         transaction = Transaction()
 
-        if not records:
-            records = cls.search([
-                    ('invoice.company', '=',
-                        transaction.context.get('company')),
-                    ('state', '=', 'draft'),
-                    ])
-
         sessions = defaultdict(Credential.get_session)
         cls.lock(records)
         for record in records:
@@ -365,11 +369,7 @@
             }
 
     @classmethod
-    @ModelView.button
     def update(cls, records=None):
-        "Update state from Chorus"
-        pool = Pool()
-        Credential = pool.get('account.credential.chorus')
         transaction = Transaction()
 
         if not records:
@@ -378,6 +378,15 @@
                         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')
+        transaction = Transaction()
 
         sessions = defaultdict(Credential.get_session)
         succeeded, failed = [], []
diff -r db39257b65ab -r 5c97f460a670 
modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst
--- a/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst    
Fri Sep 04 08:30:25 2026 +0200
+++ b/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst    
Sun Sep 06 10:21:56 2026 +0200
@@ -125,7 +125,11 @@
 
 Send to Chorus::
 
-    >>> invoice_chorus.click('send')
+    >>> invoice_send, = Cron.find(
+    ...     [('method', '=', 'account.invoice.chorus|send')], limit=1)
+    >>> invoice_send.click('run_once')
+
+    >>> invoice_chorus.reload()
     >>> invoice_chorus.state
     'sent'
     >>> bool(invoice_chorus.number)
@@ -138,8 +142,11 @@
 
 Update from Chorus::
 
+    >>> invoice_update, = Cron.find(
+    ...     [('method', '=', 'account.invoice.chorus|update')], limit=1)
     >>> while invoice_chorus.state == 'sent':
-    ...     invoice_chorus.click('update')
+    ...     invoice_update.click('run_once')
+    ...     invoice_chorus.reload()
     ...     time.sleep(1)
     >>> invoice_chorus.state
     'exception'

Reply via email to