diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index fce34b3c5..ff6b3f808 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 88bf7d015..e335edafb 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 281df66d2..0f1cefd97 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 14804dd0a..d389884a1 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 5931bae12..e58898bd3 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 796c2135b..000000000 --- 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 f0c659512..833de24cd 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