Files
tradon/modules/sale_history/sale.py
2026-03-14 09:42:12 +00:00

78 lines
2.0 KiB
Python

# 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 trytond.model import ModelView, Workflow, fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
from trytond.tools import grouped_slice, reduce_ids
from trytond.transaction import Transaction
class RevisionMixin:
__slots__ = ()
revision = fields.Integer(
"Revision", required=True, readonly=True,
states={
'invisible': Eval('revision', 0) == 0,
})
@classmethod
def default_revision(cls):
return 0
@property
def full_number(self):
number = super().full_number
if number is not None and self.revision:
number += '/%d' % self.revision
return number
@classmethod
def copy(cls, records, default=None):
default = default.copy() if default is not None else {}
default.setdefault('revision', cls.default_revision())
return super().copy(records, default=default)
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, records):
cursor = Transaction().connection.cursor()
table = cls.__table__()
# Use SQL and before super to avoid two history entries
for sub_records in grouped_slice(records):
cursor.execute(*table.update(
[table.revision],
[table.revision + 1],
where=reduce_ids(table.id, sub_records)))
super().draft(records)
class Sale(RevisionMixin, metaclass=PoolMeta):
__name__ = 'sale.sale'
_history = True
class Line(metaclass=PoolMeta):
__name__ = 'sale.line'
_history = True
class LineTax(metaclass=PoolMeta):
__name__ = 'sale.line-account.tax'
_history = True
class Subscription(RevisionMixin, metaclass=PoolMeta):
__name__ = 'sale.subscription'
_history = True
class SubscriptionLine(metaclass=PoolMeta):
__name__ = 'sale.subscription.line'
_history = True
# TODO: add rental