68 lines
2.0 KiB
Python
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)
|