diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index 91c651e37..0d12635cf 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 = ` +
Les assiduités des étudiants suivants n'ont pas été supprimées car elles ne sont pas incluses dans la plage de suppression :
+ ${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);