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 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)}

View File

@ -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)

View File

@ -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;
}

View File

@ -39,9 +39,9 @@
{% if form %}
<form id="form-entreprise-filter" method="POST" action="">
{{ form.hidden_tag() }}
<input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }}
<input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }}
<input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }}
<div><input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }}</div>
<div><input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }}</div>
<div><input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }}</div>
</form>
{% endif %}
<table id="table-entreprises">
@ -61,7 +61,7 @@
<tbody>
{% for entreprise in entreprises %}
<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.adresse }}</td>
<td>{{ entreprise.codepostal }}</td>

View File

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

View File

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