det
This commit is contained in:
parent
995095e7fe
commit
c5ba5ec788
100
Js/fonctions.js
100
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 = `
|
||||
<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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user