Assiduité : msg erreur ajout_assiduite_etud

This commit is contained in:
Iziram 2024-02-28 10:23:47 +01:00
parent e4c889ec8a
commit 185e061f01
1 changed files with 40 additions and 2 deletions

View File

@ -35,6 +35,8 @@ from flask import abort, url_for, redirect, Response
from flask_login import current_user
from flask_sqlalchemy.query import Query
from markupsafe import Markup
from app import db, log
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
@ -248,7 +250,7 @@ def ajout_assiduite_etud() -> str | Response:
choices.move_to_end(group_name, last=False)
choices.move_to_end("", last=False)
form.modimpl.choices = choices
force_options: dict = None
if form.validate_on_submit():
if form.cancel.data: # cancel button
return redirect(redirect_url)
@ -257,6 +259,8 @@ def ajout_assiduite_etud() -> str | Response:
flash("enregistré")
return redirect(redirect_url)
force_options = {"show_pres": True, "show_reta": True}
# Le tableau des assiduités+justificatifs déjà en base:
is_html, tableau = _prepare_tableau(
liste_assi.AssiJustifData.from_etudiants(
@ -267,6 +271,7 @@ def ajout_assiduite_etud() -> str | Response:
filtre=liste_assi.AssiFiltre(type_obj=1),
options=liste_assi.AssiDisplayOptions(show_module=True),
cache_key=f"tableau-etud-{etud.id}",
force_options=force_options,
)
if not is_html:
return tableau
@ -459,7 +464,36 @@ def _record_assiduite_etud(
return True
except ScoValueError as exc:
form.set_error(f"Erreur: {exc.args[0]}")
err: str = f"Erreur: {exc.args[0]}"
if (
exc.args[0]
== "Duplication: la période rentre en conflit avec une plage enregistrée"
):
# Récupération de la première assiduité conflictuelle
conflits: Query = etud.assiduites.filter(
Assiduite.date_debut < dt_fin_tz_server,
Assiduite.date_fin > dt_debut_tz_server,
)
assi: Assiduite = conflits.first()
lien: str = url_for(
"assiduites.tableau_assiduite_actions",
type="assiduite",
action="details",
obj_id=assi.assiduite_id,
scodoc_dept=g.scodoc_dept,
)
form.set_error(
Markup(
err
+ f' <a href="{lien}" target="_blank" title="Voir le détail de'
+ " l'assiduité conflictuelle\">(conflit)</a>"
)
)
else:
form.set_error(err)
return False
@ -1414,6 +1448,7 @@ def _prepare_tableau(
afficher_options: bool = True,
titre="Évènements enregistrés pour cet étudiant",
cache_key: str = "",
force_options: dict[str, object] = None,
) -> tuple[bool, Response | str]:
"""
Prépare un tableau d'assiduités / justificatifs
@ -1470,6 +1505,9 @@ def _prepare_tableau(
order=ordre,
)
if force_options is not None:
options.remplacer(**force_options)
table: liste_assi.ListeAssiJusti = liste_assi.ListeAssiJusti(
table_data=data,
options=options,