From 2de4f6e0b35345fcaedf0a5710c987015719a087 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Mon, 2 Sep 2024 10:35:24 +0200 Subject: [PATCH] =?UTF-8?q?TYraitement=20erreur=20saisie=20assiduit=C3=A9?= =?UTF-8?q?=20+=20cosmetic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/html_sidebar.py | 180 +----------------- app/scodoc/sco_page_etud.py | 1 - app/scodoc/sco_utils.py | 8 + app/static/css/assiduites.css | 2 +- app/static/css/scodoc.css | 1 + .../assiduites/explication_etats_justifs.j2 | 2 +- .../pages/ajout_justificatif_etud.j2 | 8 +- app/templates/assiduites/pages/bilan_etud.j2 | 21 +- .../assiduites/pages/calendrier_assi_etud.j2 | 3 +- .../pages/signal_assiduites_group.j2 | 2 +- app/templates/sidebar.j2 | 2 +- app/views/assiduites.py | 20 +- 12 files changed, 44 insertions(+), 206 deletions(-) diff --git a/app/scodoc/html_sidebar.py b/app/scodoc/html_sidebar.py index 85df8548c..7036f4e4a 100755 --- a/app/scodoc/html_sidebar.py +++ b/app/scodoc/html_sidebar.py @@ -29,16 +29,10 @@ Génération de la "sidebar" (marge gauche des pages HTML) """ -from flask import render_template, url_for -from flask import g, request -from flask_login import current_user +from flask import request from app import db -from app.models import Evaluation, GroupDescr, Identite, ModuleImpl, Partition -import app.scodoc.sco_utils as scu -from app.scodoc import sco_preferences -from app.scodoc.sco_permissions import Permission -from sco_version import SCOVERSION +from app.models import Evaluation, GroupDescr, ModuleImpl, Partition def retreive_formsemestre_from_request() -> int: @@ -93,173 +87,3 @@ def retreive_formsemestre_from_request() -> int: return int(formsemestre_id) except ValueError: return None # no current formsemestre - - -def sidebar_common(): - "partie commune à toutes les sidebar" - home_link = url_for("scodoc.index", scodoc_dept=g.scodoc_dept) - H = [ - f"""ScoDoc {SCOVERSION}
- Accueil
-
{current_user.user_name} -
déconnexion -
- {sidebar_dept()} -

Scolarité

