From 89c530747211cc76840b030d228821b9cc7a4df9 Mon Sep 17 00:00:00 2001 From: Iziram Date: Thu, 4 Jul 2024 16:46:07 +0200 Subject: [PATCH] =?UTF-8?q?Assiduit=C3=A9=20:=20import=20excels=20closes?= =?UTF-8?q?=20#926?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_formsemestre_status.py | 39 ++- .../pages/feuille_abs_formsemestre.j2 | 114 +++++++ .../pages/signal_assiduites_hebdo.j2 | 82 ++++- app/views/assiduites.py | 317 +++++++++++++++++- 4 files changed, 532 insertions(+), 20 deletions(-) create mode 100644 app/templates/assiduites/pages/feuille_abs_formsemestre.j2 diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index 4053e694..4c3748f4 100755 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -910,6 +910,31 @@ def _make_listes_sem(formsemestre: FormSemestre) -> str: }">Ajouter une partition""" ) + # --- Formulaire importation Assiduité excel (si autorisé) + if current_user.has_permission(Permission.AbsChange): + H.append( + f"""

+ + Importation de l'assiduité depuis un fichier excel +

""" + ) + + # --- Lien Traitement Justificatifs: + + if current_user.has_permission( + Permission.AbsJustifView + ) and current_user.has_permission(Permission.JustifValidate): + H.append( + f"""

+ + Traitement des justificatifs d'absence +

""" + ) + H.append("") return "\n".join(H) @@ -1134,20 +1159,6 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True): "", ] - # --- Lien Traitement Justificatifs: - - if current_user.has_permission( - Permission.AbsJustifView - ) and current_user.has_permission(Permission.JustifValidate): - H.append( - f"""

- - Traitement des justificatifs d'absence -

""" - ) - # --- Lien mail enseignants: adrlist = list(mails_enseignants - {None, ""}) if adrlist: diff --git a/app/templates/assiduites/pages/feuille_abs_formsemestre.j2 b/app/templates/assiduites/pages/feuille_abs_formsemestre.j2 new file mode 100644 index 00000000..23615420 --- /dev/null +++ b/app/templates/assiduites/pages/feuille_abs_formsemestre.j2 @@ -0,0 +1,114 @@ +{% extends "sco_page.j2" %} +{% block styles %} +{{super()}} + + + +{% endblock styles %} + +{% block app_content %} + +

Importation de l'assiduité depuis un fichier excel

+

{{titre_form}}

+
+
+

Avertissement : le fichier doit respecter le format suivant

+ +
    +
  • + colonne A : Identifiant de l'étudiant +
  • +
  • colonne B : Date de début
  • +
  • colonne C : Date de fin
  • +
  • colonne D : État (ABS,RET,PRE, ABS si vide)
  • +
  • colonne E : code du module
  • +
+ +

: Colonne optionnelle, les cases peuvent être vides

+

: Formats autorisés : +

    +
  • +
    aaaa-mm-jjThh:mm:ss
    +
  • +
  • +
    jj/mm/aaaa hh:mm:ss
    +
  • +
+

+ +

La première ligne du fichier ne doit pas être une ligne d'entête

+ + +
+ + +
+ + +
+ +
+
+
+ +{% if erreurs %} +
+
+

Les erreurs suivantes ont été trouvées dans le fichier excel :

+
    + {% for erreur in erreurs %} +
  • + + {{erreur[0]}} + → + Ligne : {{erreur[1][0]}} + +
  • + {% endfor %} +
+
+
+{% endif %} + +{% endblock app_content %} \ No newline at end of file diff --git a/app/templates/assiduites/pages/signal_assiduites_hebdo.j2 b/app/templates/assiduites/pages/signal_assiduites_hebdo.j2 index 36985a8d..44f55414 100644 --- a/app/templates/assiduites/pages/signal_assiduites_hebdo.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_hebdo.j2 @@ -113,6 +113,26 @@ cursor: pointer; } + #excel-content { + margin: 4px 0; + display: flex; + flex-direction: column; + gap: 4px; + justify-content: space-evenly; + } + + .hint { + font-style: italic; + } + + #excel-errors { + background-color: rgb(241, 209, 209); + } + + .stdlink{ + width: fit-content; + } + @@ -657,6 +677,8 @@ matin.textContent = `${temps.matin.debut} à ${temps.matin.fin}`; apresmidi.textContent = `${temps.apresmidi.debut} à ${temps.apresmidi.fin}`; + document.getElementById("excel-heures").value = Object.values(temps).map((el)=>Object.values(el).join(",")).join(","); + recupAssiduitesHebdo(updateTable); } @@ -685,6 +707,14 @@ updateTemps(temps); + const select = document.getElementById("moduleimpl_select"); + const excelModule = document.getElementById("excel-module"); + select.addEventListener("change", (ev)=>{ + excelModule.value = ev.target.value; + }); + + excelModule.value = select.value; +