diff --git a/Js/fonctions.js b/Js/fonctions.js
index 5bef3300..562fb57e 100755
--- a/Js/fonctions.js
+++ b/Js/fonctions.js
@@ -47510,55 +47510,84 @@ function chargerFichiersTable() {
}
function afficheDonneesTableChoisie(fichier) {
- if (!fichier || fichier === '') return;
+ // É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. Gestion des cas particuliers (ex: Jours fériés)
+ // ÉTAPE 2 : Gestion des paramètres spécifiques selon le fichier
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 };
}
- // 2. Affichage d'un loader pendant le chargement
+ // ÉTAPE 3 : Affichage du loader (Standard Neutral Pro)
$divLister.html(`
-
-
${(codeLangue === "en_US") ? "Synchronizing..." : "Synchronisation..."}
+
+
+ ${(codeLangue === "en_US") ? "Synchronizing data..." : "Synchronisation des données..."}
+
`);
- // 3. Appel AJAX
+ // ÉTAPE 4 : Appel AJAX
$.ajax({
url: racineWeb + fichier + "/",
type: 'post',
data: donnees,
success: function(data) {
+ // Injection du nouveau contenu HTML
$divLister.html(data);
- // 4. Post-traitement selon le fichier
+ // ÉTAPE 5 : Post-traitement et Ré-initialisation des composants
+
+ // Cas spécifique : Jours Fériés
if (fichier === "Ajaxtblisterjoursferiers") {
+ // On s'assure que les valeurs des filtres sont maintenues
$('#codePays').val(donnees.codePays);
$('#annee').val(donnees.annee);
+
+ // CRUCIAL : On ré-initialise le SelectPicker du filtre Pays injecté
+ // Cela lui redonne son style Neutral Pro (bordures 2px, icône, recherche)
+ if (typeof actualiserSelectPicker === "function") {
+ actualiserSelectPicker('#codePays', false);
+ }
}
- // 5. Initialisation de la DataTable
+ // ÉTAPE 6 : Initialisation de la DataTable (Standard ou Spécifique)
if (fichier === "Ajaxtblistertableauajustementgarant") {
- // Appel de votre fonction spécifique si elle existe toujours
if (typeof appliquerDataTable === "function") appliquerDataTable();
} else {
- // Utilisation de la fonction générique avec exports Excel/PDF
- const nomTable = $("#listetables option:selected").text();
- initDataTableReference('#tableLister', 'Export_' + nomTable.replace(/\s+/g, '_'));
+ // On récupère le nom de la table pour le titre de l'export
+ const nomTableRaw = $("#listetables option:selected").text() || 'Export';
+ const nomTableClean = nomTableRaw.trim().replace(/[^a-z0-9]/gi, '_');
+
+ // Appel de la fonction générique définie dans tes standards
+ if (typeof initDataTableReference === "function") {
+ initDataTableReference('#tableLister', 'Referentiel_' + nomTableClean);
+ }
}
},
error: function(xhr) {
toastr.error((codeLangue === "en_US") ? "Data loading error" : "Erreur de chargement des données");
- $divLister.html(`