From 33c9a606b0cd50c553399c67b56aea8e7f44fc7a Mon Sep 17 00:00:00 2001 From: Iziram Date: Wed, 22 Nov 2023 15:31:35 +0100 Subject: [PATCH] Assiduites : SaisieAssiduiteEtud rework --- app/static/js/assiduites.js | 83 +++++++ .../assiduites/pages/ajout_assiduites.j2 | 234 ++++++++++++++++++ .../assiduites/pages/ajout_justificatif.j2 | 23 +- app/templates/assiduites/pages/calendrier.j2 | 4 +- .../widgets/moduleimpl_dynamic_selector.j2 | 17 +- app/views/assiduites.py | 45 ++-- 6 files changed, 378 insertions(+), 28 deletions(-) create mode 100644 app/templates/assiduites/pages/ajout_assiduites.j2 diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index aadd04cae..8b4df342c 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -953,6 +953,89 @@ function createAssiduite(etat, etudid) { ); return !with_errors; } +/** + * Création d'une assiduité pour un étudiant + * @param {String} etat l'état de l'étudiant + * @param {Number | String} etudid l'identifiant de l'étudiant + * + * TODO : Rendre asynchrone + */ +function createAssiduiteComplete(assiduite, etudid) { + if (!hasModuleImpl(assiduite) && window.forceModule) { + const html = ` +

Aucun module n'a été spécifié

+ `; + const div = document.createElement("div"); + div.innerHTML = html; + openAlertModal("Erreur Module", div); + return false; + } + + const path = getUrl() + `/api/assiduite/${etudid}/create`; + + let with_errors = false; + + sync_post( + path, + [assiduite], + (data, status) => { + //success + if (data.success.length > 0) { + let obj = data.success["0"].message.assiduite_id; + } + if (data.errors.length > 0) { + console.error(data.errors["0"].message); + if (data.errors["0"].message == "Module non renseigné") { + const HTML = ` +

Attention, le module doit obligatoirement être renseigné.

+

Cela vient de la configuration du semestre ou plus largement du département.

+

Si c'est une erreur, veuillez voir avec le ou les responsables de votre scodoc.

+ `; + + const content = document.createElement("div"); + content.innerHTML = HTML; + + openAlertModal("Sélection du module", content); + } + if ( + data.errors["0"].message == "L'étudiant n'est pas inscrit au module" + ) { + const HTML = ` +

Attention, l'étudiant n'est pas inscrit à ce module.

+

Si c'est une erreur, veuillez voir avec le ou les responsables de votre scodoc.

+ `; + + const content = document.createElement("div"); + content.innerHTML = HTML; + + openAlertModal("Sélection du module", content); + } + if ( + data.errors["0"].message == + "Duplication: la période rentre en conflit avec une plage enregistrée" + ) { + const HTML = ` +

L'assiduité n'a pas pu être enregistrée car une autre assiduité existe sur la période sélectionnée

+

Si c'est une erreur, veuillez voir avec le ou les responsables de votre scodoc.

+ `; + + const content = document.createElement("div"); + content.innerHTML = HTML; + + openAlertModal("Période conflictuelle", content); + } + with_errors = true; + } + }, + (data, status) => { + //error + console.error(data, status); + errorAlert(); + with_errors = true; + } + ); + return !with_errors; +} /** * Suppression d'une assiduité diff --git a/app/templates/assiduites/pages/ajout_assiduites.j2 b/app/templates/assiduites/pages/ajout_assiduites.j2 new file mode 100644 index 000000000..311b24a55 --- /dev/null +++ b/app/templates/assiduites/pages/ajout_assiduites.j2 @@ -0,0 +1,234 @@ +{% include "assiduites/widgets/toast.j2" %} +{% block pageContent %} +
+

Ajouter une assiduité

+ {% include "assiduites/widgets/tableau_base.j2" %} + {% if saisie_eval %} +
+
+

+ La saisie de l'assiduité a été préconfigurée en fonction de l'évaluation.
+ Une fois la saisie finie, cliquez sur le lien si dessous pour revenir sur la gestion de l'évaluation +

+ retourner sur la page de l'évaluation +
+ {% endif %} +
+
+
+
+ Date de début + + Journée entière +
+
+ Date de fin + +
+
+ +
+
+ Etat de l'assiduité + +
+
+
+
+ Module + {% with moduleid="ajout_assiduite_module_impl",label=false %} + {% include "assiduites/widgets/moduleimpl_dynamic_selector.j2" %} + {% endwith %} +
+
+ +
+
+ Raison + +
+
+ +
+ + +
+ + +
+ +
+
+ + {% include "assiduites/widgets/tableau_assi.j2" %} +
+ +
+ + + +{% endblock pageContent %} \ No newline at end of file diff --git a/app/templates/assiduites/pages/ajout_justificatif.j2 b/app/templates/assiduites/pages/ajout_justificatif.j2 index fac1b11ed..d74737146 100644 --- a/app/templates/assiduites/pages/ajout_justificatif.j2 +++ b/app/templates/assiduites/pages/ajout_justificatif.j2 @@ -3,10 +3,7 @@

Justifier des absences ou retards

{% include "assiduites/widgets/tableau_base.j2" %} -
- - {% include "assiduites/widgets/tableau_justi.j2" %} -
+
@@ -60,6 +57,10 @@
+
+ + {% include "assiduites/widgets/tableau_justi.j2" %} +
@@ -224,12 +225,12 @@ if (document.getElementById('justi_journee').checked) { date_deb.setAttribute("show", "date") date_fin.setAttribute("show", "date") - document.getElementById("date_fin").classList.add("hidden"); + document.querySelector(`legend[for="justi_date_fin"]`).removeAttribute("required") + } else { date_deb.removeAttribute("show") date_fin.removeAttribute("show") - document.getElementById("date_fin").classList.remove("hidden"); - + document.querySelector(`legend[for="justi_date_fin"]`).setAttribute("required", "") } } @@ -238,8 +239,12 @@ const date_fin = document.querySelector(".page #justi_date_fin") const journee = document.querySelector('.page #justi_journee').checked const deb = date_deb.valueAsObject.date + "T" + (journee ? assi_morning : date_deb.valueAsObject.time) - const fin = (journee ? date_deb.valueAsObject.date : date_fin.valueAsObject.date) + "T" + (journee ? assi_evening : date_fin.valueAsObject.time) - + let fin = "T" + (journee ? assi_evening : date_fin.valueAsObject.time) + if (journee) { + fin = (date_fin.valueAsObject.date || date_deb.valueAsObject.date) + fin + } else { + fin = date_fin.valueAsObject.date + fin + } return { "deb": deb, "fin": fin, diff --git a/app/templates/assiduites/pages/calendrier.j2 b/app/templates/assiduites/pages/calendrier.j2 index 0f9ef84bd..1114f628f 100644 --- a/app/templates/assiduites/pages/calendrier.j2 +++ b/app/templates/assiduites/pages/calendrier.j2 @@ -476,7 +476,7 @@ const matin = [new Date(date), new Date(date)] color = "sans_etat" matin[0].setHours(0, 0, 0, 0) - matin[1].setHours(12, 59, 59) + matin[1].setHours(12, 59, 59) // TODO Utiliser heure pivot (config) @@ -515,7 +515,7 @@ span_aprem.classList.add("color"); const aprem = [new Date(date), new Date(date)] color = "sans_etat" - aprem[0].setHours(13, 0, 0, 0) + aprem[0].setHours(13, 0, 0, 0) // TODO Utiliser heure pivot (config) aprem[1].setHours(23, 59, 59) diff --git a/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 b/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 index 84366dc62..cdb6c5585 100644 --- a/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 +++ b/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 @@ -1,13 +1,24 @@ -