feat(impor_from_civicrm): integre le champ SIREN/SIRET

main
Vincent Adolphe 2022-04-12 18:34:27 +02:00
Parent 8874462b13
révision 47b4f42f5f
3 fichiers modifiés avec 89 ajouts et 3 suppressions

Voir le fichier

@ -4,6 +4,7 @@ import logging
from creme.persons import get_organisation_model
from ..constants import MTX_PHONE_TYPE, USER_ID
from ..siret import CheckSiret
from .base import BaseModelBuilder
logger = logging.getLogger(__name__)
@ -46,14 +47,23 @@ class OrganisationModelBuilder(BaseModelBuilder):
return ret
def _get_siren_siret(self):
ret = {}
if not self.obj_in.siren:
return ret
return ret
return {}
chk_siret = CheckSiret(self.obj_in.siren)
err_mesg = ''
if chk_siret.error_siren:
err_mesg += f'SIREN error:{chk_siret.siren} '
if chk_siret.error_siret:
err_mesg += f'SIRET error:{chk_siret.siret} '
if chk_siret.error:
err_mesg += f':{self.obj_in}({self.obj_in.id})'
logger.warning(err_mesg)
return chk_siret.get_verified_dict()
def complex_fill_instance(self):
return {
**self._get_phones(),
**self._get_emails(),
**self._get_siren_siret(),
'url_site': self.obj_in.websites.first() or '',
}

Voir le fichier

@ -0,0 +1,75 @@
import re
import luhn
RE_BLANK = re.compile(r'[ \xa0._\t-]*')
class CheckSiret:
"""
Usage:
status_siret = CheckSiret('45383795700043')
status_siret.get_verified_value()
>>> '45383795700043'
status_siret.is_siret
>>> True
status_siret.is_siren
>>> True
"""
siret = ''
siren = ''
is_siret = False
is_siren = False
error_siren = False
error_siret = False
error = False
def __init__(self, siret):
self.siret = RE_BLANK.sub('', str(siret))[:14]
self.siren = self.siret[:9]
if len(self.siret) != 14:
self.siret = ''
self.check()
def check(self):
self.check_siren()
self.error_siren = self.siren and not self.is_siren
self.check_siret()
self.error_siret = self.siret and not self.is_siret
self.error = self.error_siren or self.error_siret
def check_siret(self):
if len(self.siret) != 14:
return
try:
int(self.siret)
except ValueError:
pass # peut etre une exception de type MONACOCONFO0013
else:
self.is_siret = luhn.verify(self.siret) # cas general
if not self.is_siret and self.siren == '356000000': # cas la poste
self.is_siret = (sum(map(int, self.siret)) % 5) == 0
def check_siren(self):
if len(self.siren) != 9:
return
try:
int(self.siren)
except ValueError:
pass # peut etre une exception de type MONACOCON
else:
self.is_siren = luhn.verify(self.siren)
def get_verified_value(self):
if self.is_siret:
return self.siret
elif self.is_siren:
return self.siren
return ''
def get_verified_dict(self):
return {
'siren': self.siren if self.is_siren else '',
'siret': self.siret if self.is_siret else '',
}

Voir le fichier

@ -7,3 +7,4 @@ django-environ ==0.4.5
git+https://github.com/HybirdCorp/creme_crm.git@2.2.9#egg=creme
django-fieldbustier
luhn