Compare commits

...

2 Commits

Author SHA1 Message Date
Iziram fc8208f061 Assiuité : signal_assiduites_diff : historique delete/create WIP 2024-04-24 18:25:45 +02:00
Iziram 06433e9063 Assiduité : assiduite_bubble : ajout icon supprimer 2024-04-24 17:38:48 +02:00
2 changed files with 37 additions and 40 deletions

View File

@ -870,10 +870,19 @@ function setupAssiduiteBubble(el, assiduite) {
modifs.target = "_blank";
modifs.href = `tableau_assiduite_actions?type=assiduite&action=modifier&obj_id=${assiduite.assiduite_id}`;
// Ajout d'un lien pour supprimer l'assiduité
const supprs = document.createElement("a");
supprs.className = "";
supprs.textContent = ``;
supprs.title = "Cliquez pour supprimer l'assiduité";
supprs.target = "_blank";
supprs.href = `tableau_assiduite_actions?type=assiduite&action=supprimer&obj_id=${assiduite.assiduite_id}`;
const actionsDiv = document.createElement("div");
actionsDiv.className = "assiduite-actions";
actionsDiv.appendChild(modifs);
actionsDiv.appendChild(infos);
actionsDiv.appendChild(supprs);
bubble.appendChild(actionsDiv);
const idDiv = document.createElement("div");

View File

@ -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);
}
}
</script>
{# 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);
});
}
}
})