forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user