correction suite aux changements, suite import export

This commit is contained in:
Arthur ZHU 2022-05-31 19:15:24 +02:00
parent 8e95996930
commit e96d714545
4 changed files with 159 additions and 83 deletions

View File

@ -38,10 +38,11 @@ from app.entreprises.models import (
EntrepriseOffre, EntrepriseOffre,
EntrepriseOffreDepartement, EntrepriseOffreDepartement,
EntreprisePreferences, EntreprisePreferences,
EntrepriseSite,
) )
from app import email, db
from app import email
from app.scodoc import sco_preferences from app.scodoc import sco_preferences
from app.scodoc import sco_excel
from app.models import Departement from app.models import Departement
from app.scodoc.sco_permissions import Permission from app.scodoc.sco_permissions import Permission
@ -212,3 +213,75 @@ def verif_entreprise_data(entreprise_data):
if entreprise is not None: if entreprise is not None:
return False return False
return True return True
def get_excel_book_are(export=False):
entreprises_keys = [
"siret",
"nom_entreprise",
"adresse",
"ville",
"code_postal",
"pays",
"association",
"visible",
"active",
"notes_active",
]
sites_keys = [
"siret_entreprise",
"nom_site",
"adresse",
"ville",
"code_postal",
"pays",
]
entreprises_titles = entreprises_keys[:]
sites_titles = sites_keys[:]
wb = sco_excel.ScoExcelBook()
ws1 = wb.create_sheet("Entreprises")
ws1.append_row(
[
ws1.make_cell(it, style)
for (it, style) in zip(
entreprises_titles,
[sco_excel.excel_make_style(bold=True)] * len(entreprises_titles),
)
]
)
ws2 = wb.create_sheet("Sites")
ws2.append_row(
[
ws2.make_cell(it, style)
for (it, style) in zip(
sites_titles,
[sco_excel.excel_make_style(bold=True)] * len(sites_titles),
)
]
)
if export:
entreprises = Entreprise.query.filter_by(visible=True).all()
sites = (
db.session.query(EntrepriseSite)
.join(Entreprise, EntrepriseSite.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
]
for line in entreprises_lines:
cells = []
for it in line:
cells.append(ws1.make_cell(it))
ws1.append_row(cells)
for line in sites_lines:
cells = []
for it in line:
cells.append(ws2.make_cell(it))
ws2.append_row(cells)
return wb

View File

@ -37,6 +37,10 @@ class Entreprise(db.Model):
"code_postal": self.codepostal, "code_postal": self.codepostal,
"ville": self.ville, "ville": self.ville,
"pays": self.pays, "pays": self.pays,
"association": self.association,
"visible": self.visible,
"active": self.active,
"notes_active": self.notes_active,
} }
@ -59,6 +63,17 @@ class EntrepriseSite(db.Model):
cascade="all, delete-orphan", cascade="all, delete-orphan",
) )
def to_dict(self):
entreprise = Entreprise.query.get_or_404(self.entreprise_id)
return {
"siret_entreprise": entreprise.siret,
"nom_site": self.nom,
"adresse": self.adresse,
"code_postal": self.codepostal,
"ville": self.ville,
"pays": self.pays,
}
class EntrepriseCorrespondant(db.Model): class EntrepriseCorrespondant(db.Model):
__tablename__ = "are_correspondants" __tablename__ = "are_correspondants"

View File

