Files
2026-03-14 09:42:12 +00:00

96 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 fields
from trytond.pool import Pool, PoolMeta
from trytond.report import Report
from trytond.tools import cached_property
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
def get_sale_rentals(self, name):
pool = Pool()
RentalProgress = pool.get('sale.rental.progress')
rentals = set(super().get_sale_rentals(name))
for line in self.lines:
if isinstance(line.origin, RentalProgress):
rentals.add(line.origin.rental.id)
return list(rentals)
@classmethod
def search_sale_rentals(cls, name, clause):
domain = super().search_sale_rentals(name, clause)
operator = clause[1]
if operator.startswith('!') or operator.startswith('not '):
bool_op = 'AND'
else:
bool_op = 'OR'
return [bool_op,
domain,
('lines.origin.rental' + clause[0][len(name):],
*clause[1:3], 'sale.rental.progress', *clause[3:]),
]
class InvoiceLine(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
@fields.depends('product', 'origin')
def on_change_product(self):
pool = Pool()
RentalProgress = pool.get('sale.rental.progress')
super().on_change_product()
if self.product and isinstance(self.origin, RentalProgress):
# Prevent warning from Invoice._check_taxes
if self.origin.lines:
self.taxes = self.origin.lines[0].taxes
else:
self.taxes = []
@cached_property
def product_name(self):
pool = Pool()
RentalLine = pool.get('sale.rental.line')
RentalProgress = pool.get('sale.rental.progress')
Lang = pool.get('ir.lang')
lang = Lang.get()
name = super().product_name
if isinstance(self.origin, RentalProgress):
converter = RentalLine.duration.converter
duration = Report.format_timedelta(
self.origin.duration, converter=converter, lang=lang)
start = lang.strftime(self.origin.start)
end = lang.strftime(self.origin.end)
name = f'[{start} -- {end}] {duration} × {name}'
return name
@property
def origin_name(self):
pool = Pool()
RentalProgress = pool.get('sale.rental.progress')
name = super().origin_name
if isinstance(self.origin, RentalProgress):
name = self.origin.rental.rec_name
return name
@classmethod
def _get_origin(cls):
models = super()._get_origin()
models.append('sale.rental.progress')
return models
class InvoiceLine_Asset(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
@fields.depends('origin')
def on_change_with_is_assets_depreciable(self, name=None):
pool = Pool()
RentalProgress = pool.get('sale.rental.progress')
depreciable = super().on_change_with_is_assets_depreciable(name=name)
if depreciable and isinstance(self.origin, RentalProgress):
depreciable = False
return depreciable