From 0bc969946ad45395fa6d72e990559425cd535631 Mon Sep 17 00:00:00 2001 From: Arthur ZHU Date: Wed, 10 Aug 2022 02:27:52 +0200 Subject: [PATCH] =?UTF-8?q?correction=20et=20am=C3=A9lioration=20module=20?= =?UTF-8?q?entreprises?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/entreprises/app_relations_entreprises.py | 51 ++++++++++++++++++- app/entreprises/routes.py | 43 ++++++---------- app/static/css/entreprises.css | 6 ++- app/templates/entreprises/entreprises.html | 8 +-- .../entreprises/fiche_entreprise.html | 2 +- .../fiche_entreprise_validation.html | 2 +- 6 files changed, 76 insertions(+), 36 deletions(-) diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index c34c602b..c989c12f 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -29,6 +29,7 @@ from config import Config import re import requests import glob +from datetime import date from flask import flash from flask_login import current_user @@ -117,6 +118,9 @@ def get_dept_id_by_acronym(acronym: str): def get_dept_acronym_by_id(id: int): + """ + Retourne l'acronym d'un departement a l'aide de son id + """ dept = Departement.query.filter_by(id=id).first() if dept is not None: return dept.acronym @@ -137,7 +141,7 @@ def check_offre_depts(depts: list, offre_depts: list): def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list): """ - Retourne l'offre, les fichiers attachés a l'offre et les département liés + Retourne l'offre, les fichiers attachés a l'offre, les département liés a l'offre et le correspondant """ offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all() correspondant = EntrepriseCorrespondant.query.filter_by( @@ -162,6 +166,42 @@ def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list): return None +def get_offres_non_expirees_with_files(offres): + """ + Retourne une liste avec toutes les offres non expirées (offre, files, offre_depts, correspondant) + """ + depts = get_depts() + offres_with_files = [] + for offre in offres: + if not offre.expired and ( + offre.expiration_date is None + or ( + offre.expiration_date is not None + and date.today() < offre.expiration_date + ) + ): + offre_with_files = get_offre_files_and_depts(offre, depts) + if offre_with_files is not None: + offres_with_files.append(offre_with_files) + return offres_with_files + + +def get_offres_expirees_with_files(offres): + """ + Retourne une liste avec toutes les offres expirées (offre, files, offre_depts, correspondant) + """ + depts = get_depts() + offres_with_files = [] + for offre in offres: + if offre.expired or ( + offre.expiration_date is not None and date.today() > offre.expiration_date + ): + offre_with_files = get_offre_files_and_depts(offre, depts) + if offre_with_files is not None: + offres_with_files.append(offre_with_files) + return offres_with_files + + def send_email_notifications_entreprise(subject: str, entreprise: Entreprise): txt = [ "Une entreprise est en attente de validation", @@ -186,6 +226,7 @@ def send_email_notifications_entreprise(subject: str, entreprise: Entreprise): def get_excel_book_are(export: bool = False): """ Retourne un Excel avec les 3 feuilles "Entreprises", "Sites" et "Correspondants" + si export est True, remplit les feuilles avec les données a exporter """ entreprises_titles = ENTREPRISES_KEYS[:] sites_titles = SITES_KEYS[:] @@ -450,7 +491,7 @@ def check_sites_import(m): def check_site_import(site_data): """ - Verifie les données d'une ligne Excel (sites) + Verifie les données d'une ligne Excel (site) """ champs_obligatoires = [ "siret_entreprise", @@ -482,6 +523,9 @@ def check_site_import(site_data): def check_correspondants_import(m): + """ + Verifie la feuille Excel "Correspondants" de l'importation données + """ ligne = 1 if m[0] != CORRESPONDANTS_KEYS: flash( @@ -557,6 +601,9 @@ def check_correspondant_import(correspondant_data): def list_to_dict(m): + """ + Transforme une liste de liste (matrice) en liste de dictionnaire (key = premiere liste de la matrice) + """ l = [] for data in m[1:]: new_dict = {title: value.strip() for title, value in zip(m[0], data)} diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index 7060e85b..b2f88832 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -66,7 +66,7 @@ from werkzeug.utils import secure_filename @permission_required(Permission.RelationsEntreprisesView) def index(): """ - Permet d'afficher une page avec la liste des entreprises (visible) et une liste des dernières opérations + Permet d'afficher une page avec la liste des entreprises (visible et active) et une liste des dernières opérations """ entreprises = Entreprise.query.filter_by(visible=True, active=True) logs = ( @@ -81,12 +81,12 @@ def index(): if checked[0]: entreprises = Entreprise.query.filter_by(visible=True) if checked[1]: - entreprises = Entreprise.query.filter_by(association=True) + entreprises = Entreprise.query.filter_by(visible=True, association=True) if checked[2]: - entreprises = Entreprise.query.filter_by(siret_provisoire=True) + entreprises = Entreprise.query.filter_by(visible=True, siret_provisoire=True) if checked[1] and checked[2]: entreprises = Entreprise.query.filter_by( - association=True, siret_provisoire=True + visible=True, association=True, siret_provisoire=True ) return render_template( "entreprises/entreprises.html", @@ -167,19 +167,7 @@ def fiche_entreprise(entreprise_id): entreprise = Entreprise.query.filter_by( id=entreprise_id, visible=True ).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue") - offres_with_files = [] - depts = are.get_depts() - for offre in entreprise.offres: - if not offre.expired and ( - offre.expiration_date is None - or ( - offre.expiration_date is not None - and date.today() < offre.expiration_date - ) - ): - offre_with_files = are.get_offre_files_and_depts(offre, depts) - if offre_with_files is not None: - offres_with_files.append(offre_with_files) + offres_with_files = are.get_offres_non_expirees_with_files(entreprise.offres) logs = ( EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc()) .filter(EntrepriseHistorique.entreprise_id == entreprise.id) @@ -298,20 +286,12 @@ def offres_expirees(entreprise_id): entreprise = Entreprise.query.filter_by( id=entreprise_id, visible=True ).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue") - offres_expirees_with_files = [] - depts = are.get_depts() - for offre in entreprise.offres: - if offre.expired or ( - offre.expiration_date is not None and date.today() > offre.expiration_date - ): - offre_expiree_with_files = are.get_offre_files_and_depts(offre, depts) - if offre_expiree_with_files is not None: - offres_expirees_with_files.append(offre_expiree_with_files) + offres_with_files = are.get_offres_expirees_with_files(entreprise.offres) return render_template( "entreprises/offres_expirees.html", title="Offres expirées", entreprise=entreprise, - offres_expirees=offres_expirees_with_files, + offres_expirees=offres_with_files, ) @@ -956,6 +936,9 @@ def expired(entreprise_id, offre_id): ) @permission_required(Permission.RelationsEntreprisesChange) def add_site(entreprise_id): + """ + Permet d'ajouter un site a une entreprise + """ entreprise = Entreprise.query.filter_by( id=entreprise_id, visible=True ).first_or_404(description=f"entreprise {entreprise_id} inconnue") @@ -998,6 +981,9 @@ def add_site(entreprise_id): methods=["GET", "POST"], ) def edit_site(entreprise_id, site_id): + """ + Permet de modifier une offre + """ site = EntrepriseSite.query.filter_by( id=site_id, entreprise_id=entreprise_id ).first_or_404( @@ -1887,4 +1873,7 @@ def preferences(): @bp.errorhandler(404) def not_found_error_handler(e): + """ + Renvoie une page d'erreur pour l'erreur 404 + """ return render_template("entreprises/error.html", title="Erreur", e=e) diff --git a/app/static/css/entreprises.css b/app/static/css/entreprises.css index 947f90fb..7f86d9d7 100644 --- a/app/static/css/entreprises.css +++ b/app/static/css/entreprises.css @@ -184,6 +184,10 @@ padding-left: 0; } -#form-entreprise-filter > label { +#form-entreprise-filter > div { + display: inline-block; +} + +#form-entreprise-filter > div > label { margin-right: 20px; } \ No newline at end of file diff --git a/app/templates/entreprises/entreprises.html b/app/templates/entreprises/entreprises.html index dda33de4..89fd97be 100644 --- a/app/templates/entreprises/entreprises.html +++ b/app/templates/entreprises/entreprises.html @@ -39,9 +39,9 @@ {% if form %}
{{ form.hidden_tag() }} - {{ form.active.label }} - {{ form.association.label }} - {{ form.siret_provisoire.label }} +
{{ form.active.label }}
+
{{ form.association.label }}
+
{{ form.siret_provisoire.label }}
{% endif %} @@ -61,7 +61,7 @@ {% for entreprise in entreprises %} - + diff --git a/app/templates/entreprises/fiche_entreprise.html b/app/templates/entreprises/fiche_entreprise.html index 6535ff73..cd3ccc8a 100644 --- a/app/templates/entreprises/fiche_entreprise.html +++ b/app/templates/entreprises/fiche_entreprise.html @@ -48,7 +48,7 @@
- SIRET : {{ entreprise.siret }}
+ SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}
Nom : {{ entreprise.nom }}
Adresse : {{ entreprise.adresse }}
Code postal : {{ entreprise.codepostal }}
diff --git a/app/templates/entreprises/fiche_entreprise_validation.html b/app/templates/entreprises/fiche_entreprise_validation.html index 9ee189c1..33e10ed6 100644 --- a/app/templates/entreprises/fiche_entreprise_validation.html +++ b/app/templates/entreprises/fiche_entreprise_validation.html @@ -7,7 +7,7 @@
- SIRET : {{ entreprise.siret }}
+ SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}
Nom : {{ entreprise.nom }}
Adresse : {{ entreprise.adresse }}
Code postal : {{ entreprise.codepostal }}
{{ entreprise.siret }}{{ entreprise.siret }} {{ entreprise.nom }} {{ entreprise.adresse }} {{ entreprise.codepostal }}