diff --git a/Js/fonctions.js b/Js/fonctions.js
index d53c5aec..949e2d55 100755
--- a/Js/fonctions.js
+++ b/Js/fonctions.js
@@ -47510,79 +47510,63 @@ function chargerFichiersTable() {
}
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;
const racineWeb = $("#racineWeb").val();
const codeLangue = $("#codeLangue").val();
const $divLister = $('#div_lister_table');
- let donnees = {};
+
+ // 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
- // ÉTAPE 2 : Gestion des paramètres spécifiques selon le fichier
+ // 2. RÉCUPÉRATION DES PARAMÈTRES
+ let donnees = {};
if (fichier === "Ajaxtblisterjoursferiers") {
- // On récupère les filtres de l'interface
- const codePays = $('#codePays').val() || "CI";
- const annee = $('#annee').val() || new Date().getFullYear();
- donnees = { codePays: codePays, annee: annee };
+ // On cible les IDs précisément
+ donnees.codePays = $('#codePays').val();
+ donnees.annee = $('#annee').val();
}
- // ÉTAPE 3 : Affichage du loader (Standard Neutral Pro)
+ // 3. LOADER
$divLister.html(`
-
-
- ${(codeLangue === "en_US") ? "Synchronizing data..." : "Synchronisation des données..."}
-
+
+
${(codeLangue === "en_US") ? "Loading..." : "Chargement..."}
`);
- // ÉTAPE 4 : Appel AJAX
+ // 4. APPEL AJAX
$.ajax({
url: racineWeb + fichier + "/",
type: 'post',
data: donnees,
success: function(data) {
- // 1. Injection du HTML
- $divLister.html(data);
+ // Injection des nouvelles données (le PHP doit filtrer via les $_POST reçus)
+ $divLister.html(data);
- // 2. Traitement spécifique Jours Fériés
- if (fichier === "Ajaxtblisterjoursferiers") {
-
- // --- SÉCURITÉ ANTI-DOUBLON ---
- // On vérifie si l'élément est déjà un selectpicker, si oui on le détruit proprement
- if ($('#codePays').data('selectpicker')) {
- $('#codePays').selectpicker('destroy');
- }
- // On supprime physiquement le conteneur généré par Bootstrap-Select s'il existe
- $('#codePays').siblings('.bootstrap-select').remove();
-
- // Maintenant on peut le ré-initialiser proprement
- actualiserSelectPicker('#codePays', false);
+ // 5. RÉ-INITIALISATION DES COMPOSANTS
+
+ // Pour le SelectPicker (Filtre Pays)
+ if ($('#codePays').length > 0) {
+ // On ré-initialise proprement
+ actualiserSelectPicker('#codePays', false);
+ // On remet la valeur et on rafraîchit l'affichage
+ $('#codePays').val(donnees.codePays).selectpicker('refresh');
+ }
- // 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);
- },
+ // Pour la DataTable
+ const nomTable = $("#listetables option:selected").text() || 'Export';
+ initDataTableReference('#tableLister', 'Export_' + nomTable.replace(/\s+/g, '_'));
+ },
error: function(xhr) {
- toastr.error((codeLangue === "en_US") ? "Data loading error" : "Erreur de chargement des données");
- $divLister.html(`
-