Files

68 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 sql import Literal
from trytond.model import ModelSQL, fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
IDENTIFIER_TYPES = [
('eu_excise', "European Excise Number"),
('fr_excise', "French Excise Number"),
]
EXCISE_IDENTIFIER_TYPES = list(dict(IDENTIFIER_TYPES).keys())
class Configuration(metaclass=PoolMeta):
__name__ = 'party.configuration'
@classmethod
def __setup__(cls):
super().__setup__()
cls.identifier_types.selection.extend(IDENTIFIER_TYPES)
class Address(metaclass=PoolMeta):
__name__ = 'party.address'
@classmethod
def _type_identifiers(cls):
return super()._type_identifiers() | set(EXCISE_IDENTIFIER_TYPES)
class Identifier(metaclass=PoolMeta):
__name__ = 'party.identifier'
eu_excise_codes = fields.Many2Many(
'party.identifier-product.eu.excise_code',
'identifier', 'excise_code', "Excise Codes",
states={
'invisible': ~Eval('type').in_(EXCISE_IDENTIFIER_TYPES),
},
help="Authorized codes for the excise number.")
@classmethod
def _type_addresses(cls):
return super()._type_addresses() | set(EXCISE_IDENTIFIER_TYPES)
def is_excise_product(self, product):
return product.eu_excise_code in self.eu_excise_codes
def is_excise_product_sql(self, product, template):
if self.eu_excise_codes:
return template.eu_excise_code.in_(
[c.id for c in self.eu_excise_codes])
else:
return Literal(False)
class Identifier_EUExciseCode(ModelSQL):
__name__ = 'party.identifier-product.eu.excise_code'
identifier = fields.Many2One(
'party.identifier', "Identifier", required=True, ondelete='CASCADE')
excise_code = fields.Many2One(
'product.eu.excise_code', "Excise Code", required=True)