bifurqué depuis cliss21/creme_center_fibois
feat(impor_from_civicrm): integre le champ SIREN/SIRET
Parent
8874462b13
révision
47b4f42f5f
|
@ -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 '',
|
||||
}
|
||||
|
|
|
@ -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 '',
|
||||
}
|
|
@ -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
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket