fg
This commit is contained in:
parent
ffc8628d3d
commit
23fe5db9fd
|
|
@ -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>
|
|
||||||
`);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user