This commit is contained in:
KONE SOREL 2026-04-09 14:32:44 +00:00
parent 995095e7fe
commit c5ba5ec788

View File

@ -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 = `
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content shadow-lg border-0">
<div class="modal-body text-center p-5">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"></div>
<p class="mt-3 text-uppercase fw-bold small text-muted">
${codeLangue === "en_US" ? "Loading details..." : "Chargement du détail..."}
</p>
</div>
</div>
</div>
`;
$(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 = `<div class="modal-dialog"><div class="modal-content"><div class="modal-body alert alert-danger m-3">${codeLangue === "en_US" ? "Error loading data." : "Erreur lors du chargement."}</div></div></div>`;
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);
}
});
}