This commit is contained in:
KONE SOREL 2026-03-07 16:39:35 +00:00
parent ffc8628d3d
commit 23fe5db9fd

View File

@ -47510,79 +47510,63 @@ function chargerFichiersTable() {
} }
function afficheDonneesTableChoisie(fichier) { function afficheDonneesTableChoisie(fichier) {
// ÉTAPE 1 : Nettoyage préventif des menus orphelins (Bootstrap-Select container:body)
// On détruit les instances existantes avant de vider le DOM pour éviter les menus qui "collent"
if ($.fn.selectpicker) {
$('.selectpicker').selectpicker('destroy');
$('.bootstrap-select').remove();
}
if (!fichier || fichier === '') return; if (!fichier || fichier === '') return;
const racineWeb = $("#racineWeb").val(); const racineWeb = $("#racineWeb").val();
const codeLangue = $("#codeLangue").val(); const codeLangue = $("#codeLangue").val();
const $divLister = $('#div_lister_table'); const $divLister = $('#div_lister_table');
let donnees = {};
// ÉTAPE 2 : Gestion des paramètres spécifiques selon le fichier // 1. NETTOYAGE RADICAL DU DOM (Anti-doublon)
// On détruit tout ce qui est lié aux plugins avant de vider le div
if ($.fn.DataTable.isDataTable('#tableLister')) {
$('#tableLister').DataTable().destroy();
}
$('.selectpicker').selectpicker('destroy');
$('.bootstrap-select').remove(); // Supprime les résidus graphiques
$divLister.empty(); // Vide proprement le conteneur
// 2. RÉCUPÉRATION DES PARAMÈTRES
let donnees = {};
if (fichier === "Ajaxtblisterjoursferiers") { if (fichier === "Ajaxtblisterjoursferiers") {
// On récupère les filtres de l'interface // On cible les IDs précisément
const codePays = $('#codePays').val() || "CI"; donnees.codePays = $('#codePays').val();
const annee = $('#annee').val() || new Date().getFullYear(); donnees.annee = $('#annee').val();
donnees = { codePays: codePays, annee: annee };
} }
// ÉTAPE 3 : Affichage du loader (Standard Neutral Pro) // 3. LOADER
$divLister.html(` $divLister.html(`
<div class="text-center p-5"> <div class="text-center p-5">
<div class="spinner-border text-primary" style="width: 3rem; height: 3rem;" role="status"></div> <div class="spinner-border text-primary" role="status"></div>
<p class="mt-3 text-muted fw-bold italic"> <p class="mt-2 text-muted fw-bold italic">${(codeLangue === "en_US") ? "Loading..." : "Chargement..."}</p>
${(codeLangue === "en_US") ? "Synchronizing data..." : "Synchronisation des données..."}
</p>
</div> </div>
`); `);
// ÉTAPE 4 : Appel AJAX // 4. APPEL AJAX
$.ajax({ $.ajax({
url: racineWeb + fichier + "/", url: racineWeb + fichier + "/",
type: 'post', type: 'post',
data: donnees, data: donnees,
success: function(data) { success: function(data) {
// 1. Injection du HTML // Injection des nouvelles données (le PHP doit filtrer via les $_POST reçus)
$divLister.html(data); $divLister.html(data);
// 2. Traitement spécifique Jours Fériés // 5. RÉ-INITIALISATION DES COMPOSANTS
if (fichier === "Ajaxtblisterjoursferiers") {
// --- SÉCURITÉ ANTI-DOUBLON --- // Pour le SelectPicker (Filtre Pays)
// On vérifie si l'élément est déjà un selectpicker, si oui on le détruit proprement if ($('#codePays').length > 0) {
if ($('#codePays').data('selectpicker')) { // On ré-initialise proprement
$('#codePays').selectpicker('destroy'); actualiserSelectPicker('#codePays', false);
} // On remet la valeur et on rafraîchit l'affichage
// On supprime physiquement le conteneur généré par Bootstrap-Select s'il existe $('#codePays').val(donnees.codePays).selectpicker('refresh');
$('#codePays').siblings('.bootstrap-select').remove(); }
// Maintenant on peut le ré-initialiser proprement // Pour la DataTable
actualiserSelectPicker('#codePays', false); const nomTable = $("#listetables option:selected").text() || 'Export';
initDataTableReference('#tableLister', 'Export_' + nomTable.replace(/\s+/g, '_'));
// On applique la valeur ET on rafraîchit },
$('#codePays').val(donnees.codePays).selectpicker('refresh');
$('#annee').val(donnees.annee);
}
// 3. DataTable
const nomTableRaw = $("#listetables option:selected").text() || 'Export';
const nomTableClean = nomTableRaw.trim().replace(/[^a-z0-9]/gi, '_');
initDataTableReference('#tableLister', 'Referentiel_' + nomTableClean);
},
error: function(xhr) { error: function(xhr) {
toastr.error((codeLangue === "en_US") ? "Data loading error" : "Erreur de chargement des données"); toastr.error("Erreur AJAX");
$divLister.html(` $divLister.html(`<div class="alert alert-danger">${xhr.statusText}</div>`);
<div class="alert alert-danger m-3 shadow-xs border-2">
<i class="fas fa-exclamation-triangle me-2"></i>
<strong>Error:</strong> ${xhr.status} - ${xhr.statusText}
</div>
`);
} }
}); });
} }