first commit
This commit is contained in:
133
modules/edocument_ubl/party.py
Normal file
133
modules/edocument_ubl/party.py
Normal file
@@ -0,0 +1,133 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import re
|
||||
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
ISO6523_TYPES = {
|
||||
'fr_siren': '0002',
|
||||
'se_orgnr': '0007',
|
||||
'fr_siret': '0009',
|
||||
'fi_ytunnus': '0037',
|
||||
'ch_uid': '0183',
|
||||
'ee_registrikood': '0191',
|
||||
'is_kennitala': '0196',
|
||||
'lt_pvm': '0200',
|
||||
'be_businessid': '0208',
|
||||
'fi_associationid': '0212',
|
||||
'fi_vat': '0213',
|
||||
'lv_vat': '0218',
|
||||
'eu_vat': '0223',
|
||||
}
|
||||
|
||||
EAS_TYPES = {
|
||||
'fr_siren': '0002',
|
||||
'se_orgnr': '0007',
|
||||
'fr_siret': '0009',
|
||||
'fi_ytunnus': '0037',
|
||||
'ch_uid': '0183',
|
||||
'ee_registrikood': '0191',
|
||||
'is_kennitala': '0196',
|
||||
'lt_pvm': '0200',
|
||||
'be_businessid': '0208',
|
||||
'it_codicefiscale': '210',
|
||||
'fi_associationid': '0212',
|
||||
'fi_vat': '0213',
|
||||
'lv_vat': '0218',
|
||||
'hu_vat': '9910',
|
||||
'ad_vat': '9922',
|
||||
'al_vat': '9923',
|
||||
'be_vat': '9925',
|
||||
'bg_vat': '9926',
|
||||
'ch_vat': '9927',
|
||||
'cy_vat': '9928',
|
||||
'cz_vat': '9929',
|
||||
'de_vat': '9930',
|
||||
'ee_vat': '9931',
|
||||
'gb_vat': '9932',
|
||||
'gr_vat': '9933',
|
||||
'hr_vat': '9934',
|
||||
'ie_vat': '9935',
|
||||
'li_vat': '9936',
|
||||
'lt_vat': '9937',
|
||||
'lu_vat': '9938',
|
||||
'mc_vat': '9940',
|
||||
'me_vat': '9941',
|
||||
'mk_vat': '9942',
|
||||
'mt_vat': '9943',
|
||||
'nl_vat': '9944',
|
||||
'pl_vat': '9945',
|
||||
'pt_vat': '9946',
|
||||
'ro_vat': '9947',
|
||||
'rs_vat': '9948',
|
||||
'si_vat': '9949',
|
||||
'sk_vat': '9950',
|
||||
'sm_vat': '9951',
|
||||
'tr_vat': '9952',
|
||||
'va_vat': '9953',
|
||||
'fr_vat': '9957',
|
||||
'us_ein': '9959',
|
||||
}
|
||||
|
||||
|
||||
class Party(metaclass=PoolMeta):
|
||||
__name__ = 'party.party'
|
||||
|
||||
@property
|
||||
def identifier_iso6523(self):
|
||||
for identifier in self.identifiers:
|
||||
if identifier.iso_6523:
|
||||
return identifier
|
||||
|
||||
@property
|
||||
def identifier_eas(self):
|
||||
for identifier in self.identifiers:
|
||||
if identifier.eas:
|
||||
return identifier
|
||||
|
||||
|
||||
class Identifier(metaclass=PoolMeta):
|
||||
__name__ = 'party.identifier'
|
||||
|
||||
@property
|
||||
def iso_6523(self):
|
||||
return ISO6523_TYPES.get(self.type, '')
|
||||
|
||||
@property
|
||||
def _eas_type(self):
|
||||
if self.type == 'eu_vat':
|
||||
code = self.code[:2].lower()
|
||||
code = (code
|
||||
.replace('xi', 'gb')
|
||||
.replace('el', 'gr'))
|
||||
return f'{code}_vat'
|
||||
else:
|
||||
return self.type
|
||||
|
||||
@property
|
||||
def eas_code(self):
|
||||
return EAS_TYPES.get(self._eas_type, '')
|
||||
|
||||
@property
|
||||
def eas(self):
|
||||
if self.eas_code:
|
||||
if re.match(r'[a-z]{2}_vat', self._eas_type):
|
||||
country = self._eas_type[:2].replace('gr', 'el')
|
||||
if self.type == 'eu_vat':
|
||||
code = self.code[2:]
|
||||
else:
|
||||
code = self.code
|
||||
return f'{country}{code}'.lower()
|
||||
else:
|
||||
return self.code
|
||||
|
||||
@property
|
||||
def vatin(self):
|
||||
if re.match(r'[a-z]{2}_vat', self._eas_type):
|
||||
country = self._eas_type[:2].replace('gr', 'el')
|
||||
if self.type == 'eu_vat':
|
||||
code = self.code[2:]
|
||||
else:
|
||||
code = self.code
|
||||
return f'{country}{code}'.upper()
|
||||
Reference in New Issue
Block a user