- Semestres
- Formations
- """ - ] - if current_user.has_permission(Permission.AbsChange): - H.append( - f""" Assiduité
""" - ) - if current_user.has_permission( - Permission.UsersAdmin - ) or current_user.has_permission(Permission.UsersView): - H.append( - f"""Utilisateurs
""" - ) - - if current_user.has_permission(Permission.EditPreferences): - H.append( - f"""Paramétrage
""" - ) - - return "".join(H) - - -def sidebar(etudid: int = None): - "Main HTML page sidebar" - # rewritten from legacy DTML code - from app.scodoc import sco_assiduites - from app.scodoc import sco_etud - - params = {} - - H = [ - f""" - - - - """ - ) - return "".join(H) - - -def sidebar_dept(): - """Partie supérieure de la marge de gauche""" - return render_template( - "sidebar_dept.j2", - prefs=sco_preferences.SemPreferences(), - ) diff --git a/app/scodoc/sco_page_etud.py b/app/scodoc/sco_page_etud.py index 307b56b64..8d6cbc3fb 100644 --- a/app/scodoc/sco_page_etud.py +++ b/app/scodoc/sco_page_etud.py @@ -171,7 +171,6 @@ def fiche_etud(etudid=None): log(f"fiche_etud: etudid={etudid!r} request.args={request.args!r}") raise ScoValueError("Étudiant inexistant !") from exc # la sidebar est differente s'il y a ou pas un etudid - # voir html_sidebar.sidebar() g.etudid = etudid info = etud.to_dict_scodoc7(restrict=restrict_etud_data) if etud.prenom_etat_civil: diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 245b7d5b6..c88e2e04b 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -267,6 +267,14 @@ class EtatAssiduite(int, BiDirectionalEnum): EtatAssiduite.RETARD: "Retard", }.get(self, "") + def e(self) -> str: + """e si la version libile est féminine""" + return { + EtatAssiduite.PRESENT: "e", + EtatAssiduite.ABSENT: "e", + EtatAssiduite.RETARD: "", + }.get(self, "") + class EtatJustificatif(int, BiDirectionalEnum): """Code des états des justificatifs""" diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css index ff04a8019..2db39a87e 100644 --- a/app/static/css/assiduites.css +++ b/app/static/css/assiduites.css @@ -519,7 +519,7 @@ .legende { border: 1px dashed #333; - width: 75%; + max-width: var(--sco-content-max-width); padding: 20px; } diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css index 8c72b700d..f1cd90800 100644 --- a/app/static/css/scodoc.css +++ b/app/static/css/scodoc.css @@ -91,6 +91,7 @@ div.scobox { div.scobox.explanation { background-color: var(--sco-color-background); + border: 1px dashed #333; } div.scobox.success div.scobox-title { diff --git a/app/templates/assiduites/explication_etats_justifs.j2 b/app/templates/assiduites/explication_etats_justifs.j2 index c8b0dc1bf..30fed42f7 100644 --- a/app/templates/assiduites/explication_etats_justifs.j2 +++ b/app/templates/assiduites/explication_etats_justifs.j2 @@ -1,6 +1,6 @@ {# Explication des états des justificatifs #} -
+
États des justificatifs
Justificatif valide
diff --git a/app/templates/assiduites/pages/ajout_justificatif_etud.j2 b/app/templates/assiduites/pages/ajout_justificatif_etud.j2 index 3aeba96a3..6eaef6f48 100644 --- a/app/templates/assiduites/pages/ajout_justificatif_etud.j2 +++ b/app/templates/assiduites/pages/ajout_justificatif_etud.j2 @@ -1,6 +1,6 @@ {# Formulaire ajout ou modification de justificatif Si justif, edit #} -{% extends "sco_page.j2" %} +{% extends "sco_page_dept.j2" %} {% import 'wtf.j2' as wtf %} {% block styles %} @@ -49,7 +49,7 @@ div.submit > input { {% endif %} {% if justif %}
- +
Saisie par {{justif.saisie_par}} le {{justif.entry_date}}
@@ -70,7 +70,7 @@ div.submit > input { Aucune {% endif %}
- +
{% endif %} @@ -172,7 +172,7 @@ div.submit > input { {% endif %} {% endif %} - + diff --git a/app/templates/assiduites/pages/bilan_etud.j2 b/app/templates/assiduites/pages/bilan_etud.j2 index a2dafcd76..2436d95ea 100644 --- a/app/templates/assiduites/pages/bilan_etud.j2 +++ b/app/templates/assiduites/pages/bilan_etud.j2 @@ -1,4 +1,4 @@ -{% extends "sco_page.j2" %} +{% extends "sco_page_dept.j2" %} {% block title %} Bilan assiduité de {{sco.etud.nomprenom}} @@ -60,6 +60,8 @@ Bilan assiduité de {{sco.etud.nomprenom}} {% endblock styles %} {% block app_content %} +{% include "assiduites/widgets/alert.j2" %} +

Bilan de l'assiduité de {{sco.etud.html_link_fiche()|safe}}

@@ -70,7 +72,7 @@ Bilan assiduité de {{sco.etud.nomprenom}}
-

Statistiques d'assiduité

+
Statistiques d'assiduité
@@ -91,12 +93,13 @@ Bilan assiduité de {{sco.etud.nomprenom}}
-
-

Statistiques

-

Un message d'alerte apparait si le nombre d'absence dépasse le seuil (indiqué dans les préférences du - département)

+
+

Un message d'alerte apparait si le nombre d'absence dépasse le seuil indiqué dans les préférences du + département (actuellement {{assi_seuil}}). +

Les statistiques sont calculées entre les deux dates sélectionnées. Après modification des dates, - appuyer sur le bouton "Actualiser"

+ appuyer sur le bouton "Actualiser". +

{% include "assiduites/explication_etats_justifs.j2" %} @@ -117,7 +120,7 @@ Bilan assiduité de {{sco.etud.nomprenom}} // Fonction appelée lors du clic sur le bouton "Actualiser" // Et au chargement de la page function stats() { - // On prend les dates de début et de fin + // On prend les dates de début et de fin // (format DD/MM/YYYY) et on les convertit en Date() const dd_val = document.getElementById('stats_date_debut').value; const df_val = document.getElementById('stats_date_fin').value; @@ -199,7 +202,7 @@ Bilan assiduité de {{sco.etud.nomprenom}} // JOURNEE const jour = document.createElement('span'); jour.textContent = `${counter[key].total.journee} journée(s)${withJusti(key, "journee")}`; - + // On met à jour le DOM avec les valeurs calculées // On met l'état en Titre pour chaque partie div.append(jour, demi, heure); diff --git a/app/templates/assiduites/pages/calendrier_assi_etud.j2 b/app/templates/assiduites/pages/calendrier_assi_etud.j2 index f5610ad76..ecb86a5a8 100644 --- a/app/templates/assiduites/pages/calendrier_assi_etud.j2 +++ b/app/templates/assiduites/pages/calendrier_assi_etud.j2 @@ -37,8 +37,7 @@ Calendrier de l'assiduité Assiduité de {{sco.etud.nomprenom}}
-
-

Calendrier

+
{% include "assiduites/widgets/legende_couleur.j2" %}
    diff --git a/app/templates/assiduites/pages/signal_assiduites_group.j2 b/app/templates/assiduites/pages/signal_assiduites_group.j2 index 6fc0aaa19..98591ce5a 100644 --- a/app/templates/assiduites/pages/signal_assiduites_group.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_group.j2 @@ -220,7 +220,7 @@

-
+
{% include "assiduites/widgets/legende_couleur.j2" %}
diff --git a/app/templates/sidebar.j2 b/app/templates/sidebar.j2 index eecc69241..62e817378 100755 --- a/app/templates/sidebar.j2 +++ b/app/templates/sidebar.j2 @@ -91,7 +91,7 @@
  • Calendrier
  • Liste/Bilan
  • + etudid=sco.etud.id) }}">Bilan {% endif %}
    {# /etud-insidebar #} diff --git a/app/views/assiduites.py b/app/views/assiduites.py index 33ccb8709..eda9b41b4 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -1387,16 +1387,18 @@ def visu_assi_group(): def _get_anne_sco_from_request() -> int | None: - """La valeur du paramètreannee_sco de la requête GET, + """La valeur du paramètre annee_sco de la requête GET, ou None si absent""" annee_sco: str | None = request.args.get("annee_sco", None) + if annee_sco is None: + return None # Vérification de l'année scolaire - if annee_sco is not None: - try: - return int(annee_sco) - except (ValueError, TypeError): - pass - return None + try: + annee_sco_int = int(annee_sco) + except (ValueError, TypeError) as exc: + raise ScoValueError("Année scolaire invalide") + + return annee_sco_int def _prepare_tableau( @@ -1600,9 +1602,11 @@ def tableau_assiduite_actions(): objet: Assiduite | Justificatif objet_name = "" + e = "" if obj_type == "assiduite": objet: Assiduite = Assiduite.query.get_or_404(obj_id) objet_name = scu.EtatAssiduite(objet.etat).version_lisible() + e = scu.EtatAssiduite(objet.etat).e() else: objet: Justificatif = Justificatif.query.get_or_404(obj_id) objet_name = "Justificatif" @@ -1610,7 +1614,7 @@ def tableau_assiduite_actions(): # Suppression : attention, POST ou GET ! if action == "supprimer": objet.supprime() - flash(f"{objet_name} supprimé") + flash(f"{objet_name} supprimé{e}") return redirect(request.referrer)