@ -138,6 +138,7 @@ def correspondants():
.join(EntrepriseSite, EntrepriseCorrespondant.site_id == EntrepriseSite.id) .join(EntrepriseSite, EntrepriseCorrespondant.site_id == EntrepriseSite.id)
.join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id) .join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id)
.filter_by(visible=True, active=True) .filter_by(visible=True, active=True)
.all()
) )
logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all() logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all()
return render_template( return render_template(
@ -216,7 +217,7 @@ def logs_entreprise(id):
) )
logs = ( logs = (
EntrepriseLog.query.order_by(EntrepriseLog.date.desc()) EntrepriseLog.query.order_by(EntrepriseLog.date.desc())
.filter(EntrepriseLog.entreprise_id == id) .filter(EntrepriseLog.entreprise_id == entreprise.id)
.paginate(page=page, per_page=20) .paginate(page=page, per_page=20)
) )
return render_template( return render_template(
@ -236,12 +237,12 @@ def fiche_entreprise_validation(id):
entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404(
description=f"fiche entreprise (validation) {id} inconnue" description=f"fiche entreprise (validation) {id} inconnue"
) )
correspondants = entreprise.correspondants sites = entreprise.sites[:]
return render_template( return render_template(
"entreprises/fiche_entreprise_validation.html", "entreprises/fiche_entreprise_validation.html",
title="Validation fiche entreprise", title="Validation fiche entreprise",
entreprise=entreprise, entreprise=entreprise,
correspondants=correspondants, sites=sites,
) )
@ -875,8 +876,11 @@ def add_site(id):
methods=["GET", "POST"], methods=["GET", "POST"],
) )
def edit_site(id_entreprise, id_site): def edit_site(id_entreprise, id_site):
entreprise = Entreprise.query.filter_by(
id=id_entreprise, visible=True
).first_or_404(description=f"entreprise {id_entreprise} inconnue")
site = EntrepriseSite.query.filter_by( site = EntrepriseSite.query.filter_by(
id=id_site, entreprise_id=id_entreprise id=id_site, entreprise_id=entreprise.id
).first_or_404(description=f"site {id_site} inconnu") ).first_or_404(description=f"site {id_site} inconnu")
form = SiteModificationForm( form = SiteModificationForm(
hidden_entreprise_id=id_entreprise, hidden_site_id=id_site hidden_entreprise_id=id_entreprise, hidden_site_id=id_site
@ -960,8 +964,11 @@ def edit_correspondant(id):
""" """
Permet de modifier un correspondant Permet de modifier un correspondant
""" """
correspondant = EntrepriseCorrespondant.query.filter_by(id=id).first_or_404( correspondant = (
description=f"correspondant {id} inconnu" db.session.query(EntrepriseCorrespondant)
.join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id)
.filter(EntrepriseCorrespondant.id == id, Entreprise.visible == True)
.first_or_404(description=f"correspondant {id} inconnu")
) )
form = CorrespondantModificationForm( form = CorrespondantModificationForm(
hidden_entreprise_id=correspondant.entreprise_id, hidden_entreprise_id=correspondant.entreprise_id,
@ -1013,8 +1020,11 @@ def delete_correspondant(id):
""" """
Permet de supprimer un correspondant Permet de supprimer un correspondant
""" """
correspondant = EntrepriseCorrespondant.query.filter_by(id=id).first_or_404( correspondant = (
description=f"correspondant {id} inconnu" db.session.query(EntrepriseCorrespondant)
.join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id)
.filter(EntrepriseCorrespondant.id == id, Entreprise.visible == True)
.first_or_404(description=f"correspondant {id} inconnu")
) )
form = SuppressionConfirmationForm() form = SuppressionConfirmationForm()
if form.validate_on_submit(): if form.validate_on_submit():
@ -1126,7 +1136,10 @@ def contacts(id):
""" """
Permet d'afficher une page avec la liste des contacts d'une entreprise Permet d'afficher une page avec la liste des contacts d'une entreprise
""" """
contacts = EntrepriseContact.query.filter_by(entreprise=id).all() entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
description=f"entreprise {id} inconnue"
)
contacts = EntrepriseContact.query.filter_by(entreprise=entreprise.id).all()
return render_template( return render_template(
"entreprises/contacts.html", "entreprises/contacts.html",
title="Liste des contacts", title="Liste des contacts",
@ -1367,17 +1380,11 @@ def export_entreprises():
""" """
Permet d'exporter la liste des entreprises sous format excel (.xlsx) Permet d'exporter la liste des entreprises sous format excel (.xlsx)
""" """
entreprises = Entreprise.query.filter_by(visible=True).all() entreprise = Entreprise.query.filter_by(visible=True).first()
if entreprises: if entreprise:
keys = ["siret", "nom_entreprise", "adresse", "ville", "code_postal", "pays"] wb = are.get_excel_book_are(export=True)
titles = keys[:] xlsx = wb.generate()
L = [ filename = "ExportEntreprisesSites"
[entreprise.to_dict().get(k, "") for k in keys]
for entreprise in entreprises
]
title = "Entreprises"
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) return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE)
else: else:
flash("Aucune entreprise dans la base.") flash("Aucune entreprise dans la base.")
@ -1390,48 +1397,9 @@ def get_import_entreprises_file_sample():
""" """
Permet de récupérer un fichier exemple vide pour pouvoir importer des entreprises Permet de récupérer un fichier exemple vide pour pouvoir importer des entreprises
""" """
entreprises_titles = [ wb = are.get_excel_book_are()
"siret",
"nom_entreprise",
"adresse",
"ville",
"code_postal",
"pays",
]
sites_titles = [
"siret_entreprise",
"nom_site",
"adresse",
"ville",
"code_postal",
"pays",
]
title = "ImportEntreprises"
wb = sco_excel.ScoExcelBook()
ws1 = wb.create_sheet("Entreprises")
ws1.append_row(
[
ws1.make_cell(it, style, comment)
for (it, style, comment) in zip(
entreprises_titles,
[sco_excel.excel_make_style(bold=True)] * len(entreprises_titles),
[None] * len(entreprises_titles),
)
]
)
ws2 = wb.create_sheet("Sites")
ws2.append_row(
[
ws2.make_cell(it, style, comment)
for (it, style, comment) in zip(
sites_titles,
[sco_excel.excel_make_style(bold=True)] * len(sites_titles),
[None] * len(sites_titles),
)
]
)
xlsx = wb.generate() xlsx = wb.generate()
filename = title filename = "ImportEntreprisesSites"
return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE)

