# 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.pyson import Eval from trytond.pool import PoolMeta from . import luhn __all__ = ['Address'] class Address: __metaclass__ = PoolMeta __name__ = 'party.address' siret_nic = fields.Char('SIRET NIC', select=True, states={ 'readonly': ~Eval('active', True), }, size=5, depends=['active']) siret = fields.Function(fields.Char('SIRET'), 'get_siret') @classmethod def __setup__(cls): super(Address, cls).__setup__() cls._error_messages.update({ 'invalid_siret': ( 'Invalid SIRET number "%(siret)s" on address ' '"%(address)s"'), }) def get_siret(self, name): if self.party.siren and self.siret_nic: return self.party.siren + self.siret_nic @classmethod def validate(cls, addresses): super(Address, cls).validate(addresses) for address in addresses: address.check_siret() def check_siret(self): ''' Check validity of SIRET ''' if self.siret: if (len(self.siret) != 14 or not luhn.validate(self.siret)): self.raise_user_error('invalid_siret', { 'siret': self.siret, 'address': self.rec_name, })