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

Closes #15076
(grafted from e92eb501cc50ea906fa839596f2c533b787126d6)

--HG--
branch : 8.0
This commit is contained in:
Cédric Krier
2026-09-09 12:22:52 +02:00
parent 7733443332
commit 78ffbdd65f
2 changed files with 37 additions and 35 deletions
+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
@@ -204,6 +205,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):
__name__ = 'account.invoice.chorus'
@@ -337,20 +354,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.
@@ -396,20 +403,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')
+16 -10
View File
@@ -1,6 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from functools import wraps
from sql.conditionals import NullIf
from sql.operators import Equal
@@ -22,6 +24,18 @@ else:
file_id = store_prefix = None
def default_records(func):
@wraps(func)
def wrapper(cls, documents=None):
if documents is None:
documents = cls.search([
('direction', '=', 'out'),
('state', '=', 'processing'),
])
return func(cls, documents)
return wrapper
class Peppol(Workflow, ModelSQL, ModelView):
__name__ = 'edocument.peppol'
@@ -239,17 +253,9 @@ class Peppol(Workflow, ModelSQL, ModelView):
self.succeed()
@classmethod
def update_status(cls, documents=None):
if documents is None:
documents = cls.search([
('direction', '=', 'out'),
('state', '=', 'processing'),
])
cls.update_status_button(documents)
@classmethod
@default_records
@ModelView.button
def update_status_button(cls, documents):
def update_status(cls, documents):
for document in documents:
document._update_status()
cls.save(documents)