diff --git a/gestion_salle/static/gestion_salle/js/index.js b/gestion_salle/static/gestion_salle/js/index.js index 7770404..f676e62 100644 --- a/gestion_salle/static/gestion_salle/js/index.js +++ b/gestion_salle/static/gestion_salle/js/index.js @@ -2,7 +2,71 @@ const $ = (element) => document.getElementById(element); const { Schedule } = calendarjs; let dateAUtiliser = new Date().toISOString().split('T')[0]; -let currentReservationId = null; + +function afficherDetailsReservation(data) { + const reservationId = data.id_reservation || data.id; + $("id_reservation_detail").value = reservationId; + $("id_reservation_refus").value = reservationId; + $("id_reservation_zoom").value = reservationId; + $("employe").value = data.employe; + $("salle").value = data.salle; + $("statut-reservation").textContent = data.statut; + $("date_evenement").value = data.date_evenement || data.date_debut; + $("heure_debut").value = data.heure_debut; + $("heure_fin").value = data.heure_fin; + $("motif_reservation").value = data.motif_reservation; + $("besoin_zoom").checked = data.besoin_zoom; + $("besoin_ordinateur").checked = data.besoin_ordinateur ?? data.besoin_ordi; + $("lien_zoom").value = data.lien_zoom || ""; + $("lien_zoom_container").classList.toggle("d-none", !data.besoin_zoom); + + const currentUserId = $("current-user-id").dataset.userId; + const isOwner = data.est_proprietaire === true + || String(data.employe_id) === currentUserId; + const isPending = data.est_en_attente === true + || data.statut === "En attente" + || data.statut === "en_attente"; + + $("bouton-supprimer-reservation").classList.toggle( + "d-none", + !(isOwner && isPending) + ); + + for (const id of ["refuserReservation", "refuserReservationInfo", "bouton-valider", "bouton-valider-info"]) { + const button = $(id); + if (button) { + button.style.display = isPending && !isOwner ? "inline-block" : "none"; + } + } +} + +function supprimerReservation(reservationId) { + if (!window.confirm("Voulez-vous vraiment supprimer cette demande de réservation en attente ?")) { + return; + } + + const form = $("formulaire-details"); + const csrf = form.querySelector("[name=csrfmiddlewaretoken]").value; + const url = $("bouton-supprimer-reservation").dataset.url.replace( + "/0/", + `/${reservationId}/` + ); + + fetch(url, { + method: "POST", + headers: {"X-CSRFToken": csrf}, + }) + .then(response => response.json().then(data => ({response, data}))) + .then(({response, data}) => { + window.alert(data.message); + if (response.ok && data.success) { + window.location.reload(); + } + }) + .catch(() => { + window.alert("La suppression a échoué. Veuillez réessayer."); + }); +} const calendrier = Schedule(document.getElementById('planning-reservation'), { type: 'weekdays', @@ -19,31 +83,7 @@ const calendrier = Schedule(document.getElementById('planning-reservation'), { return response.json(); }) .then(data => { - currentReservationId = data.id_reservation; - $("id_reservation_detail").value = data.id_reservation; - $("id_reservation_refus").value = data.id_reservation; - $("id_reservation_zoom").value = data.id_reservation; - $("employe").value=data.employe; - $("salle").value=data.salle; - $("statut-reservation").innerHTML=data.statut; - $("date_evenement").value=data.date_evenement; - $("heure_debut").value=data.heure_debut; - $("heure_fin").value=data.heure_fin; - $("motif_reservation").value=data.motif_reservation; - $("besoin_zoom").checked=data.besoin_zoom; - $("besoin_ordinateur").checked=data.besoin_ordinateur; - $("lien_zoom").value=data.lien_zoom; - - const zoomContainer = $("lien_zoom_container"); - if (!data.besoin_zoom) { - zoomContainer.classList.add("d-none"); - } else { - zoomContainer.classList.remove("d-none"); - } - if (data.besoin_zoom === false){ - $("lien_zoom_container").className = "d-none"; - } - + afficherDetailsReservation(data); }) .catch(error => console.error("Impossible de charger les détails de la réservation :", error)); } @@ -58,6 +98,10 @@ $('semaineDate').addEventListener('change', () => { calendrier.render(); }) +$("bouton-supprimer-reservation").addEventListener("click", () => { + supprimerReservation($("id_reservation_detail").value); +}); + evenement_defini = null $("liste-salle").addEventListener("change", (e) => { @@ -76,39 +120,22 @@ $("liste-salle").addEventListener("change", (e) => { function chargement_evenement(){ const url = $("planning-reservation").dataset.url; fetch (url) - .then(response => response.json()) + .then(response => { + if (!response.ok) { + throw new Error(`Erreur HTTP ${response.status}`); + } + return response.json(); + }) .then(data => { calendrier.setData(data); }) + .catch(error => console.error("Impossible de charger les réservations :", error)); } document.addEventListener("DOMContentLoaded", function () { chargement_evenement() }) -$("bouton-annuler").addEventListener("click", (e) => { - e.preventDefault(); - - const csrf = document.querySelector("[name=csrfmiddlewaretoken]").value; - const url_annuler = $("formulaire-details").dataset.urlannuler; - - e.preventDefault(); - - fetch( - url_annuler, - { - method: "POST", - headers: { - "X-Requested-With": "XMTHttpRequest", - "X-CSRFToken": csrf - }, - body: new FormData($("formulaire-details")) - } - ) - .then(response => response.json()) - .then(data => console.log(data)) -}) - if($("bouton-valider")){ $("bouton-valider").addEventListener("click", (e) => { const csrf = document.querySelector("[name=csrfmiddlewaretoken]").value; @@ -180,40 +207,7 @@ const tableau_reservation_attente = new Tabulator("#tableau-reservation-attente" tableau_reservation_attente.on("rowClick", (row, rowData) => { const data = rowData.getData(); - console.log(data); - - if(data.besoin_zoom === false){ - $("lien_zoom_container").className = 'd-none'; - } - - const id_user = $("current-user-id").dataset.userId; - - $("id_reservation_detail").value = data.id; - $("id_reservation_refus").value = data.id; - $("id_reservation_zoom").value = data.id; - - $("employe").value=data.employe; - $("salle").value=data.salle; - $("statut-reservation").innerHTML=data.statut; - $("date_evenement").value = data.date_evenement; - $("heure_debut").value=data.heure_debut; - $("heure_fin").value=data.heure_fin; - $("motif_reservation").value=data.motif_reservation; - $("besoin_zoom").checked=data.besoin_zoom; - $("besoin_ordinateur").checked=data.besoin_ordi; - $("lien_zoom").value=data.lien_zoom; - - const refuserReservation = document.querySelector("#refuserReservation"); - const bouton_valider = document.querySelector("#bouton-valider"); - - if((refuserReservation | bouton_valider) && data.statut === "En attente"){ - refuserReservation.style.display = "inline-block"; - bouton_valider.style.display = "inline-block"; - } - - if (id_user != data.employe_id){ - $("bouton-annuler").className = "d-none"; - } + afficherDetailsReservation(data); const modal = new bootstrap.Modal($("modalDetailReservation")); bootstrap.Modal.getOrCreateInstance($("modalReservationAttente")).hide(); diff --git a/gestion_salle/templates/gestion_salle/index.html b/gestion_salle/templates/gestion_salle/index.html index f4fafae..c27a8c6 100644 --- a/gestion_salle/templates/gestion_salle/index.html +++ b/gestion_salle/templates/gestion_salle/index.html @@ -55,5 +55,5 @@ {% block 'js' %} - + {% endblock %} \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html b/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html index cba39ec..028b1d5 100644 --- a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html +++ b/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html @@ -10,7 +10,7 @@