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

98 lines
3.3 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 ModelSQL, fields
from trytond.modules.company.model import CompanyValueMixin
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If
class Configuration(metaclass=PoolMeta):
__name__ = 'account.configuration'
gift_card_account_expense = fields.MultiValue(fields.Many2One(
'account.account', "Gift Card Expense",
domain=[
('type.gift_card', '=', True),
('closed', '!=', True),
('company', '=', Eval('context', {}).get('company', -1)),
]))
gift_card_account_revenue = fields.MultiValue(fields.Many2One(
'account.account', "Gift Card Revenue",
domain=[
('type.gift_card', '=', True),
('closed', '!=', True),
('company', '=', Eval('context', {}).get('company', -1)),
]))
@classmethod
def multivalue_model(cls, field):
pool = Pool()
if field in {'gift_card_account_expense', 'gift_card_account_revenue'}:
return pool.get('account.configuration.gift_card_account')
return super().multivalue_model(field)
class ConfigurationGiftCardAccount(ModelSQL, CompanyValueMixin):
__name__ = 'account.configuration.gift_card_account'
gift_card_account_expense = fields.Many2One(
'account.account', "Gift Card Expense",
domain=[
('type.gift_card', '=', True),
('closed', '!=', True),
('company', '=', Eval('company', -1)),
])
gift_card_account_revenue = fields.Many2One(
'account.account', "Gift Card Revenue",
domain=[
('type.gift_card', '=', True),
('closed', '!=', True),
('company', '=', Eval('company', -1)),
])
def AccountTypeMixin(template=False):
class Mixin:
__slots__ = ()
gift_card = fields.Boolean(
"Gift Card",
domain=[
If(Eval('statement') != 'balance',
('gift_card', '=', False), ()),
],
states={
'invisible': Eval('statement') != 'balance',
})
if not template:
for fname in dir(Mixin):
field = getattr(Mixin, fname)
if not isinstance(field, fields.Field):
continue
field.states['readonly'] = (
Bool(Eval('template', -1)) & ~Eval('template_override', False))
return Mixin
class AccountTypeTemplate(AccountTypeMixin(template=True), metaclass=PoolMeta):
__name__ = 'account.account.type.template'
def _get_type_value(self, type=None):
values = super()._get_type_value(type=type)
if not type or type.gift_card != self.gift_card:
values['gift_card'] = self.gift_card
return values
class AccountType(AccountTypeMixin(), metaclass=PoolMeta):
__name__ = 'account.account.type'
class InvoiceLine(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
@classmethod
def _account_domain(cls, type_):
domain = super()._account_domain(type_)
return domain + [('type.gift_card', '=', True)]