diff --git a/app/__init__.py b/app/__init__.py
index 76f9471bb..cedb4564b 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -190,6 +190,7 @@ def create_app(config_class=DevConfig):
app.register_error_handler(ScoGenError, handle_sco_value_error)
app.register_error_handler(ScoValueError, handle_sco_value_error)
+ app.register_error_handler(404, handle_sco_value_error)
app.register_error_handler(AccessDenied, handle_access_denied)
app.register_error_handler(500, internal_server_error)
@@ -201,7 +202,7 @@ def create_app(config_class=DevConfig):
app.register_blueprint(auth_bp, url_prefix="/auth")
from app.entreprises import bp as entreprises_bp
-
+
app.register_blueprint(entreprises_bp, url_prefix="/ScoDoc/entreprises")
from app.views import scodoc_bp
diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py
index 43cef4a31..eaef9275c 100644
--- a/app/entreprises/routes.py
+++ b/app/entreprises/routes.py
@@ -123,7 +123,9 @@ def fiche_entreprise(id):
La fiche entreprise comporte les informations de l'entreprise, les contacts de l'entreprise et
les offres de l'entreprise.
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"fiche entreprise {id} inconnu"
+ )
offres_with_files = []
depts = are.get_depts()
for offre in entreprise.offres:
@@ -163,7 +165,9 @@ def logs_entreprise(id):
Permet d'afficher les logs (toutes les entreprises)
"""
page = request.args.get("page", 1, type=int)
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"logs fiche entreprise {id} inconnu"
+ )
logs = (
EntrepriseLog.query.order_by(EntrepriseLog.date.desc())
.filter_by(object=id)
@@ -183,7 +187,9 @@ def fiche_entreprise_validation(id):
"""
Permet d'afficher la fiche entreprise d'une entreprise a valider
"""
- 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} inconnu"
+ )
contacts = entreprise.contacts
return render_template(
"entreprises/fiche_entreprise_validation.html",
@@ -235,7 +241,9 @@ def offres_expirees(id):
"""
Permet d'afficher la liste des offres expirés d'une entreprise
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"fiche entreprise {id} inconnu"
+ )
offres_expirees_with_files = []
depts = are.get_depts()
for offre in entreprise.offres:
@@ -309,7 +317,9 @@ def edit_entreprise(id):
"""
Permet de modifier une entreprise de la base avec un formulaire
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"entreprise {id} inconnu"
+ )
form = EntrepriseModificationForm()
if form.validate_on_submit():
nom_entreprise = f"{form.nom.data.strip()}"
@@ -376,7 +386,9 @@ def delete_entreprise(id):
"""
Permet de supprimer une entreprise de la base avec un formulaire de confirmation
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"entreprise {id} inconnu"
+ )
form = SuppressionConfirmationForm()
if form.validate_on_submit():
db.session.delete(entreprise)
@@ -411,7 +423,9 @@ def validate_entreprise(id):
Permet de valider une entreprise
"""
form = ValidationConfirmationForm()
- 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"entreprise (validation) {id} inconnu"
+ )
if form.validate_on_submit():
entreprise.visible = True
nom_entreprise = f"{entreprise.nom}"
@@ -436,7 +450,9 @@ def delete_validation_entreprise(id):
"""
Permet de supprimer une entreprise en attente de validation avec une formulaire de validation
"""
- 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"entreprise (validation) {id} inconnu"
+ )
form = SuppressionConfirmationForm()
if form.validate_on_submit():
db.session.delete(entreprise)
@@ -456,7 +472,9 @@ def add_offre(id):
"""
Permet d'ajouter une offre a une entreprise
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"entreprise {id} inconnu"
+ )
form = OffreCreationForm()
if form.validate_on_submit():
offre = EntrepriseOffre(
@@ -499,7 +517,9 @@ def edit_offre(id):
"""
Permet de modifier une offre
"""
- offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
+ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404(
+ description=f"offre {id} inconnu"
+ )
offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
form = OffreModificationForm()
offre_depts_list = [(offre_dept.dept_id) for offre_dept in offre_depts]
@@ -554,7 +574,9 @@ def delete_offre(id):
"""
Permet de supprimer une offre
"""
- offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
+ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404(
+ description=f"offre {id} inconnu"
+ )
entreprise_id = offre.entreprise.id
form = SuppressionConfirmationForm()
if form.validate_on_submit():
@@ -588,7 +610,7 @@ def delete_offre(id):
def delete_offre_recue(id):
offre_recue = EntrepriseEnvoiOffre.query.filter_by(
id=id, receiver_id=current_user.id
- ).first_or_404()
+ ).first_or_404(description=f"offre recu {id} inconnu")
db.session.delete(offre_recue)
db.session.commit()
return redirect(url_for("entreprises.offres_recues"))
@@ -600,7 +622,9 @@ def add_contact(id):
"""
Permet d'ajouter un contact a une entreprise
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"entreprise {id} inconnu"
+ )
form = ContactCreationForm(hidden_entreprise_id=entreprise.id)
if form.validate_on_submit():
contact = EntrepriseContact(
@@ -635,7 +659,9 @@ def edit_contact(id):
"""
Permet de modifier un contact
"""
- contact = EntrepriseContact.query.filter_by(id=id).first_or_404()
+ contact = EntrepriseContact.query.filter_by(id=id).first_or_404(
+ description=f"contact {id} inconnu"
+ )
form = ContactModificationForm(
hidden_entreprise_id=contact.entreprise_id,
hidden_contact_id=contact.id,
@@ -678,7 +704,9 @@ def delete_contact(id):
"""
Permet de supprimer un contact
"""
- contact = EntrepriseContact.query.filter_by(id=id).first_or_404()
+ contact = EntrepriseContact.query.filter_by(id=id).first_or_404(
+ description=f"contact {id} inconnu"
+ )
form = SuppressionConfirmationForm()
if form.validate_on_submit():
contact_count = EntrepriseContact.query.filter_by(
@@ -717,7 +745,9 @@ def add_historique(id):
"""
Permet d'ajouter un étudiant ayant réalisé un stage ou une alternance sur la fiche entreprise de l'entreprise
"""
- entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
+ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
+ description=f"entreprise {id} inconnu"
+ )
form = HistoriqueCreationForm()
if form.validate_on_submit():
etudiant_nomcomplet = form.etudiant.data.upper().strip()
@@ -760,7 +790,9 @@ def envoyer_offre(id):
"""
Permet d'envoyer une offre à un utilisateur
"""
- offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
+ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404(
+ description=f"offre {id} inconnu"
+ )
form = EnvoiOffreForm()
if form.validate_on_submit():
responsable_data = form.responsable.data.upper().strip()
@@ -794,7 +826,7 @@ def json_etudiants():
"""
Permet de récuperer un JSON avec tous les étudiants
"""
- if request.args.get("term") == None:
+ if request.args.get("term") is None:
abort(400)
term = request.args.get("term").strip()
etudiants = Identite.query.filter(Identite.nom.ilike(f"%{term}%")).all()
@@ -820,7 +852,7 @@ def json_responsables():
"""
Permet de récuperer un JSON avec tous les étudiants
"""
- if request.args.get("term") == None:
+ if request.args.get("term") is None:
abort(400)
term = request.args.get("term").strip()
responsables = User.query.filter(
@@ -873,8 +905,9 @@ def get_import_entreprises_file_sample():
"pays",
]
titles = keys[:]
+ # lines = [["" for x in range(6)] for y in range(100)]
title = "ImportEntreprises"
- xlsx = sco_excel.excel_simple_table(titles=titles, sheet_name="Entreprises")
+ xlsx = sco_excel.excel_simple_table_test(titles=titles, sheet_name="Entreprises")
filename = title
return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE)
@@ -1126,7 +1159,7 @@ def get_offre_file(entreprise_id, offre_id, filedir, filename):
as_attachment=True,
)
else:
- abort(404)
+ abort(404, description=f"fichier {filename} inconnu")
@bp.route("/add_offre_file/", methods=["GET", "POST"])
@@ -1135,7 +1168,9 @@ def add_offre_file(offre_id):
"""
Permet d'ajouter un fichier à une offre
"""
- offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404()
+ offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404(
+ description=f"offre {offre_id} inconnu"
+ )
form = AjoutFichierForm()
if form.validate_on_submit():
date = f"{datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}"
@@ -1165,7 +1200,9 @@ def delete_offre_file(offre_id, filedir):
"""
Permet de supprimer un fichier d'une offre
"""
- offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404()
+ offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404(
+ description=f"offre {offre_id} inconnu"
+ )
form = SuppressionConfirmationForm()
if form.validate_on_submit():
path = os.path.join(
diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py
index 978247800..cdeb40875 100644
--- a/app/scodoc/sco_excel.py
+++ b/app/scodoc/sco_excel.py
@@ -428,6 +428,52 @@ def excel_simple_table(
return ws.generate()
+def excel_simple_table_test(
+ titles=None, lines=None, sheet_name=b"feuille", titles_styles=None, comments=None
+):
+ """Export simple type 'CSV': 1ere ligne en gras, le reste tel quel"""
+ ws = ScoExcelSheet(sheet_name)
+
+ if titles is None:
+ titles = []
+ if lines is None:
+ lines = [[]]
+ if titles_styles is None:
+ style = excel_make_style(bold=True)
+ titles_styles = [style] * len(titles)
+ if comments is None:
+ comments = [None] * len(titles)
+ # ligne de titres
+ ws.append_row(
+ [
+ ws.make_cell(it, style, comment)
+ for (it, style, comment) in zip(titles, titles_styles, comments)
+ ]
+ )
+ default_style = excel_make_style()
+ text_style = excel_make_style(number_format=FORMAT_GENERAL)
+ int_style = excel_make_style()
+ float_style = excel_make_style(number_format=FORMAT_NUMBER_00)
+ for line in lines:
+ cells = []
+ for it in line:
+ cell_style = default_style
+ if type(it) == float:
+ cell_style = float_style
+ elif type(it) == int:
+ cell_style = int_style
+ else:
+ cell_style = text_style
+ cells.append(ws.make_cell(it, cell_style))
+ ws.append_row(cells)
+
+ # sheet = ws.wb.active
+ # for cell in sheet["A2":"A100"]:
+ # cell.number_format = FORMAT_GENERAL
+
+ return ws.generate()
+
+
def excel_feuille_saisie(e, titreannee, description, lines):
"""Genere feuille excel pour saisie des notes.
E: evaluation (dict)