details:   https://code.tryton.org/tryton/commit/47db5b1554ef
branch:    8.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 d29cb161a2c3 -r 47db5b1554ef modules/account_fr_chorus/account.py
--- a/modules/account_fr_chorus/account.py      Fri Sep 04 08:31:27 2026 +0200
+++ b/modules/account_fr_chorus/account.py      Sun Sep 06 10:21:56 2026 +0200
@@ -337,9 +337,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.
@@ -348,13 +359,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:
@@ -392,11 +396,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:
@@ -405,6 +405,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 d29cb161a2c3 -r 47db5b1554ef 
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:31:27 2026 +0200
+++ b/modules/account_fr_chorus/tests/scenario_account_fr_chorus_invoice.rst    
Sun Sep 06 10:21:56 2026 +0200
@@ -123,7 +123,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)
@@ -136,8 +140,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