View File

@ -19,31 +19,51 @@
</div> </div>
</div> </div>
{% if correspondants %} <div class="sites-et-offres">
<div> {% if sites %}
{% for correspondant in correspondants %}
<div> <div>
<h3>Correspondant</h3> <h3>Sites</h3>
<div class="correspondant"> {% for site in sites %}
Nom : {{ correspondant.nom }}<br> <div class="site">
Prénom : {{ correspondant.prenom }}<br> Nom : {{ site.nom }}<br>
{% if correspondant.telephone %} Adresse : {{ site.adresse }}<br>
Téléphone : {{ correspondant.telephone }}<br> Code postal : {{ site.codepostal }}<br>
{% endif %} Ville : {{ site.ville }}<br>
{% if correspondant.mail %} Pays : {{ site.pays }}
Mail : {{ correspondant.mail }}<br> {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesCorrespondants, None) %}
{% endif %} {% for correspondant in site.correspondants %}
{% if correspondant.poste %} <div class="correspondant">
Poste : {{ correspondant.poste }}<br> <div>
{% endif %} Civilité : {{ correspondant.civilite|get_civilité }}<br>
{% if correspondant.service %} Nom : {{ correspondant.nom }}<br>
Service : {{ correspondant.service }}<br> Prénom : {{ correspondant.prenom }}<br>
{% if correspondant.telephone %}
Téléphone : {{ correspondant.telephone }}<br>
{% endif %}
{% if correspondant.mail %}
Mail : {{ correspondant.mail }}<br>
{% endif %}
{% if correspondant.poste %}
Poste : {{ correspondant.poste }}<br>
{% endif %}
{% if correspondant.service %}
Service : {{ correspondant.service }}<br>
{% endif %}
{% if correspondant.origine %}
Origine : {{ correspondant.origine }}<br>
{% endif %}
{% if correspondant.notes %}
Notes : {{ correspondant.notes }}<br>
{% endif %}
</div>
</div>
{% endfor %}
{% endif %} {% endif %}
</div> </div>
{% endfor %}
</div> </div>
{% endfor %} {% endif %}
</div> </div>
{% endif %}
<div> <div>
<a class="btn btn-success" href="{{ url_for('entreprises.validate_entreprise', id=entreprise.id) }}">Valider</a> <a class="btn btn-success" href="{{ url_for('entreprises.validate_entreprise', id=entreprise.id) }}">Valider</a>