forked from ScoDoc/DocScoDoc
import données en dict (plus lisible)
This commit is contained in:
parent
91d5fb906a
commit
5b762cd911
@ -60,7 +60,7 @@ ENTREPRISES_KEYS = [
|
||||
SITES_KEYS = [
|
||||
[
|
||||
"siret_entreprise",
|
||||
"id",
|
||||
"id_site",
|
||||
"nom_site",
|
||||
"adresse",
|
||||
"ville",
|
||||
@ -284,35 +284,38 @@ def check_entreprises_import(m):
|
||||
f'Veuillez utilisez la feuille excel à remplir (Feuille "Entreprises", ligne {ligne})'
|
||||
)
|
||||
return False
|
||||
for entreprise_data in m[1:]:
|
||||
l = list_to_dict(m)
|
||||
for entreprise_data in l:
|
||||
ligne += 1
|
||||
entreprise_data[0] = entreprise_data[0].strip().replace(" ", "")
|
||||
siret = entreprise_data[0]
|
||||
if check_entreprise_import(entreprise_data) and siret not in siret_list:
|
||||
siret_list.append(siret)
|
||||
entreprise = Entreprise.query.filter_by(siret=siret, visible=True).first()
|
||||
entreprise_data["siret"] = entreprise_data["siret"].replace(" ", "")
|
||||
if (
|
||||
check_entreprise_import(entreprise_data)
|
||||
and entreprise_data["siret"] not in siret_list
|
||||
):
|
||||
siret_list.append(entreprise_data["siret"])
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
siret=entreprise_data["siret"], visible=True
|
||||
).first()
|
||||
if entreprise is None:
|
||||
entreprise_import = Entreprise(
|
||||
siret=siret,
|
||||
nom=entreprise_data[1].strip(),
|
||||
adresse=entreprise_data[2].strip(),
|
||||
ville=entreprise_data[3].strip(),
|
||||
codepostal=entreprise_data[4].strip(),
|
||||
pays=entreprise_data[5].strip()
|
||||
if entreprise_data[5].strip()
|
||||
siret=entreprise_data["siret"],
|
||||
nom=entreprise_data["nom_entreprise"],
|
||||
adresse=entreprise_data["adresse"],
|
||||
ville=entreprise_data["ville"],
|
||||
codepostal=entreprise_data["code_postal"],
|
||||
pays=entreprise_data["pays"]
|
||||
if entreprise_data["pays"]
|
||||
else "FRANCE",
|
||||
visible=True,
|
||||
)
|
||||
entreprises_import.append(entreprise_import)
|
||||
else:
|
||||
entreprise.nom = entreprise_data[1].strip()
|
||||
entreprise.adresse = entreprise_data[2].strip()
|
||||
entreprise.ville = entreprise_data[3].strip()
|
||||
entreprise.codepostal = entreprise_data[4].strip()
|
||||
entreprise.nom = entreprise_data["nom_entreprise"]
|
||||
entreprise.adresse = entreprise_data["adresse"]
|
||||
entreprise.ville = entreprise_data["ville"]
|
||||
entreprise.codepostal = entreprise_data["code_postal"]
|
||||
entreprise.pays = (
|
||||
entreprise_data[5].strip()
|
||||
if entreprise_data[5].strip()
|
||||
else "FRANCE"
|
||||
entreprise_data["pays"] if entreprise_data["pays"] else "FRANCE"
|
||||
)
|
||||
else:
|
||||
flash(
|
||||
@ -330,15 +333,16 @@ def check_entreprises_import(m):
|
||||
return entreprises_import
|
||||
|
||||
|
||||
def check_entreprise_import(entreprise_data: list):
|
||||
def check_entreprise_import(entreprise_data):
|
||||
"""
|
||||
Verifie les données d'une ligne Excel (entreprise)
|
||||
"""
|
||||
for data in entreprise_data[:-1]: # champs obligatoires
|
||||
if data.strip() == "":
|
||||
champs_obligatoires = ["siret", "nom_entreprise", "adresse", "ville", "code_postal"]
|
||||
for key, value in entreprise_data.items(): # champs obligatoires
|
||||
if key in champs_obligatoires and value == "":
|
||||
return False
|
||||
|
||||
siret = entreprise_data[0]
|
||||
siret = entreprise_data["siret"]
|
||||
|
||||
if EntreprisePreferences.get_check_siret():
|
||||
if re.match("^\d{14}$", siret) is None:
|
||||
@ -366,62 +370,61 @@ def check_sites_import(m):
|
||||
f'Veuillez utilisez la feuille excel à remplir (Feuille "Sites", ligne {ligne})'
|
||||
)
|
||||
return False, False
|
||||
for site_data in m[1:]:
|
||||
l = list_to_dict(m)
|
||||
for site_data in l:
|
||||
ligne += 1
|
||||
site_data[0] = site_data[0].strip().replace(" ", "")
|
||||
site_data["siret_entreprise"] = site_data["siret_entreprise"].replace(" ", "")
|
||||
if check_site_import(site_data):
|
||||
correspondant_data = site_data[len(SITES_KEYS[0]) :]
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
siret=site_data[0], visible=True
|
||||
siret=site_data["siret_entreprise"], visible=True
|
||||
).first()
|
||||
if site_data[1].strip() == "":
|
||||
if site_data["id_site"] == "":
|
||||
site_import = EntrepriseSite(
|
||||
entreprise_id=entreprise.id,
|
||||
nom=site_data[2].strip(),
|
||||
adresse=site_data[3].strip(),
|
||||
codepostal=site_data[4].strip(),
|
||||
ville=site_data[5].strip(),
|
||||
pays=site_data[6].strip(),
|
||||
nom=site_data["nom_site"],
|
||||
adresse=site_data["adresse"],
|
||||
codepostal=site_data["code_postal"],
|
||||
ville=site_data["ville"],
|
||||
pays=site_data["pays"],
|
||||
)
|
||||
if correspondant_data == [""] * len(SITES_KEYS[1]):
|
||||
if site_data["civilite"] == "":
|
||||
sites_import.append(site_import)
|
||||
else:
|
||||
correspondant_import = EntrepriseCorrespondant(
|
||||
entreprise_id=entreprise.id,
|
||||
civilite=correspondant_data[0],
|
||||
nom=correspondant_data[1],
|
||||
prenom=correspondant_data[2],
|
||||
telephone=correspondant_data[3],
|
||||
mail=correspondant_data[4],
|
||||
poste=correspondant_data[5],
|
||||
service=correspondant_data[6],
|
||||
origine=correspondant_data[7],
|
||||
notes=correspondant_data[8],
|
||||
civilite=site_data["civilite"],
|
||||
nom=site_data["nom"],
|
||||
prenom=site_data["prenom"],
|
||||
telephone=site_data["telephone"],
|
||||
mail=site_data["mail"],
|
||||
poste=site_data["poste"],
|
||||
service=site_data["service"],
|
||||
origine=site_data["origine"],
|
||||
notes=site_data["notes"],
|
||||
)
|
||||
sites_import.append(site_import)
|
||||
correspondants_import.append([site_import, correspondant_import])
|
||||
else:
|
||||
site_id = site_data[1].strip()
|
||||
site = EntrepriseSite.query.filter_by(id=site_id).first()
|
||||
site.nom = site_data[2].strip()
|
||||
site.adresse = site_data[3].strip()
|
||||
site.codepostal = site_data[4].strip()
|
||||
site.ville = site_data[5].strip()
|
||||
site.pays = site_data[6].strip()
|
||||
site = EntrepriseSite.query.filter_by(id=site_data["id_site"]).first()
|
||||
site.nom = site_data["nom_site"]
|
||||
site.adresse = site_data["adresse"]
|
||||
site.codepostal = site_data["code_postal"]
|
||||
site.ville = site_data["ville"]
|
||||
site.pays = site_data["pays"]
|
||||
|
||||
if correspondant_data != [""] * len(SITES_KEYS[1]):
|
||||
if site_data["civilite"] != "":
|
||||
correspondant_import = EntrepriseCorrespondant(
|
||||
entreprise_id=entreprise.id,
|
||||
site_id=site.id,
|
||||
civilite=correspondant_data[0],
|
||||
nom=correspondant_data[1],
|
||||
prenom=correspondant_data[2],
|
||||
telephone=correspondant_data[3],
|
||||
mail=correspondant_data[4],
|
||||
poste=correspondant_data[5],
|
||||
service=correspondant_data[6],
|
||||
origine=correspondant_data[7],
|
||||
notes=correspondant_data[8],
|
||||
civilite=site_data["civilite"],
|
||||
nom=site_data["nom"],
|
||||
prenom=site_data["prenom"],
|
||||
telephone=site_data["telephone"],
|
||||
mail=site_data["mail"],
|
||||
poste=site_data["poste"],
|
||||
service=site_data["service"],
|
||||
origine=site_data["origine"],
|
||||
notes=site_data["notes"],
|
||||
)
|
||||
correspondants_import.append([None, correspondant_import])
|
||||
else:
|
||||
@ -445,26 +448,34 @@ def check_sites_import(m):
|
||||
return sites_import, correspondants_import
|
||||
|
||||
|
||||
def check_site_import(row_data: list):
|
||||
def check_site_import(site_data):
|
||||
"""
|
||||
Verifie les données d'une ligne Excel (sites)
|
||||
"""
|
||||
site_data = row_data[: -len(SITES_KEYS[1])]
|
||||
correspondant_data = row_data[len(SITES_KEYS[0]) :]
|
||||
for data in [site_data[0]] + site_data[2:]: # champs obligatoires
|
||||
if data.strip() == "":
|
||||
champs_obligatoires = [
|
||||
"siret_entreprise",
|
||||
"nom_site",
|
||||
"adresse",
|
||||
"ville",
|
||||
"code_postal",
|
||||
"pays",
|
||||
]
|
||||
for key, value in site_data.items(): # champs obligatoires
|
||||
if key in champs_obligatoires and value == "":
|
||||
return False
|
||||
|
||||
if correspondant_data != [""] * len(SITES_KEYS[1]):
|
||||
if check_correspondant_import(correspondant_data, site_data) is False:
|
||||
if site_data["civilite"] != "":
|
||||
if check_correspondant_import(site_data) is False:
|
||||
return False
|
||||
|
||||
entreprise = Entreprise.query.filter_by(siret=site_data[0], visible=True).first()
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
siret=site_data["siret_entreprise"], visible=True
|
||||
).first()
|
||||
if entreprise is None:
|
||||
return False
|
||||
|
||||
site = EntrepriseSite.query.filter_by(nom=site_data[2]).first()
|
||||
if site_data[1] == "" and site is not None:
|
||||
site = EntrepriseSite.query.filter_by(nom=site_data["nom_site"]).first()
|
||||
if site_data["id_site"] == "" and site is not None:
|
||||
return False
|
||||
|
||||
return True
|
||||
@ -477,28 +488,27 @@ def check_correspondants_import(m):
|
||||
f'Veuillez utilisez la feuille excel à remplir (Feuille "Correspondants", ligne {ligne})'
|
||||
)
|
||||
return False
|
||||
for correspondant_data in m[1:]:
|
||||
l = list_to_dict(m)
|
||||
for correspondant_data in l:
|
||||
ligne += 1
|
||||
if correspondant_data[0] == "":
|
||||
if correspondant_data["id"] == "":
|
||||
flash(
|
||||
f'Erreur lors de l\'importation (Feuille "Correspondants", ligne {ligne})'
|
||||
)
|
||||
return False
|
||||
correspondant = EntrepriseCorrespondant.query.filter_by(
|
||||
id=correspondant_data[0]
|
||||
id=correspondant_data["id"]
|
||||
).first()
|
||||
if correspondant is not None and check_correspondant_import(
|
||||
correspondant_data[1:-1]
|
||||
):
|
||||
correspondant.civilite = correspondant_data[1].strip()
|
||||
correspondant.nom = correspondant_data[2].strip()
|
||||
correspondant.prenom = correspondant_data[3].strip()
|
||||
correspondant.telephone = correspondant_data[4].strip()
|
||||
correspondant.mail = correspondant_data[5].strip()
|
||||
correspondant.poste = correspondant_data[6].strip()
|
||||
correspondant.service = correspondant_data[7].strip()
|
||||
correspondant.origine = correspondant_data[8].strip()
|
||||
correspondant.notes = correspondant_data[9].strip()
|
||||
if correspondant is not None and check_correspondant_import(correspondant_data):
|
||||
correspondant.civilite = correspondant_data["civilite"]
|
||||
correspondant.nom = correspondant_data["nom"]
|
||||
correspondant.prenom = correspondant_data["prenom"]
|
||||
correspondant.telephone = correspondant_data["telephone"]
|
||||
correspondant.mail = correspondant_data["mail"]
|
||||
correspondant.poste = correspondant_data["poste"]
|
||||
correspondant.service = correspondant_data["service"]
|
||||
correspondant.origine = correspondant_data["origine"]
|
||||
correspondant.notes = correspondant_data["notes"]
|
||||
else:
|
||||
flash(
|
||||
f'Erreur lors de l\'importation (Feuille "Correspondants", ligne {ligne})'
|
||||
@ -507,42 +517,48 @@ def check_correspondants_import(m):
|
||||
return True
|
||||
|
||||
|
||||
def check_correspondant_import(correspondant_data: list, site_data: list = None):
|
||||
def check_correspondant_import(correspondant_data):
|
||||
"""
|
||||
Verifie les données d'une ligne Excel (correspondant)
|
||||
"""
|
||||
# champs obligatoires
|
||||
if (
|
||||
correspondant_data[0].strip() == ""
|
||||
or correspondant_data[1].strip() == ""
|
||||
or correspondant_data[2].strip() == ""
|
||||
):
|
||||
return False
|
||||
champs_obligatoires = ["civilite", "nom", "prenom"]
|
||||
for key, value in correspondant_data.items(): # champs obligatoires
|
||||
if key in champs_obligatoires and value == "":
|
||||
return False
|
||||
|
||||
# civilite entre H ou F
|
||||
if correspondant_data[0].strip() not in ["H", "F"]:
|
||||
if correspondant_data["civilite"] not in ["H", "F"]:
|
||||
return False
|
||||
|
||||
if (
|
||||
correspondant_data[3].strip() == "" and correspondant_data[4].strip() == ""
|
||||
correspondant_data["telephone"] == "" and correspondant_data["mail"] == ""
|
||||
): # 1 moyen de contact
|
||||
return False
|
||||
|
||||
if site_data is not None:
|
||||
if "id" in correspondant_data:
|
||||
# entreprise_id existant
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
siret=site_data[0], visible=True
|
||||
siret=correspondant_data["id"], visible=True
|
||||
).first()
|
||||
if entreprise is None:
|
||||
return False
|
||||
|
||||
# correspondant possède le meme nom et prénom dans la meme entreprise
|
||||
correspondant = EntrepriseCorrespondant.query.filter_by(
|
||||
nom=correspondant_data[1].strip(),
|
||||
prenom=correspondant_data[2].strip(),
|
||||
nom=correspondant_data["nom"].strip(),
|
||||
prenom=correspondant_data["prenom"].strip(),
|
||||
entreprise_id=entreprise.id,
|
||||
).first()
|
||||
if correspondant is not None:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def list_to_dict(m):
|
||||
l = []
|
||||
for data in m[1:]:
|
||||
new_dict = {title: value.strip() for title, value in zip(m[0], data)}
|
||||
l.append(new_dict)
|
||||
|
||||
return l
|
||||
|
@ -67,7 +67,7 @@ class EntrepriseSite(db.Model):
|
||||
entreprise = Entreprise.query.get_or_404(self.entreprise_id)
|
||||
return {
|
||||
"siret_entreprise": entreprise.siret,
|
||||
"id": self.id,
|
||||
"id_site": self.id,
|
||||
"nom_site": self.nom,
|
||||
"adresse": self.adresse,
|
||||
"code_postal": self.codepostal,
|
||||
|
Loading…
Reference in New Issue
Block a user