diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index 77f31706f..78529ef78 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -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 diff --git a/app/entreprises/models.py b/app/entreprises/models.py index e335edafb..bb4ad6169 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -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,