Use decorator before ModelView.button to set default records for cron task

Closes #15076
(grafted from e92eb501cc50ea906fa839596f2c533b787126d6)

--HG--
branch : 7.0
This commit is contained in:
Cédric Krier
2026-09-09 12:22:52 +02:00
parent ccc6502c6d
commit 2a5c144656
+21 -25
View File
@@ -5,6 +5,7 @@ import datetime
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 @@ class Invoice(metaclass=PoolMeta):
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 @@ class InvoiceChorus(
}
@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 @@ class InvoiceChorus(
}
@classmethod
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
@default_records('sent')
@ModelView.button
def update_button(cls, records=None):
def update(cls, records=None):
"Update state from Chorus"
pool = Pool()
Credential = pool.get('account.credential.chorus')