Assiduité : msg erreur ajout_assiduite_etud

This commit is contained in:
Iziram 2024-02-28 10:23:47 +01:00
parent e4c889ec8a
commit 185e061f01

View File

@ -35,6 +35,8 @@ from flask import abort, url_for, redirect, Response
from flask_login import current_user from flask_login import current_user
from flask_sqlalchemy.query import Query from flask_sqlalchemy.query import Query
from markupsafe import Markup
from app import db, log from app import db, log
from app.comp import res_sem from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat 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(group_name, last=False)
choices.move_to_end("", last=False) choices.move_to_end("", last=False)
form.modimpl.choices = choices form.modimpl.choices = choices
force_options: dict = None
if form.validate_on_submit(): if form.validate_on_submit():
if form.cancel.data: # cancel button if form.cancel.data: # cancel button
return redirect(redirect_url) return redirect(redirect_url)
@ -257,6 +259,8 @@ def ajout_assiduite_etud() -> str | Response:
flash("enregistré") flash("enregistré")
return redirect(redirect_url) return redirect(redirect_url)
force_options = {"show_pres": True, "show_reta": True}
# Le tableau des assiduités+justificatifs déjà en base: # Le tableau des assiduités+justificatifs déjà en base:
is_html, tableau = _prepare_tableau( is_html, tableau = _prepare_tableau(
liste_assi.AssiJustifData.from_etudiants( liste_assi.AssiJustifData.from_etudiants(
@ -267,6 +271,7 @@ def ajout_assiduite_etud() -> str | Response:
filtre=liste_assi.AssiFiltre(type_obj=1), filtre=liste_assi.AssiFiltre(type_obj=1),
options=liste_assi.AssiDisplayOptions(show_module=True), options=liste_assi.AssiDisplayOptions(show_module=True),
cache_key=f"tableau-etud-{etud.id}", cache_key=f"tableau-etud-{etud.id}",
force_options=force_options,
) )
if not is_html: if not is_html:
return tableau return tableau
@ -459,7 +464,36 @@ def _record_assiduite_etud(
return True return True
except ScoValueError as exc: 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 return False
@ -1414,6 +1448,7 @@ def _prepare_tableau(
afficher_options: bool = True, afficher_options: bool = True,
titre="Évènements enregistrés pour cet étudiant", titre="Évènements enregistrés pour cet étudiant",
cache_key: str = "", cache_key: str = "",
force_options: dict[str, object] = None,
) -> tuple[bool, Response | str]: ) -> tuple[bool, Response | str]:
""" """
Prépare un tableau d'assiduités / justificatifs Prépare un tableau d'assiduités / justificatifs
@ -1470,6 +1505,9 @@ def _prepare_tableau(
order=ordre, order=ordre,
) )
if force_options is not None:
options.remplacer(**force_options)
table: liste_assi.ListeAssiJusti = liste_assi.ListeAssiJusti( table: liste_assi.ListeAssiJusti = liste_assi.ListeAssiJusti(
table_data=data, table_data=data,
options=options, options=options,