From 1ba595476292525c7a143eef7cbe3b3a6b5f2f9c Mon Sep 17 00:00:00 2001 From: Arthur ZHU Date: Fri, 3 Jun 2022 18:12:28 +0200 Subject: [PATCH] import feuille entreprises --- app/entreprises/app_relations_entreprises.py | 75 ++++++++++++++++---- app/entreprises/routes.py | 61 +++++++--------- 2 files changed, 87 insertions(+), 49 deletions(-) diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index 0626aff89..b854bd69d 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -30,6 +30,7 @@ import re import requests import glob +from flask import redirect, url_for, flash from flask_login import current_user from app.entreprises.models import ( @@ -39,6 +40,7 @@ from app.entreprises.models import ( EntrepriseOffreDepartement, EntreprisePreferences, EntrepriseSite, + EntrepriseLog, ) from app import email, db from app.scodoc import sco_preferences @@ -316,20 +318,70 @@ def verif_correspondant_data(correspondant_data): return True -def verif_entreprise_data(entreprise_data): +def check_entreprises_import(m): + entreprises_import = [] + siret_list = [] + ligne = 1 + if m[0] != ENTREPRISES_KEYS: + flash( + f'Veuillez utilisez la feuille excel à remplir (Feuille "Entreprises", ligne {ligne})' + ) + return redirect(url_for("entreprises.import_donnees")) + for entreprise_data in m[1:]: + 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).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(), + 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.pays = ( + entreprise_data[5].strip() + if entreprise_data[5].strip() + else "FRANCE" + ) + else: + flash( + f'Erreur lors de l\'importation (Feuille "Entreprises", ligne {ligne})' + ) + return redirect(url_for("entreprises.import_donnees")) + + if len(entreprises_import) > 0: + log = EntrepriseLog( + authenticated_user=current_user.user_name, + text=f"Importation de {len(entreprises_import)} entreprise(s)", + ) + db.session.add(log) + + return entreprises_import + + +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() == "": + return False + + siret = entreprise_data[0] + if EntreprisePreferences.get_check_siret(): - for data in entreprise_data: # champs obligatoires - if data.strip() == "": - return False - else: - for data in entreprise_data[1:]: # champs obligatoires - if data.strip() == "": - return False - if EntreprisePreferences.get_check_siret(): - siret = entreprise_data[0].strip().replace(" ", "") # vérification sur le siret if re.match("^\d{14}$", siret) is None: return False try: @@ -340,7 +392,4 @@ def verif_entreprise_data(entreprise_data): return False except requests.ConnectionError: return False - entreprise = Entreprise.query.filter_by(siret=siret).first() - if entreprise is not None: - return False return True diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index d6536c626..824a68bb9 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -1422,44 +1422,33 @@ def import_donnees(): file.save(file_path) diag, lm = sco_excel.excel_file_to_list_are(file_path) os.remove(file_path) - if ( - len(lm) < 3 - or lm[0][0] != are.ENTREPRISES_KEYS - or lm[1][0] != are.SITES_KEYS[0] + are.SITES_KEYS[1] - or lm[2][0] != are.CORRESPONDANTS_KEYS - ): - flash("Veuillez utilisez la feuille excel à remplir") + if len(lm) < 3: + flash("Veuillez utilisez la feuille excel à remplir (3 feuilles)") return redirect(url_for("entreprises.import_donnees")) - - # en cours - entreprises_import = [] - siret_list = [] - ligne = 1 - for entreprise_data in lm[0][1:]: - ligne += 1 - if ( - are.verif_entreprise_data(entreprise_data) - and entreprise_data[0].replace(" ", "") not in siret_list - ): - siret_list.append(entreprise_data[0].replace(" ", "")) - entreprise = Entreprise( - siret=entreprise_data[0].replace(" ", ""), - 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(), - visible=True, - ) - entreprises_import.append(entreprise) - else: - flash(f"Erreur lors de l'importation") - return redirect(url_for("entreprises.import_donnees")) - return redirect(url_for("entreprises.import_donnees")) + entreprises_import = are.check_entreprises_import(lm[0]) + for entreprise in entreprises_import: + db.session.add(entreprise) + db.session.commit() + db.session.refresh(entreprise) + site = EntrepriseSite( + entreprise_id=entreprise.id, + nom=entreprise.nom, + adresse=entreprise.adresse, + codepostal=entreprise.codepostal, + ville=entreprise.ville, + pays=entreprise.pays, + ) + db.session.add(site) + db.session.commit() + flash(f"Importation réussie") + return render_template( + "entreprises/import_donnees.html", + title="Importation données", + form=form, + entreprises_import=entreprises_import, + ) return render_template( - "entreprises/import_donnees.html", - title="Importation données", - form=form, + "entreprises/import_donnees.html", title="Importation données", form=form )