correction et amélioration module entreprises

This commit is contained in:
Arthur ZHU 2022-08-10 02:27:52 +02:00
parent f0c342fad5
commit 0bc969946a
6 changed files with 76 additions and 36 deletions

View File

@ -29,6 +29,7 @@ from config import Config
import re import re
import requests import requests
import glob import glob
from datetime import date
from flask import flash from flask import flash
from flask_login import current_user 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): 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() dept = Departement.query.filter_by(id=id).first()
if dept is not None: if dept is not None:
return dept.acronym 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): 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() offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
correspondant = EntrepriseCorrespondant.query.filter_by( correspondant = EntrepriseCorrespondant.query.filter_by(
@ -162,6 +166,42 @@ def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list):
return None 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): def send_email_notifications_entreprise(subject: str, entreprise: Entreprise):
txt = [ txt = [
"Une entreprise est en attente de validation", "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): def get_excel_book_are(export: bool = False):
""" """
Retourne un Excel avec les 3 feuilles "Entreprises", "Sites" et "Correspondants" 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[:] entreprises_titles = ENTREPRISES_KEYS[:]
sites_titles = SITES_KEYS[:] sites_titles = SITES_KEYS[:]
@ -450,7 +491,7 @@ def check_sites_import(m):
def check_site_import(site_data): 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 = [ champs_obligatoires = [
"siret_entreprise", "siret_entreprise",
@ -482,6 +523,9 @@ def check_site_import(site_data):
def check_correspondants_import(m): def check_correspondants_import(m):
"""
Verifie la feuille Excel "Correspondants" de l'importation données
"""
ligne = 1 ligne = 1
if m[0] != CORRESPONDANTS_KEYS: if m[0] != CORRESPONDANTS_KEYS:
flash( flash(
@ -557,6 +601,9 @@ def check_correspondant_import(correspondant_data):
def list_to_dict(m): def list_to_dict(m):
"""
Transforme une liste de liste (matrice) en liste de dictionnaire (key = premiere liste de la matrice)
"""
l = [] l = []
for data in m[1:]: for data in m[1:]:
new_dict = {title: value.strip() for title, value in zip(m[0], data)} new_dict = {title: value.strip() for title, value in zip(m[0], data)}

View File

@ -66,7 +66,7 @@ from werkzeug.utils import secure_filename
@permission_required(Permission.RelationsEntreprisesView) @permission_required(Permission.RelationsEntreprisesView)
def index(): 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) entreprises = Entreprise.query.filter_by(visible=True, active=True)
logs = ( logs = (
@ -81,12 +81,12 @@ def index():
if checked[0]: if checked[0]:
entreprises = Entreprise.query.filter_by(visible=True) entreprises = Entreprise.query.filter_by(visible=True)
if checked[1]: if checked[1]:
entreprises = Entreprise.query.filter_by(association=True) entreprises = Entreprise.query.filter_by(visible=True, association=True)
if checked[2]: 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]: if checked[1] and checked[2]:
entreprises = Entreprise.query.filter_by( entreprises = Entreprise.query.filter_by(
association=True, siret_provisoire=True visible=True, association=True, siret_provisoire=True
) )
return render_template( return render_template(
"entreprises/entreprises.html", "entreprises/entreprises.html",
@ -167,19 +167,7 @@ def fiche_entreprise(entreprise_id):
entreprise = Entreprise.query.filter_by( entreprise = Entreprise.query.filter_by(
id=entreprise_id, visible=True id=entreprise_id, visible=True
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue") ).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
offres_with_files = [] offres_with_files = are.get_offres_non_expirees_with_files(entreprise.offres)
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)
logs = ( logs = (
EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc()) EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc())
.filter(EntrepriseHistorique.entreprise_id == entreprise.id) .filter(EntrepriseHistorique.entreprise_id == entreprise.id)
@ -298,20 +286,12 @@ def offres_expirees(entreprise_id):
entreprise = Entreprise.query.filter_by( entreprise = Entreprise.query.filter_by(
id=entreprise_id, visible=True id=entreprise_id, visible=True
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue") ).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
offres_expirees_with_files = [] offres_with_files = are.get_offres_expirees_with_files(entreprise.offres)
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)
return render_template( return render_template(
"entreprises/offres_expirees.html", "entreprises/offres_expirees.html",
title="Offres expirées", title="Offres expirées",
entreprise=entreprise, 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) @permission_required(Permission.RelationsEntreprisesChange)
def add_site(entreprise_id): def add_site(entreprise_id):
"""
Permet d'ajouter un site a une entreprise
"""
entreprise = Entreprise.query.filter_by( entreprise = Entreprise.query.filter_by(
id=entreprise_id, visible=True id=entreprise_id, visible=True
).first_or_404(description=f"entreprise {entreprise_id} inconnue") ).first_or_404(description=f"entreprise {entreprise_id} inconnue")
@ -998,6 +981,9 @@ def add_site(entreprise_id):
methods=["GET", "POST"], methods=["GET", "POST"],
) )
def edit_site(entreprise_id, site_id): def edit_site(entreprise_id, site_id):
"""
Permet de modifier une offre
"""
site = EntrepriseSite.query.filter_by( site = EntrepriseSite.query.filter_by(
id=site_id, entreprise_id=entreprise_id id=site_id, entreprise_id=entreprise_id
).first_or_404( ).first_or_404(
@ -1887,4 +1873,7 @@ def preferences():
@bp.errorhandler(404) @bp.errorhandler(404)
def not_found_error_handler(e): 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) return render_template("entreprises/error.html", title="Erreur", e=e)

View File

@ -184,6 +184,10 @@
padding-left: 0; padding-left: 0;
} }
#form-entreprise-filter > label { #form-entreprise-filter > div {
display: inline-block;
}
#form-entreprise-filter > div > label {
margin-right: 20px; margin-right: 20px;
} }

View File

@ -39,9 +39,9 @@
{% if form %} {% if form %}
<form id="form-entreprise-filter" method="POST" action=""> <form id="form-entreprise-filter" method="POST" action="">
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
<input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }} <div><input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }}</div>
<input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }} <div><input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }}</div>
<input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }} <div><input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }}</div>
</form> </form>
{% endif %} {% endif %}
<table id="table-entreprises"> <table id="table-entreprises">
@ -61,7 +61,7 @@
<tbody> <tbody>
{% for entreprise in entreprises %} {% for entreprise in entreprises %}
<tr> <tr>
<td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id) }}" {% if not entreprise.active %} style="color:red" {% endif %}>{{ entreprise.siret }}</a></td> <td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id) }}" style="{% if not entreprise.active %}color:red;{% endif %}{% if entreprise.siret_provisoire %}font-weight:bold;{% endif %}" >{{ entreprise.siret }}</a></td>
<td>{{ entreprise.nom }}</td> <td>{{ entreprise.nom }}</td>
<td>{{ entreprise.adresse }}</td> <td>{{ entreprise.adresse }}</td>
<td>{{ entreprise.codepostal }}</td> <td>{{ entreprise.codepostal }}</td>

View File

@ -48,7 +48,7 @@
<div class="entreprise"> <div class="entreprise">
<div> <div>
SIRET : {{ entreprise.siret }}<br> SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}<br>
Nom : {{ entreprise.nom }}<br> Nom : {{ entreprise.nom }}<br>
Adresse : {{ entreprise.adresse }}<br> Adresse : {{ entreprise.adresse }}<br>
Code postal : {{ entreprise.codepostal }}<br> Code postal : {{ entreprise.codepostal }}<br>

View File

@ -7,7 +7,7 @@
<div class="entreprise"> <div class="entreprise">
<div> <div>
SIRET : {{ entreprise.siret }}<br> SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}<br>
Nom : {{ entreprise.nom }}<br> Nom : {{ entreprise.nom }}<br>
Adresse : {{ entreprise.adresse }}<br> Adresse : {{ entreprise.adresse }}<br>
Code postal : {{ entreprise.codepostal }}<br> Code postal : {{ entreprise.codepostal }}<br>