From c5ba5ec78807d9718f1a45a8e29cc8aba399126e Mon Sep 17 00:00:00 2001 From: KONE SOREL Date: Thu, 9 Apr 2026 14:32:44 +0000 Subject: [PATCH] det --- Js/fonctions.js | 100 ++++++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/Js/fonctions.js b/Js/fonctions.js index a9938b9f..206114e7 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -92898,52 +92898,60 @@ function actualiser_bareme_acte_lettre_cle() { * @param {number} idActesbaremeinitiallettrecle * @param {string} lettreCle */ +async function detail_baremeacte_lettre_cle(idInitial, lettre) { + const modalContainer = document.getElementById("div_detail_bareme_actes"); + + // 1. On ouvre la modale vide avec un loader une seule fois + $(modalContainer).modal("show"); + + // 2. On appelle la fonction de chargement de contenu + chargerContenuDetailActe(idInitial, lettre); +} + + /** - * Récupère et affiche le détail des actes avec DataTables + * Charge ou actualise uniquement le contenu interne de la modale de détail + * sans manipuler l'état d'ouverture de la modale Bootstrap. + * * @param {number|string} idInitial - ID du barème initial (idActesbaremeinitiallettrecle) + * @param {string} lettre - La lettre clé concernée (ex: 'K', 'B', 'V') */ -async function detail_baremeacte_lettre_cle(idActesbaremeinitiallettrecle, lettreCle) { +async function chargerContenuDetailActe(idInitial, lettre) { const racineWeb = document.getElementById("racineWeb").value; const codeLangue = document.getElementById("codeLangue")?.value || 'fr_FR'; const modalContainer = document.getElementById("div_detail_bareme_actes"); const url = `${racineWeb}Ajaxbaremelettrecle/detailactes/`; - // 1. Loader de pré-chargement - modalContainer.innerHTML = ` - - `; - - $(modalContainer).modal("show"); + // 1. Préparation des paramètres pour l'appel Fetch + const formData = new FormData(); + formData.append("idActesbaremeinitiallettrecle", idInitial); + formData.append("lettreCle", lettre); try { - const formData = new FormData(); - formData.append("idActesbaremeinitiallettrecle", idActesbaremeinitiallettrecle); - formData.append("lettreCle", lettreCle); - + // 2. Exécution de la requête asynchrone const response = await fetch(url, { method: "POST", body: formData }); - if (!response.ok) throw new Error(`Erreur HTTP : ${response.status}`); + if (!response.ok) { + throw new Error(`Erreur réseau : ${response.status}`); + } const html = await response.text(); + + // 3. Injection du HTML dans le conteneur de la modale + // On remplace le contenu actuel (le tableau) par le nouveau contenu mis à jour modalContainer.innerHTML = html; - // 2. Initialisation DataTables après injection HTML + // 4. Réinitialisation de DataTable + // On utilise un court délai pour s'assurer que le navigateur a fini de rendre le HTML setTimeout(() => { + // Destruction de l'instance précédente si elle existe pour éviter les conflits if ($.fn.DataTable.isDataTable('#table_detail_actes')) { $('#table_detail_actes').DataTable().destroy(); } + // Initialisation de la nouvelle instance DataTable $('#table_detail_actes').DataTable({ "language": { "url": codeLangue === "en_US" @@ -92952,64 +92960,56 @@ async function detail_baremeacte_lettre_cle(idActesbaremeinitiallettrecle, lettr }, "pageLength": 10, "lengthMenu": [5, 10, 25, 50], - "order": [[0, "asc"]], + "order": [[0, "asc"]], // Tri par libellé d'acte "columnDefs": [ - { "orderable": false, "targets": 5 } // Désactive le tri sur la colonne Actions + { "orderable": false, "targets": 5 } // Désactive le tri sur la colonne 'Actions' ], "dom": "<'row mb-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row mt-3 text-muted small'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", - "responsive": true + "responsive": true, + "drawCallback": function() { + // Optionnel : s'exécute à chaque fois que le tableau est redessiné (pagination, tri) + console.log("Tableau actualisé avec succès."); + } }); - }, 200); + }, 150); } catch (error) { - console.error("Erreur :", error); - modalContainer.innerHTML = ``; + console.error("Erreur lors du chargement du contenu :", error); + + // En cas d'erreur, on affiche un message dans la modale sans la fermer + const errorMsg = codeLangue === "en_US" ? "Update failed." : "Échec de la mise à jour."; + alert_ebene(errorMsg, errorMsg); } } + /** * Supprime un acte spécifique du détail d'une lettre clé * @param {string} adminProd - Niveau d'autorisation * @param {number} idActe - ID de la ligne à supprimer */ function supprimer_baremeacte_lettre_cle_detail(adminProd, idActe) { - // 1. Vérification des droits (Strict Equality) if (String(adminProd) !== "1") { alert_ebene("Vous n'êtes pas autorisé !", "You are not authorized!"); return; } - // 2. Processus de confirmation confirm_ebene("Confirmez-vous cette suppression ?", "Do you confirm this deletion ?") .then((isConfirmed) => { if (isConfirmed) { - - // 3. Appel AJAX de suppression $.ajax({ url: $("#racineWeb").val() + "Ajaxbaremelettrecle/supprimerdetailacte/", type: 'post', - data: { idActe: idActe }, // Utilisation d'un objet JSON - beforeSend: function() { - // Optionnel : On peut griser la ligne en cours de suppression - console.log("Suppression de l'acte " + idActe + " en cours..."); - }, - success: function(response) { - // 4. Rafraîchissement du détail + data: { idActe: idActe }, + success: function() { + // RÉCUPÉRATION DES PARAMÈTRES DEPUIS LES INPUTS HIDDEN DE LA MODALE DÉJÀ OUVERTE const idInitial = $("#idActesbaremeinitiallettrecle").val(); const lettre = $("#lettreCle").val(); - // TRÈS IMPORTANT : Détruire l'instance DataTable avant de recharger le HTML - if ($.fn.DataTable.isDataTable('#table_detail_actes')) { - $('#table_detail_actes').DataTable().destroy(); - } - - // On recharge le contenu de la modale - detail_baremeacte_lettre_cle(idInitial, lettre); - }, - error: function() { - alert_ebene("Erreur lors de la suppression.", "Error during deletion."); + // ON ACTUALISE JUSTE LE TABLEAU + chargerContenuDetailActe(idInitial, lettre); } }); }