From 9e751722e6fcfb409f2223d7b4e620dca6027c39 Mon Sep 17 00:00:00 2001 From: Arthur ZHU Date: Wed, 1 Jun 2022 21:17:15 +0200 Subject: [PATCH] =?UTF-8?q?import=20export=20donn=C3=A9es=20application=20?= =?UTF-8?q?relations=20entreprises?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/entreprises/app_relations_entreprises.py | 81 +++++- app/entreprises/models.py | 6 +- app/entreprises/routes.py | 243 +----------------- app/templates/entreprises/correspondants.html | 9 - app/templates/entreprises/entreprises.html | 4 +- .../entreprises/import_correspondants.html | 72 ------ .../entreprises/import_entreprises.html | 33 ++- 7 files changed, 101 insertions(+), 347 deletions(-) delete mode 100644 app/templates/entreprises/import_correspondants.html diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index fce34b3c..ff6b3f80 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -223,21 +223,45 @@ def get_excel_book_are(export=False): "ville", "code_postal", "pays", - "association", - "visible", - "active", - "notes_active", ] sites_keys = [ - "siret_entreprise", + [ + "siret_entreprise", + "id", + "nom_site", + "adresse", + "ville", + "code_postal", + "pays", + ], + [ + "civilite", + "nom", + "prenom", + "telephone", + "mail", + "poste", + "service", + "origine", + "notes", + ], + ] + correspondants_keys = [ + "id", + "civilite", + "nom", + "prenom", + "telephone", + "mail", + "poste", + "service", + "origine", + "notes", "nom_site", - "adresse", - "ville", - "code_postal", - "pays", ] entreprises_titles = entreprises_keys[:] sites_titles = sites_keys[:] + correspondants_titles = correspondants_keys[:] wb = sco_excel.ScoExcelBook() ws1 = wb.create_sheet("Entreprises") ws1.append_row( @@ -254,8 +278,26 @@ def get_excel_book_are(export=False): [ ws2.make_cell(it, style) for (it, style) in zip( - sites_titles, - [sco_excel.excel_make_style(bold=True)] * len(sites_titles), + sites_titles[0], + [sco_excel.excel_make_style(bold=True)] * len(sites_titles[0]), + ) + ] + + [ + ws2.make_cell(it, style) + for (it, style) in zip( + sites_titles[1], + [sco_excel.excel_make_style(bold=True, color=sco_excel.COLORS.RED)] + * len(sites_titles[1]), + ) + ] + ) + ws3 = wb.create_sheet("Correspondants") + ws3.append_row( + [ + ws3.make_cell(it, style) + for (it, style) in zip( + correspondants_titles, + [sco_excel.excel_make_style(bold=True)] * len(correspondants_titles), ) ] ) @@ -267,12 +309,22 @@ def get_excel_book_are(export=False): .filter_by(visible=True) .all() ) + correspondants = ( + db.session.query(EntrepriseCorrespondant) + .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) + .filter_by(visible=True) + .all() + ) entreprises_lines = [ [entreprise.to_dict().get(k, "") for k in entreprises_keys] for entreprise in entreprises ] sites_lines = [ - [site.to_dict().get(k, "") for k in sites_keys] for site in sites + [site.to_dict().get(k, "") for k in sites_keys[0]] for site in sites + ] + correspondants_lines = [ + [correspondant.to_dict().get(k, "") for k in correspondants_keys] + for correspondant in correspondants ] for line in entreprises_lines: cells = [] @@ -284,4 +336,9 @@ def get_excel_book_are(export=False): for it in line: cells.append(ws2.make_cell(it)) ws2.append_row(cells) + for line in correspondants_lines: + cells = [] + for it in line: + cells.append(ws3.make_cell(it)) + ws3.append_row(cells) return wb diff --git a/app/entreprises/models.py b/app/entreprises/models.py index 88bf7d01..e335edaf 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -67,6 +67,7 @@ class EntrepriseSite(db.Model): entreprise = Entreprise.query.get_or_404(self.entreprise_id) return { "siret_entreprise": entreprise.siret, + "id": self.id, "nom_site": self.nom, "adresse": self.adresse, "code_postal": self.codepostal, @@ -93,8 +94,9 @@ class EntrepriseCorrespondant(db.Model): notes = db.Column(db.Text) def to_dict(self): - entreprise = Entreprise.query.filter_by(id=self.entreprise_id).first() + site = EntrepriseSite.query.get_or_404(self.site_id) return { + "id": self.id, "civilite": self.civilite, "nom": self.nom, "prenom": self.prenom, @@ -104,7 +106,7 @@ class EntrepriseCorrespondant(db.Model): "service": self.service, "origine": self.origine, "notes": self.notes, - "entreprise_siret": entreprise.siret, + "nom_site": site.nom, } diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index 281df66d..0f1cefd9 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -1374,9 +1374,9 @@ def json_responsables(): return jsonify(results=list) -@bp.route("/export_entreprises") +@bp.route("/export_donnees") @permission_required(Permission.RelationsEntreprisesExport) -def export_entreprises(): +def export_donnees(): """ Permet d'exporter la liste des entreprises sous format excel (.xlsx) """ @@ -1384,28 +1384,27 @@ def export_entreprises(): if entreprise: wb = are.get_excel_book_are(export=True) xlsx = wb.generate() - filename = "ExportEntreprisesSites" + filename = "ExportApplicationRelationsEntreprises" return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) else: - flash("Aucune entreprise dans la base.") return redirect(url_for("entreprises.index")) -@bp.route("/import_entreprises/get_import_entreprises_file_sample") +@bp.route("/import_donnees/get_file_sample") @permission_required(Permission.RelationsEntreprisesExport) -def get_import_entreprises_file_sample(): +def get_import_donnees_file_sample(): """ Permet de récupérer un fichier exemple vide pour pouvoir importer des entreprises """ wb = are.get_excel_book_are() xlsx = wb.generate() - filename = "ImportEntreprisesSites" + filename = "ImportApplicationRelationsEntreprises" return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) -@bp.route("/import_entreprises", methods=["GET", "POST"]) +@bp.route("/import_donnees", methods=["GET", "POST"]) @permission_required(Permission.RelationsEntreprisesExport) -def import_entreprises(): +def import_donnees(): """ Permet d'importer des entreprises a l'aide d'un fichier excel (.xlsx) """ @@ -1418,61 +1417,8 @@ def import_entreprises(): file.save(file_path) data = sco_excel.excel_file_to_list(file_path) os.remove(file_path) - entreprises_import = [] - siret_list = [] - ligne = 0 - titles = ["siret", "nom_entreprise", "adresse", "ville", "code_postal", "pays"] - if data[1][0] != titles: - flash("Veuillez utilisez la feuille excel à remplir") - return render_template( - "entreprises/import_entreprises.html", - title="Importation entreprises", - form=form, - ) - for entreprise_data in data[1][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 (ligne {ligne})") - return render_template( - "entreprises/import_entreprises.html", - title="Importation entreprises", - form=form, - ) - - if len(entreprises_import) > 0: - for entreprise in entreprises_import: - db.session.add(entreprise) - log = EntrepriseLog( - authenticated_user=current_user.user_name, - text=f"Importation de {len(entreprises_import)} entreprise(s)", - ) - db.session.add(log) - db.session.commit() - flash(f"Importation réussie de {len(entreprises_import)} entreprise(s)") - return render_template( - "entreprises/import_entreprises.html", - title="Importation entreprises", - form=form, - entreprises_import=entreprises_import, - ) - else: - flash('Feuille "Entreprises" vide') - + print(data) + return redirect(url_for("entreprises.import_donnees")) return render_template( "entreprises/import_entreprises.html", title="Importation entreprises", @@ -1480,175 +1426,6 @@ def import_entreprises(): ) -@bp.route("/export_correspondants") -@permission_required(Permission.RelationsEntreprisesExport) -def export_correspondants(): - """ - Permet d'exporter la liste des correspondants sous format excel (.xlsx) - """ - correspondants = ( - db.session.query(EntrepriseCorrespondant) - .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) - .filter_by(visible=True, active=True) - .all() - ) - if correspondants: - keys = [ - "civilite", - "nom", - "prenom", - "telephone", - "mail", - "poste", - "service", - "origine", - "notes", - "entreprise_siret", - ] - titles = keys[:] - L = [ - [correspondant.to_dict().get(k, "") for k in keys] - for correspondant in correspondants - ] - title = "Correspondants" - xlsx = sco_excel.excel_simple_table(titles=titles, lines=L, sheet_name=title) - filename = title - return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) - else: - flash("Aucun correspondant dans la base.") - return redirect(url_for("entreprises.correspondants")) - - -@bp.route("/import_correspondants/get_import_correspondants_file_sample") -@permission_required(Permission.RelationsEntreprisesExport) -def get_import_correspondants_file_sample(): - """ - Permet de récupérer un fichier exemple vide pour pouvoir importer des correspondants - """ - titles = [ - "civilite", - "nom", - "prenom", - "telephone", - "mail", - "poste", - "service", - "origine", - "notes", - "entreprise_siret", - ] - title = "ImportCorrespondants" - xlsx = sco_excel.excel_simple_table(titles=titles, sheet_name="Correspondants") - filename = title - return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) - - -@bp.route("/import_correspondants", methods=["GET", "POST"]) -@permission_required(Permission.RelationsEntreprisesExport) -def import_correspondants(): - """ - Permet d'importer des correspondants a l'aide d'un fichier excel (.xlsx) - """ - form = ImportForm() - if form.validate_on_submit(): - file = form.fichier.data - file_path = os.path.join( - Config.SCODOC_VAR_DIR, "tmp", secure_filename(file.filename) - ) - file.save(file_path) - data = sco_excel.excel_file_to_list(file_path) - os.remove(file_path) - correspondants_import = [] - correspondant_list = [] - ligne = 0 - titles = [ - "civilite", - "nom", - "prenom", - "telephone", - "mail", - "poste", - "service", - "origine", - "notes", - "entreprise_siret", - ] - if data[1][0] != titles: - flash("Veuillez utilisez la feuille excel à remplir") - return render_template( - "entreprises/import_correspondants.html", - title="Importation correspondants", - form=form, - ) - for correspondant_data in data[1][1:]: - ligne += 1 - if ( - are.verif_correspondant_data(correspondant_data) - and ( - correspondant_data[1].strip(), - correspondant_data[2].strip(), - correspondant_data[9].strip(), - ) - not in correspondant_list - ): - correspondant_list.append( - ( - correspondant_data[1].strip(), - correspondant_data[2].strip(), - correspondant_data[9].strip(), - ) - ) - entreprise = Entreprise.query.filter_by( - siret=correspondant_data[9].strip() - ).first() - correspondant = EntrepriseCorrespondant( - civilite=correspondant_data[0].strip(), - nom=correspondant_data[1].strip(), - prenom=correspondant_data[2].strip(), - telephone=correspondant_data[3].strip(), - mail=correspondant_data[4].strip(), - poste=correspondant_data[5].strip(), - service=correspondant_data[6].strip(), - origine=correspondant_data[7].strip(), - notes=correspondant_data[8].strip(), - entreprise_id=entreprise.id, - ) - correspondants_import.append(correspondant) - else: - flash(f"Erreur lors de l'importation (ligne {ligne})") - return render_template( - "entreprises/import_correspondants.html", - title="Importation correspondants", - form=form, - ) - - if len(correspondants_import) > 0: - for correspondant in correspondants_import: - db.session.add(correspondant) - log = EntrepriseLog( - authenticated_user=current_user.user_name, - text=f"Importation de {len(correspondants_import)} correspondant(s)", - ) - db.session.add(log) - db.session.commit() - flash( - f"Importation réussie de {len(correspondants_import)} correspondant(s)" - ) - return render_template( - "entreprises/import_correspondants.html", - title="Importation correspondants", - form=form, - correspondants_import=correspondants_import, - ) - else: - flash('Feuille "Correspondants" vide') - return render_template( - "entreprises/import_correspondants.html", - title="Importation correspondants", - form=form, - ) - - @bp.route( "/get_offre_file////" ) diff --git a/app/templates/entreprises/correspondants.html b/app/templates/entreprises/correspondants.html index 14804dd0..d389884a 100644 --- a/app/templates/entreprises/correspondants.html +++ b/app/templates/entreprises/correspondants.html @@ -22,15 +22,6 @@ {% endif %} -
- {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesExport, None) %} - Importer des correspondants - {% endif %} - {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesExport, None) and correspondants %} - Exporter la liste des correspondants - {% endif %} -
-

Liste des correspondants

diff --git a/app/templates/entreprises/entreprises.html b/app/templates/entreprises/entreprises.html index 5931bae1..e58898bd 100644 --- a/app/templates/entreprises/entreprises.html +++ b/app/templates/entreprises/entreprises.html @@ -27,10 +27,10 @@ Ajouter une entreprise {% endif %} {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesExport, None) %} - Importer des entreprises + Importer des données {% endif %} {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesExport, None) and entreprises %} - Exporter la liste des entreprises + Exporter des données {% endif %} diff --git a/app/templates/entreprises/import_correspondants.html b/app/templates/entreprises/import_correspondants.html deleted file mode 100644 index 796c2135..00000000 --- a/app/templates/entreprises/import_correspondants.html +++ /dev/null @@ -1,72 +0,0 @@ -{# -*- mode: jinja-html -*- #} -{% extends 'base.html' %} -{% import 'bootstrap/wtf.html' as wtf %} - -{% block styles %} -{{super()}} -{% endblock %} - -{% block app_content %} -

Importation correspondants

-
- -
-
-
-

- (*) champs requis -

- {{ wtf.quick_form(form, novalidate=True) }} -
-
- - {% if not correspondants_import %} -
- - - - - - - - - - - -
AttributTypeDescription
civilitetextcivilite du correspondant (H ou F)
nomtextnom du correspondant
prenomtextprenom du correspondant
telephonetexttelephone du correspondant
mailtextmail du correspondant
postetextposte du correspondant
servicetextservice dans lequel travaille le correspondant
originetextorigine du correspondant
notestextnotes sur le correspondant
entreprise_sirettextSIRET de l'entreprise
- {% endif %} - - {% if correspondants_import %} -
Importation de {{ correspondants_import|length }} correspondant(s)
- {% for correspondant in correspondants_import %} -
-
- Civilité : {{ correspondant.civilite|get_civilité }}
- Nom : {{ correspondant.nom }}
- Prénom : {{ correspondant.prenom }}
- {% if correspondant.telephone %} - Téléphone : {{ correspondant.telephone }}
- {% endif %} - {% if correspondant.mail %} - Mail : {{ correspondant.mail }}
- {% endif %} - {% if correspondant.poste %} - Poste : {{ correspondant.poste }}
- {% endif %} - {% if correspondant.service %} - Service : {{ correspondant.service }}
- {% endif %} - {% if correspondant.origine %} - Origine : {{ correspondant.origine }}
- {% endif %} - {% if correspondant.notes %} - Notes : {{ correspondant.notes }}
- {% endif %} - lien vers l'entreprise -
-
- {% endfor %} - {% endif %} -{% endblock %} \ No newline at end of file diff --git a/app/templates/entreprises/import_entreprises.html b/app/templates/entreprises/import_entreprises.html index f0c65951..833de24c 100644 --- a/app/templates/entreprises/import_entreprises.html +++ b/app/templates/entreprises/import_entreprises.html @@ -10,7 +10,7 @@

Importation entreprises



@@ -43,21 +43,20 @@ code_postaltextcode postal du site paystextpays du site +
Feuille Correspondants
+ + + + + + + + + + + + +
AttributTypeDescription
civilitetextcivilite du correspondant (H ou F)
nomtextnom du correspondant
prenomtextprenom du correspondant
telephonetexttelephone du correspondant
mailtextmail du correspondant
postetextposte du correspondant
servicetextservice dans lequel travaille le correspondant
originetextorigine du correspondant
notestextnotes sur le correspondant
nom_sitetextnom du site lié au correspondant
{% endif %} - - {% if entreprises_import %} -
Importation de {{ entreprises_import|length }} entreprise(s)
- {% for entreprise in entreprises_import %} -
-
- SIRET : {{ entreprise.siret }}
- Nom : {{ entreprise.nom }}
- Adresse : {{ entreprise.adresse }}
- Code postal : {{ entreprise.codepostal }}
- Ville : {{ entreprise.ville }}
- Pays : {{ entreprise.pays }} -
-
- {% endfor %} - {% endif %} + {% endblock %} \ No newline at end of file