From 70605edad7e0dd790314cd5baa6db2f7d946737b Mon Sep 17 00:00:00 2001 From: Iziram Date: Tue, 11 Jun 2024 14:50:30 +0200 Subject: [PATCH] =?UTF-8?q?Assiduit=C3=A9=20:=20documentation=20code=20JS?= =?UTF-8?q?=20+=20cleanup=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/js/assiduites.js | 107 +++++++++++-- app/templates/assiduites/pages/bilan_etud.j2 | 48 ++++-- .../assiduites/pages/calendrier_assi_etud.j2 | 24 ++- .../assiduites/pages/visu_assi_group.j2 | 7 +- app/templates/assiduites/widgets/alert.j2 | 16 +- .../assiduites/widgets/minitimeline.j2 | 8 +- app/templates/assiduites/widgets/prompt.j2 | 71 ++++++--- app/templates/assiduites/widgets/tableau.j2 | 6 +- .../widgets/tableau_actions/details.j2 | 140 ------------------ .../widgets/tableau_actions/modifier.j2 | 117 --------------- app/templates/assiduites/widgets/timeline.j2 | 138 +++++++++++------ app/templates/assiduites/widgets/toast.j2 | 52 ++++--- app/views/assiduites.py | 114 +------------- 13 files changed, 352 insertions(+), 496 deletions(-) delete mode 100644 app/templates/assiduites/widgets/tableau_actions/details.j2 delete mode 100644 app/templates/assiduites/widgets/tableau_actions/modifier.j2 diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index 0d12635cf..4bcb83960 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -168,6 +168,10 @@ function creerLigneEtudiant(etud, index) { date_fin: null, }; + /**Retourne une liste d'assiduité en conflit avec la période actuelle + * @param {Array} assiduites - Les assiduités de l'étudiant + * @returns {Array} Les assiduités en conflit + */ function recupConflitsAssiduites(assiduites) { const period = getPeriodAsDate(); @@ -182,9 +186,12 @@ function creerLigneEtudiant(etud, index) { ); }); } - + // Pas de conflit en readonly const conflits = readOnly ? [] : recupConflitsAssiduites(etud.assiduites); + // Si il y a des conflits, on prend le premier pour l'afficher + // si les dates de début et de fin sont les mêmes, c'est une édition + // sinon c'est un conflit if (conflits.length > 0) { currentAssiduite = conflits[0]; @@ -200,6 +207,49 @@ function creerLigneEtudiant(etud, index) { : "conflit"; } + // Création de la ligne étudiante en DOM + /* exemple de ligne étudiante +
+
1
+ +
+
+
13h +
+
+
+
+ + + +
+
+ */ const ligneEtud = document.createElement("div"); ligneEtud.classList.add("etud_row"); if (Object.keys(etudsDefDem).includes(etud.id)) { @@ -388,6 +438,9 @@ async function creerTousLesEtudiants(etuds) { etudsDiv.innerHTML = ""; const moduleImplId = readOnly ? null : $("#moduleimpl_select").val(); const inscriptions = await getInscriptionModule(moduleImplId); + // on trie les étudiants par ordre alphabétique + // et on garde ceux qui sont inscrits au module + // puis pour chaque étudiant on crée une ligne [...etuds.values()] .sort((a, b) => { return a.sort_key > b.sort_key ? 1 : -1; @@ -496,10 +549,9 @@ async function getInscriptionModule(moduleimpl_id) { return inscriptionsModules.get(moduleimpl_id); } - +// Mise à jour de la ligne étudiant async function MiseAJourLigneEtud(etud) { //Récupérer ses assiduités - function RecupAssiduitesEtudiant(etudid) { const date = $("#date").datepicker("getDate"); const date_debut = date.add(-1, "days").format("YYYY-MM-DDTHH:mm"); @@ -527,6 +579,8 @@ async function MiseAJourLigneEtud(etud) { } await RecupAssiduitesEtudiant(etud.id); + // Une fois les assiduités récupérées, on met à jour la ligne étudiant + // on replace l'ancienne ligne par la nouvellement générée const etudRow = document.getElementById(`etud_row_${etud.id}`); if (etudRow == null) return; @@ -540,12 +594,14 @@ async function MiseAJourLigneEtud(etud) { etudRow.replaceWith(ligneEtud); } +// Action appelée lors d'un clic sur un bouton d'assiduité +// Création, édition ou suppression d'une assiduité async function actionAssiduite(etud, etat, type, assiduite = null) { const modimpl_id = $("#moduleimpl_select").val(); if (assiduite && assiduite.etat.toLowerCase() === etat) type = "suppression"; const { deb, fin } = getPeriodAsDate(); - + // génération d'un objet assiduité basique qui sera complété let assiduiteObjet = assiduite ?? { date_debut: deb, date_fin: fin, @@ -554,7 +610,8 @@ async function actionAssiduite(etud, etat, type, assiduite = null) { assiduiteObjet.etat = etat; assiduiteObjet.moduleimpl_id = modimpl_id; - + // En fonction du type d'action on appelle la bonne route + // avec les bonnes valeurs if (type === "creation") { await async_post( `../../api/assiduite/${etud.id}/create`, @@ -606,7 +663,9 @@ async function actionAssiduite(etud, etat, type, assiduite = null) { ); } } - +// Fonction pour afficher un message d'erreur si le module n'est pas renseigné +// ou si l'étudiant n'est pas inscrit au module. +// On donne le message d'erreur d'une requête api et cela affiche le message correspondant function erreurModuleImpl(message) { if (message == "Module non renseigné") { const HTML = ` @@ -635,7 +694,9 @@ function erreurModuleImpl(message) { openAlertModal("Sélection du module", content); } } - +// Fonction pour ajouter en lot une assiduité à tous les étudiants +// Fonctionne uniquement pour créer ou supprimer des assiduités +// Pas d'édition possible function mettreToutLeMonde(etat, el = null) { const lignesEtuds = [...document.querySelectorAll("fieldset.btns_field")]; @@ -709,7 +770,7 @@ function mettreToutLeMonde(etat, el = null) { } envoiToastTous("remove", assiduites_id.length); if (Object.keys(unDeleted).length == 0) return; - + // CAS : des assiduités d'étudiants n'ont pas pu être supprimés let unDeletedEtuds = `