From 54906c1bde6f2233171fa1aecdacaef7073435b0 Mon Sep 17 00:00:00 2001 From: Iziram Date: Wed, 22 Nov 2023 09:13:00 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Assiduites=20:=20mises=20=C3=A0=20jour=20co?= =?UTF-8?q?uleurs=20listes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/css/assiduites.css | 6 ++++-- app/templates/assiduites/widgets/tableau_assi.j2 | 1 + app/templates/assiduites/widgets/tableau_base.j2 | 13 +++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/static/css/assiduites.css b/app/static/css/assiduites.css index fe429ecf..ed5daa25 100644 --- a/app/static/css/assiduites.css +++ b/app/static/css/assiduites.css @@ -1,15 +1,17 @@ :root { --color-present: #6bdb83; --color-absent: #e62a11; + --color-absent-clair: #F25D4A; --color-retard: #f0c865; --color-justi: #7059FF; + --color-justi-clair: #6885E3; --color-justi-invalide: #a84476; --color-nonwork: #badfff; --color-absent-justi: #e65ab7; --color-retard-justi: #ffef7a; - --color-error: #FF0000; + --color-error: #e62a11; --color-warning: #eec660; --color-information: #658ef0; @@ -21,7 +23,7 @@ --color-defaut: #FFF; --color-defaut-dark: #444; - + --color-default-text: #1F1F1F; --motif-justi: repeating-linear-gradient(135deg, transparent, transparent 4px, var(--color-justi) 4px, var(--color-justi) 8px); diff --git a/app/templates/assiduites/widgets/tableau_assi.j2 b/app/templates/assiduites/widgets/tableau_assi.j2 index 1b72ebbf..92e6aef8 100644 --- a/app/templates/assiduites/widgets/tableau_assi.j2 +++ b/app/templates/assiduites/widgets/tableau_assi.j2 @@ -88,6 +88,7 @@ td.textContent = getModuleImpl(assiduite); } else if (k.indexOf('est_just') != -1) { td.textContent = assiduite[k] ? "Oui" : "Non" + if (assiduite[k]) row.classList.add("est_just") } else if (k.indexOf('etudid') != -1) { const e = getEtudiant(assiduite.etudid); diff --git a/app/templates/assiduites/widgets/tableau_base.j2 b/app/templates/assiduites/widgets/tableau_base.j2 index 2eb5e34e..71580a14 100644 --- a/app/templates/assiduites/widgets/tableau_base.j2 +++ b/app/templates/assiduites/widgets/tableau_base.j2 @@ -456,6 +456,7 @@ td { border: 1px solid #dddddd; padding: 8px; + color: var(--color-default-text); } th { @@ -498,17 +499,25 @@ .l-absent, .l-invalid { - background-color: var(--color-absent); + background-color: var(--color-absent-clair); } .l-valid { - background-color: var(--color-primary); + background-color: var(--color-justi-clair); } .l-retard { background-color: var(--color-retard); } + .l-absent.est_just { + background-color: var(--color-absent-justi); + } + + .l-retard.est_just { + background-color: var(--color-retard-justi); + } + /* Ajoutez des styles pour le conteneur de pagination et les boutons */ .pagination-container { display: flex; From 33c9a606b0cd50c553399c67b56aea8e7f44fc7a Mon Sep 17 00:00:00 2001 From: Iziram Date: Wed, 22 Nov 2023 15:31:35 +0100 Subject: [PATCH 2/3] 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 aadd04ca..8b4df342 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 00000000..311b24a5 --- /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 fac1b11e..d7473714 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 0f9ef84b..1114f628 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 84366dc6..cdb6c558 100644 --- a/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 +++ b/app/templates/assiduites/widgets/moduleimpl_dynamic_selector.j2 @@ -1,13 +1,24 @@ -