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