From 185e061f015d6747148c0c2c9440324dfd364e5c Mon Sep 17 00:00:00 2001 From: Iziram Date: Wed, 28 Feb 2024 10:23:47 +0100 Subject: [PATCH] =?UTF-8?q?Assiduit=C3=A9=20:=20msg=20erreur=20ajout=5Fass?= =?UTF-8?q?iduite=5Fetud?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/assiduites.py | 42 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/app/views/assiduites.py b/app/views/assiduites.py index 10f02f72a..fc562d690 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -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' (conflit)" + ) + ) + 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,