import données en dict (plus lisible)

This commit is contained in:
Arthur ZHU 2022-06-10 17:55:59 +02:00
parent 91d5fb906a
commit 5b762cd911
2 changed files with 118 additions and 102 deletions

View File

@ -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() == ""
):
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

View File

@ -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,