From fc8208f061770b1fb6e063b6284b68696e071e66 Mon Sep 17 00:00:00 2001 From: Iziram Date: Wed, 24 Apr 2024 18:25:45 +0200 Subject: [PATCH] =?UTF-8?q?Assiuit=C3=A9=20:=20signal=5Fassiduites=5Fdiff?= =?UTF-8?q?=20:=20historique=20delete/create=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/signal_assiduites_diff.j2 | 68 ++++++++----------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/app/templates/assiduites/pages/signal_assiduites_diff.j2 b/app/templates/assiduites/pages/signal_assiduites_diff.j2 index 5bac9afe..37d2f372 100644 --- a/app/templates/assiduites/pages/signal_assiduites_diff.j2 +++ b/app/templates/assiduites/pages/signal_assiduites_diff.j2 @@ -147,22 +147,22 @@ function recordAction(action, data) { /** * Permet de revenir en arrière sur la dernière action */ -function revertAction() { +async function revertAction() { const lastAction = historyStack.pop(); if (lastAction) { switch (lastAction.action) { case "create": - deleteAssiduite(lastAction.data, false); + await deleteAssiduite(lastAction.data, false); break; case "delete": - createAssiduite(lastAction.data, false); + await createAssiduite(lastAction.data, false); break; } // On met à jour l'affichage updateCell( lastAction.data.periodId, lastAction.data.etudid, - lastAction.action == "create" ? null : lastAction.data.assiduite_id + lastAction.data.assiduite_id ); } } @@ -226,9 +226,6 @@ async function getAssiduite(assiduite_id) { .then((data) => { return data; }) - .catch((error) => { - console.error("Error:", error); - }); } @@ -248,7 +245,6 @@ async function createAssiduite(newAssiduite, record = true) { (data) => { if (data.success.length > 0) { newAssiduite.assiduite_id = data.success[0].message.assiduite_id; - // On enregistre l'action si elle est réussie if (record) recordAction("create", newAssiduite); } else { @@ -277,6 +273,7 @@ async function deleteAssiduite(assiduite, record = true) { (data) => { if (data.success.length > 0) { // On enregistre l'action si elle est réussie + assiduite.assiduite_id = null; if (record) recordAction("delete", assiduite); } else { console.error(data.errors["0"].message); @@ -328,9 +325,23 @@ function updateCell(plageId, etudid, assiduite_id = null) { // Récupère les informations de l'assiduité getAssiduite(assiduite_id).then((data) => { setupAssiduiteBubble(cell, data); + const suppr = cell.querySelector('.assiduite-actions a:last-child') + suppr?.addEventListener('click', (e) => { + e.preventDefault(); + data.periodId = plageId; + deleteAssiduite(data); + updateCell(plageId, etudid); + }); + }).catch(()=>{ + setupButtons(cell, etudid, plageId); }); } else { - const etats = ["retard", "absent"]; + setupButtons(cell, etudid, plageId); + } +} + +function setupButtons(cell, etudid, plageId){ + const etats = ["retard", "absent"]; const assi_btns = document.createElement("div"); assi_btns.classList.add("assi-btns"); @@ -359,7 +370,6 @@ function updateCell(plageId, etudid, assiduite_id = null) { assi_btns.appendChild(cbox); }); cell.appendChild(assi_btns); - } } {# Gestion des plages et MAIN #} @@ -537,40 +547,18 @@ async function nouvellePeriode(period = null) { const assiduites = data[etudid]; // Si l'étudiant n'a pas d'assiduité, on crée les boutons assiduité if (assiduites.length == 0) { - - const assi_btns = document.createElement('div'); - assi_btns.classList.add('assi-btns'); - const etats = ["retard", "absent"]; - - if(!window.nonPresent){ - etats.splice(0,0,"present"); - } - - etats.forEach((value) => { - const cbox = document.createElement("input"); - cbox.type = "checkbox"; - cbox.value = value; - cbox.name = `rbtn_${etudid}_${periodId}`; - cbox.classList.add("rbtn", value); - - // Event pour être sur qu'un seul bouton est coché à la fois - cbox.addEventListener("click", (event) => { - const parent = event.target.parentElement; - parent.querySelectorAll(".rbtn").forEach((ele) => { - if (ele.value != value) { - ele.checked = false; - } - }); - createAssiduiteAction(periodId,etudid, value); - }); - - assi_btns.appendChild(cbox); - }); - cell.appendChild(assi_btns); + setupButtons(cell, etudid, periodId); } else { // Si une (ou plus) assiduité sont trouvée pour la période // alors on affiche les informations de la première assiduité setupAssiduiteBubble(cell, assiduites[0]); + const suppr = cell.querySelector('.assiduite-actions a:last-child') + suppr?.addEventListener('click', (e) => { + e.preventDefault(); + assiduites[0].periodId = periodId; + deleteAssiduite(assiduites[0]); + updateCell(periodId, etudid); + }); } } })