From 9801cf79365bf9b65c5ac5103b8b81186fc8ce20 Mon Sep 17 00:00:00 2001
From: Iziram <matthias.hartmann@iziram.fr>
Date: Tue, 4 Jun 2024 15:21:28 +0200
Subject: [PATCH] =?UTF-8?q?Assiduit=C3=A9=20:=20modif=20suppression=20assi?=
=?UTF-8?q?duit=C3=A9s=20(mettre=20tout=20le=20monde)=20+=20avertissement?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/static/js/assiduites.js | 62 +++++++++++++++++++++++++++++++++++--
1 file changed, 60 insertions(+), 2 deletions(-)
diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js
index 91c651e3..0d12635c 100644
--- a/app/static/js/assiduites.js
+++ b/app/static/js/assiduites.js
@@ -53,7 +53,6 @@ async function async_get(path, success, errors) {
* @param {CallableFunction} errors fonction à effectuer en cas d'échec
*/
async function async_post(path, data, success, errors) {
- // console.log("async_post " + path);
let response;
try {
response = await fetch(path, {
@@ -655,9 +654,46 @@ function mettreToutLeMonde(etat, el = null) {
if (!confirm("Effacer tout les évènements correspondant à cette plage ?")) {
return; // annulation
}
- const assiduites_id = lignesEtuds
+ // On récupère les lignes avec une seule assiduité
+ let assiduites_id = lignesEtuds
.filter((e) => e.getAttribute("type") == "edition")
.map((e) => Number(e.getAttribute("assiduite_id")));
+
+ // On récupère les assiduités conflictuelles mais qui sont comprisent
+ // Dans la plage de suppression
+ const unDeleted = {};
+ lignesEtuds
+ .filter((e) => e.getAttribute("type") == "conflit")
+ .forEach((e) => {
+ const etud = etuds.get(Number(e.getAttribute("etudid")));
+ // On récupère les assiduités couvertent par la plage de suppression
+ etud.assiduites.forEach((a) => {
+ const date_debut = new Date(a.date_debut);
+ const date_fin = new Date(a.date_fin);
+ // On prend en compte uniquement les assiduités conflictuelles
+ // (qui intersectent la plage de suppression)
+ if (
+ Date.intersect(
+ { deb: deb, fin: fin },
+ { deb: date_debut, fin: date_fin }
+ )
+ ) {
+ // Si l'assiduité est couverte par la plage de suppression
+ // On l'ajoute à la liste des assiduités à supprimer.
+ if (
+ date_debut.isBetween(deb, fin, "[]") &&
+ date_fin.isBetween(deb, fin, "[]")
+ ) {
+ assiduites_id.push(a.assiduite_id);
+ }
+ // Sinon on ajoute l'étudiant à la liste des étudiants non gérés
+ else {
+ unDeleted[a.etudid] = true;
+ }
+ }
+ });
+ });
+
afficheLoader();
async_post(
@@ -672,6 +708,28 @@ function mettreToutLeMonde(etat, el = null) {
console.error(data.errors);
}
envoiToastTous("remove", assiduites_id.length);
+ if (Object.keys(unDeleted).length == 0) return;
+
+ let unDeletedEtuds = `
+ <ul>
+ ${Object.keys(unDeleted)
+ .map((etudid) => {
+ const etud = etuds.get(Number(etudid));
+ return `<li>${etud.civilite}. ${etud.nom.toUpperCase()} ${
+ etud.prenom
+ }</li>`;
+ })
+ .join("")}
+ </ul>
+ `;
+
+ let html = `
+ <p>Les assiduités des étudiants suivants n'ont pas été supprimées car elles ne sont pas incluses dans la plage de suppression :</p>
+ ${unDeletedEtuds}
+ `;
+ const div = document.createElement("div");
+ div.innerHTML = html;
+ openAlertModal("Assiduité non supprimée", div);
},
(error) => {
console.error("Erreur lors de la suppression de l'assiduité", error);
--
GitLab