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_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,
|
||||||
|
Loading…
Reference in New Issue
Block a user