forked from ScoDoc/ScoDoc
import données sites + correspondants
This commit is contained in:
parent
1ba5954762
commit
835d1d38ed
@ -30,7 +30,7 @@ import re
|
|||||||
import requests
|
import requests
|
||||||
import glob
|
import glob
|
||||||
|
|
||||||
from flask import redirect, url_for, flash
|
from flask import flash
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
|
|
||||||
from app.entreprises.models import (
|
from app.entreprises.models import (
|
||||||
@ -184,6 +184,9 @@ 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"
|
||||||
|
"""
|
||||||
entreprises_titles = ENTREPRISES_KEYS[:]
|
entreprises_titles = ENTREPRISES_KEYS[:]
|
||||||
sites_titles = SITES_KEYS[:]
|
sites_titles = SITES_KEYS[:]
|
||||||
correspondants_titles = CORRESPONDANTS_KEYS[:]
|
correspondants_titles = CORRESPONDANTS_KEYS[:]
|
||||||
@ -269,56 +272,10 @@ def get_excel_book_are(export: bool = False):
|
|||||||
return wb
|
return wb
|
||||||
|
|
||||||
|
|
||||||
def verif_correspondant_data(correspondant_data):
|
|
||||||
"""
|
|
||||||
Verifie les données d'une ligne Excel (correspondant)
|
|
||||||
correspondant_data[0]: civilite
|
|
||||||
correspondant_data[1]: nom
|
|
||||||
correspondant_data[2]: prenom
|
|
||||||
correspondant_data[3]: telephone
|
|
||||||
correspondant_data[4]: mail
|
|
||||||
correspondant_data[5]: poste
|
|
||||||
correspondant_data[6]: service
|
|
||||||
correspondant_data[7]: origine
|
|
||||||
correspondant_data[8]: notes
|
|
||||||
correspondant_data[9]: entreprise_siret
|
|
||||||
"""
|
|
||||||
# champs obligatoires
|
|
||||||
if (
|
|
||||||
correspondant_data[0].strip() == ""
|
|
||||||
or correspondant_data[1].strip() == ""
|
|
||||||
or correspondant_data[2].strip() == ""
|
|
||||||
or correspondant_data[9].strip() == ""
|
|
||||||
):
|
|
||||||
return False
|
|
||||||
|
|
||||||
# civilite entre H ou F
|
|
||||||
if correspondant_data[0].strip() not in ["H", "F"]:
|
|
||||||
return False
|
|
||||||
|
|
||||||
# entreprise_id existant
|
|
||||||
entreprise = Entreprise.query.filter_by(siret=correspondant_data[9].strip()).first()
|
|
||||||
if entreprise is None:
|
|
||||||
return False
|
|
||||||
|
|
||||||
# correspondant possède le meme nom et prénom dans la meme entreprise
|
|
||||||
correspondant = EntrepriseCorrespondant.query.filter_by(
|
|
||||||
nom=correspondant_data[1].strip(),
|
|
||||||
prenom=correspondant_data[2].strip(),
|
|
||||||
entreprise_id=entreprise.id,
|
|
||||||
).first()
|
|
||||||
if correspondant is not None:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if (
|
|
||||||
correspondant_data[3].strip() == "" and correspondant_data[4].strip() == ""
|
|
||||||
): # 1 moyen de contact
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def check_entreprises_import(m):
|
def check_entreprises_import(m):
|
||||||
|
"""
|
||||||
|
Verifie la feuille Excel "Entreprises" de l'importation données
|
||||||
|
"""
|
||||||
entreprises_import = []
|
entreprises_import = []
|
||||||
siret_list = []
|
siret_list = []
|
||||||
ligne = 1
|
ligne = 1
|
||||||
@ -326,14 +283,14 @@ def check_entreprises_import(m):
|
|||||||
flash(
|
flash(
|
||||||
f'Veuillez utilisez la feuille excel à remplir (Feuille "Entreprises", ligne {ligne})'
|
f'Veuillez utilisez la feuille excel à remplir (Feuille "Entreprises", ligne {ligne})'
|
||||||
)
|
)
|
||||||
return redirect(url_for("entreprises.import_donnees"))
|
return False
|
||||||
for entreprise_data in m[1:]:
|
for entreprise_data in m[1:]:
|
||||||
ligne += 1
|
ligne += 1
|
||||||
entreprise_data[0] = entreprise_data[0].strip().replace(" ", "")
|
entreprise_data[0] = entreprise_data[0].strip().replace(" ", "")
|
||||||
siret = entreprise_data[0]
|
siret = entreprise_data[0]
|
||||||
if check_entreprise_import(entreprise_data) and siret not in siret_list:
|
if check_entreprise_import(entreprise_data) and siret not in siret_list:
|
||||||
siret_list.append(siret)
|
siret_list.append(siret)
|
||||||
entreprise = Entreprise.query.filter_by(siret=siret).first()
|
entreprise = Entreprise.query.filter_by(siret=siret, visible=True).first()
|
||||||
if entreprise is None:
|
if entreprise is None:
|
||||||
entreprise_import = Entreprise(
|
entreprise_import = Entreprise(
|
||||||
siret=siret,
|
siret=siret,
|
||||||
@ -341,7 +298,9 @@ def check_entreprises_import(m):
|
|||||||
adresse=entreprise_data[2].strip(),
|
adresse=entreprise_data[2].strip(),
|
||||||
ville=entreprise_data[3].strip(),
|
ville=entreprise_data[3].strip(),
|
||||||
codepostal=entreprise_data[4].strip(),
|
codepostal=entreprise_data[4].strip(),
|
||||||
pays=entreprise_data[5].strip(),
|
pays=entreprise_data[5].strip()
|
||||||
|
if entreprise_data[5].strip()
|
||||||
|
else "FRANCE",
|
||||||
visible=True,
|
visible=True,
|
||||||
)
|
)
|
||||||
entreprises_import.append(entreprise_import)
|
entreprises_import.append(entreprise_import)
|
||||||
@ -359,7 +318,7 @@ def check_entreprises_import(m):
|
|||||||
flash(
|
flash(
|
||||||
f'Erreur lors de l\'importation (Feuille "Entreprises", ligne {ligne})'
|
f'Erreur lors de l\'importation (Feuille "Entreprises", ligne {ligne})'
|
||||||
)
|
)
|
||||||
return redirect(url_for("entreprises.import_donnees"))
|
return False
|
||||||
|
|
||||||
if len(entreprises_import) > 0:
|
if len(entreprises_import) > 0:
|
||||||
log = EntrepriseLog(
|
log = EntrepriseLog(
|
||||||
@ -371,7 +330,7 @@ def check_entreprises_import(m):
|
|||||||
return entreprises_import
|
return entreprises_import
|
||||||
|
|
||||||
|
|
||||||
def check_entreprise_import(entreprise_data):
|
def check_entreprise_import(entreprise_data: list):
|
||||||
"""
|
"""
|
||||||
Verifie les données d'une ligne Excel (entreprise)
|
Verifie les données d'une ligne Excel (entreprise)
|
||||||
"""
|
"""
|
||||||
@ -393,3 +352,157 @@ def check_entreprise_import(entreprise_data):
|
|||||||
except requests.ConnectionError:
|
except requests.ConnectionError:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check_sites_import(m):
|
||||||
|
"""
|
||||||
|
Verifie la feuille Excel "Sites" de l'importation données
|
||||||
|
"""
|
||||||
|
sites_import = []
|
||||||
|
correspondants_import = []
|
||||||
|
ligne = 1
|
||||||
|
if m[0] != sum(SITES_KEYS, []):
|
||||||
|
flash(
|
||||||
|
f'Veuillez utilisez la feuille excel à remplir (Feuille "Sites", ligne {ligne})'
|
||||||
|
)
|
||||||
|
return False, False
|
||||||
|
for site_data in m[1:]:
|
||||||
|
ligne += 1
|
||||||
|
site_data[0] = site_data[0].strip().replace(" ", "")
|
||||||
|
if check_site_import(site_data):
|
||||||
|
correspondant_data = site_data[len(SITES_KEYS[0]) :]
|
||||||
|
entreprise = Entreprise.query.filter_by(
|
||||||
|
siret=site_data[0], visible=True
|
||||||
|
).first()
|
||||||
|
if site_data[1].strip() == "":
|
||||||
|
site_import = EntrepriseSite(
|
||||||
|
entreprise_id=entreprise.id,
|
||||||
|
nom=site_data[2].strip(),
|
||||||
|
adresse=site_data[3].strip(),
|
||||||
|
codepostal=site_data[4].strip(),
|
||||||
|
ville=site_data[5].strip(),
|
||||||
|
pays=site_data[6].strip(),
|
||||||
|
)
|
||||||
|
if correspondant_data == [""] * len(SITES_KEYS[1]):
|
||||||
|
sites_import.append(site_import)
|
||||||
|
else:
|
||||||
|
correspondant_import = EntrepriseCorrespondant(
|
||||||
|
entreprise_id=entreprise.id,
|
||||||
|
civilite=correspondant_data[0],
|
||||||
|
nom=correspondant_data[1],
|
||||||
|
prenom=correspondant_data[2],
|
||||||
|
telephone=correspondant_data[3],
|
||||||
|
mail=correspondant_data[4],
|
||||||
|
poste=correspondant_data[5],
|
||||||
|
service=correspondant_data[6],
|
||||||
|
origine=correspondant_data[7],
|
||||||
|
notes=correspondant_data[8],
|
||||||
|
)
|
||||||
|
sites_import.append(site_import)
|
||||||
|
correspondants_import.append([site_import, correspondant_import])
|
||||||
|
else:
|
||||||
|
site_id = site_data[1].strip()
|
||||||
|
site = EntrepriseSite.query.filter_by(id=site_id).first()
|
||||||
|
site.nom = site_data[2].strip()
|
||||||
|
site.adresse = site_data[3].strip()
|
||||||
|
site.codepostal = site_data[4].strip()
|
||||||
|
site.ville = site_data[5].strip()
|
||||||
|
site.pays = site_data[6].strip()
|
||||||
|
|
||||||
|
if correspondant_data != [""] * len(SITES_KEYS[1]):
|
||||||
|
correspondant_import = EntrepriseCorrespondant(
|
||||||
|
entreprise_id=entreprise.id,
|
||||||
|
site_id=site.id,
|
||||||
|
civilite=correspondant_data[0],
|
||||||
|
nom=correspondant_data[1],
|
||||||
|
prenom=correspondant_data[2],
|
||||||
|
telephone=correspondant_data[3],
|
||||||
|
mail=correspondant_data[4],
|
||||||
|
poste=correspondant_data[5],
|
||||||
|
service=correspondant_data[6],
|
||||||
|
origine=correspondant_data[7],
|
||||||
|
notes=correspondant_data[8],
|
||||||
|
)
|
||||||
|
correspondants_import.append([None, correspondant_import])
|
||||||
|
else:
|
||||||
|
flash(f'Erreur lors de l\'importation (Feuille "Sites", ligne {ligne})')
|
||||||
|
return False, False
|
||||||
|
|
||||||
|
if len(sites_import) > 0:
|
||||||
|
log = EntrepriseLog(
|
||||||
|
authenticated_user=current_user.user_name,
|
||||||
|
text=f"Importation de {len(sites_import)} site(s)",
|
||||||
|
)
|
||||||
|
db.session.add(log)
|
||||||
|
|
||||||
|
if len(correspondants_import) > 0:
|
||||||
|
log = EntrepriseLog(
|
||||||
|
authenticated_user=current_user.user_name,
|
||||||
|
text=f"Importation de {len(correspondants_import)} correspondant(s)",
|
||||||
|
)
|
||||||
|
db.session.add(log)
|
||||||
|
|
||||||
|
return sites_import, correspondants_import
|
||||||
|
|
||||||
|
|
||||||
|
def check_site_import(row_data: list):
|
||||||
|
"""
|
||||||
|
Verifie les données d'une ligne Excel (sites)
|
||||||
|
"""
|
||||||
|
site_data = row_data[: -len(SITES_KEYS[1])]
|
||||||
|
correspondant_data = row_data[len(SITES_KEYS[0]) :]
|
||||||
|
for data in [site_data[0]] + site_data[2:]: # champs obligatoires
|
||||||
|
if data.strip() == "":
|
||||||
|
return False
|
||||||
|
|
||||||
|
if correspondant_data != [""] * len(SITES_KEYS[1]):
|
||||||
|
if check_correspondant_import(correspondant_data, site_data) is False:
|
||||||
|
return False
|
||||||
|
|
||||||
|
entreprise = Entreprise.query.filter_by(siret=site_data[0], visible=True).first()
|
||||||
|
if entreprise is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
site = EntrepriseSite.query.filter_by(nom=site_data[2]).first()
|
||||||
|
if site_data[1] == "" and site is not None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check_correspondant_import(correspondant_data: list, site_data: list = None):
|
||||||
|
"""
|
||||||
|
Verifie les données d'une ligne Excel (correspondant)
|
||||||
|
"""
|
||||||
|
# champs obligatoires
|
||||||
|
if (
|
||||||
|
correspondant_data[0].strip() == ""
|
||||||
|
or correspondant_data[1].strip() == ""
|
||||||
|
or correspondant_data[2].strip() == ""
|
||||||
|
):
|
||||||
|
return False
|
||||||
|
|
||||||
|
# civilite entre H ou F
|
||||||
|
if correspondant_data[0].strip() not in ["H", "F"]:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# entreprise_id existant
|
||||||
|
entreprise = Entreprise.query.filter_by(siret=site_data[0], visible=True).first()
|
||||||
|
if entreprise is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# correspondant possède le meme nom et prénom dans la meme entreprise
|
||||||
|
correspondant = EntrepriseCorrespondant.query.filter_by(
|
||||||
|
nom=correspondant_data[1].strip(),
|
||||||
|
prenom=correspondant_data[2].strip(),
|
||||||
|
entreprise_id=entreprise.id,
|
||||||
|
).first()
|
||||||
|
if correspondant is not None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if (
|
||||||
|
correspondant_data[3].strip() == "" and correspondant_data[4].strip() == ""
|
||||||
|
): # 1 moyen de contact
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
@ -1426,6 +1426,13 @@ def import_donnees():
|
|||||||
flash("Veuillez utilisez la feuille excel à remplir (3 feuilles)")
|
flash("Veuillez utilisez la feuille excel à remplir (3 feuilles)")
|
||||||
return redirect(url_for("entreprises.import_donnees"))
|
return redirect(url_for("entreprises.import_donnees"))
|
||||||
entreprises_import = are.check_entreprises_import(lm[0])
|
entreprises_import = are.check_entreprises_import(lm[0])
|
||||||
|
sites_import, correspondants_import = are.check_sites_import(lm[1])
|
||||||
|
if (
|
||||||
|
entreprises_import is False
|
||||||
|
or sites_import is False
|
||||||
|
or correspondants_import is False
|
||||||
|
):
|
||||||
|
return redirect(url_for("entreprises.import_donnees"))
|
||||||
for entreprise in entreprises_import:
|
for entreprise in entreprises_import:
|
||||||
db.session.add(entreprise)
|
db.session.add(entreprise)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@ -1439,13 +1446,28 @@ def import_donnees():
|
|||||||
pays=entreprise.pays,
|
pays=entreprise.pays,
|
||||||
)
|
)
|
||||||
db.session.add(site)
|
db.session.add(site)
|
||||||
db.session.commit()
|
for site in sites_import:
|
||||||
|
db.session.add(site)
|
||||||
|
correspondants = []
|
||||||
|
for site, correspondant in correspondants_import:
|
||||||
|
if site is None:
|
||||||
|
db.session.add(correspondant)
|
||||||
|
else:
|
||||||
|
db.session.add(site)
|
||||||
|
db.session.commit()
|
||||||
|
db.session.refresh(site)
|
||||||
|
correspondant.site_id = site.id
|
||||||
|
db.session.add(correspondant)
|
||||||
|
correspondants.append(correspondant)
|
||||||
|
db.session.commit()
|
||||||
flash(f"Importation réussie")
|
flash(f"Importation réussie")
|
||||||
return render_template(
|
return render_template(
|
||||||
"entreprises/import_donnees.html",
|
"entreprises/import_donnees.html",
|
||||||
title="Importation données",
|
title="Importation données",
|
||||||
form=form,
|
form=form,
|
||||||
entreprises_import=entreprises_import,
|
entreprises_import=entreprises_import,
|
||||||
|
sites_import=sites_import,
|
||||||
|
correspondants_import=correspondants,
|
||||||
)
|
)
|
||||||
return render_template(
|
return render_template(
|
||||||
"entreprises/import_donnees.html", title="Importation données", form=form
|
"entreprises/import_donnees.html", title="Importation données", form=form
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if not entreprises_import %}
|
{% if not entreprises_import and not sites_import and not correspondants_import %}
|
||||||
<div>Feuille Entreprises</div>
|
<div>Feuille Entreprises</div>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead><tr><td><b>Attribut</b></td><td><b>Type</b></td><td><b>Description</b></td></tr></thead>
|
<thead><tr><td><b>Attribut</b></td><td><b>Type</b></td><td><b>Description</b></td></tr></thead>
|
||||||
@ -59,4 +59,73 @@
|
|||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if entreprises_import %}
|
||||||
|
<br><div>Importation de {{ entreprises_import|length }} entreprise(s)</div>
|
||||||
|
{% for entreprise in entreprises_import %}
|
||||||
|
<div class="entreprise">
|
||||||
|
<div>
|
||||||
|
SIRET : {{ entreprise.siret }}<br>
|
||||||
|
Nom : {{ entreprise.nom }}<br>
|
||||||
|
Adresse : {{ entreprise.adresse }}<br>
|
||||||
|
Code postal : {{ entreprise.codepostal }}<br>
|
||||||
|
Ville : {{ entreprise.ville }}<br>
|
||||||
|
Pays : {{ entreprise.pays }}
|
||||||
|
</div>
|
||||||
|
{% for site in entreprise.sites %}
|
||||||
|
<div class="site">
|
||||||
|
Nom : {{ site.nom }}<br>
|
||||||
|
Adresse : {{ site.adresse }}<br>
|
||||||
|
Code postal : {{ site.codepostal }}<br>
|
||||||
|
Ville : {{ site.ville }}<br>
|
||||||
|
Pays : {{ site.pays }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if sites_import %}
|
||||||
|
<br><div>Importation de {{ sites_import|length }} site(s)</div>
|
||||||
|
{% for site in sites_import %}
|
||||||
|
<div class="site">
|
||||||
|
Nom : {{ site.nom }}<br>
|
||||||
|
Adresse : {{ site.adresse }}<br>
|
||||||
|
Code postal : {{ site.codepostal }}<br>
|
||||||
|
Ville : {{ site.ville }}<br>
|
||||||
|
Pays : {{ site.pays }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if correspondants_import %}
|
||||||
|
<br><div>Importation de {{ correspondants_import|length }} correspondant(s)</div>
|
||||||
|
{% for correspondant in correspondants_import %}
|
||||||
|
<div class="correspondant">
|
||||||
|
<div>
|
||||||
|
Civilité : {{ correspondant.civilite|get_civilité }}<br>
|
||||||
|
Nom : {{ correspondant.nom }}<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 %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user