This commit is contained in:
KONE SOREL 2026-03-06 17:29:47 +00:00
parent abffcf887d
commit 1f9045d152
2 changed files with 182 additions and 142 deletions

View File

@ -47466,142 +47466,105 @@ function medecinsprestataire()
* AUTRE TABLE DE REFERENCES
*******************************************************************/
// Récupère les fichiers contenu dans la table autrestablesreference
function chargerFichiersTable(){
var $id = $('#listetables').val();
function chargerFichiersTable() {
const idTable = $('#listetables').val();
const racineWeb = $("#racineWeb").val();
const codeLangue = $("#codeLangue").val();
if ($id !=''){
donnees = 'id='+$id;
$.ajax({
url: $("#racineWeb").val()+"Ajaxaccesfichiersautrestables/",
type : 'post',
data: donnees,
error: function(errorData){
alert("Erreur : "+errorData);
},
success: function(data) {
//alert("Success : "+data);
fermeFormulaire();
$('#div_fichiers_table').html(data);
afficheDonneesTableChoisie($('#fichier_lister').val());
},
complete: function() {
}
});
}else{
$('#div_fichiers_table').empty();
$('#div_entete_table').empty();
$('#div_lister_table').empty();
}
// 1. Si aucune table n'est sélectionnée, on nettoie tout
if (!idTable || idTable === "") {
$('#div_fichiers_table, #div_entete_table, #div_lister_table, #div_maj_table').empty();
return;
}
// 2. Feedback visuel global
const loadingHtml = `
<div class="text-center p-5">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-2 text-muted italic">${(codeLangue === "en_US") ? "Loading table data..." : "Chargement des données..."}</p>
</div>`;
$('#div_lister_table').html(loadingHtml);
$('#div_maj_table').html(""); // On vide la zone de saisie pour le nouveau contexte
// 3. Appel AJAX pour récupérer les fichiers/paramètres de la table
$.ajax({
url: racineWeb + "Ajaxaccesfichiersautrestables/",
type: 'post',
data: { id: idTable },
success: function(data) {
// Fermeture de tout formulaire d'édition ouvert
if (typeof fermeFormulaire === "function") fermeFormulaire();
// Injection des données cachées (nom du fichier lister, etc.)
$('#div_fichiers_table').html(data);
// 4. Lancement de l'affichage du formulaire et de la liste
// On récupère le nom du fichier depuis le champ caché injecté dans 'data'
const fichierLister = $('#fichier_lister').val();
// Affiche le formulaire de saisie (à gauche) et la liste (à droite)
afficheDonneesTableChoisie(fichierLister);
},
error: function(xhr) {
toastr.error((codeLangue === "en_US") ? "Error accessing table files" : "Erreur d'accès aux fichiers de la table");
console.error(xhr.responseText);
}
});
}
// Affiche les données de la table selectionnée dans un tableau
function afficheDonneesTableChoisie(fichier){
var codeLangue = $("#codeLangue").val();
if(fichier=="Ajaxtblisterjoursferiers"){
codePays = $('#codePays').val();
annee = $('#annee').val();
if(codePays==undefined){
codePays ="CI"
}
if(annee==undefined){
var ladate=new Date();
annee =ladate.getFullYear();
}
donnees = 'codePays='+codePays+'&annee='+annee;
}else{
donnees = '';
}
if(fichier !=''){
$.ajax({
url: $("#racineWeb").val()+fichier+"/",
type : 'post',
data: donnees,
error: function(errorData){
alert("Erreur : "+errorData);
},
success: function(data) {
//alert("Success : "+data);
$('#div_lister_table').html(data);
//
if(fichier=="Ajaxtblisterjoursferiers"){
$('#codePays').val(codePays);
$('#annee').val(annee);
}
if(fichier=="Ajaxtblistertableauajustementgarant"){
appliquerDataTable();
}else{
if(codeLangue=="en_US")
{
$('#tableLister').DataTable({
"lengthMenu": [ 20, 50, 100],
"language": {
"lengthMenu":"Display _MENU_ records per page",
"zeroRecords": "Nothing found - sorry",
"info": "Showing page _PAGE_ of _PAGES_",
"infoEmpty": "No records available",
"search": "Search:",
"paginate": {
"next": "►",
"previous": "◄",
"first": "|◄",
"last": "►|"
},
"infoFiltered": "(filtered from _MAX_ total records)",
"aoColumnDefs": [
{ "bSearchable": false, "aTargets": [ 0 ] }
]
}
});
}
else
{
$('#tableLister').DataTable({
"lengthMenu": [ 20, 50, 100],
"language": {
"lengthMenu":"Affiche _MENU_ par page",
"zeroRecords": "Désolé - Aucune donnée trouvée",
"info": "_PAGE_ sur _PAGES_ pages",
"infoEmpty": "Pas d'enregistrement valable",
"search": "Recherche:",
"paginate": {
"next": "►",
"previous": "◄",
"first": "|◄",
"last": "►|"
},
"infoFiltered": "(filtré de _MAX_ total enregistrements)",
"aoColumnDefs": [
{ "bSearchable": false, "aTargets": [ 0 ] }
]
}
});
}
}
},
complete: function() {
}
});
}
function afficheDonneesTableChoisie(fichier) {
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)
if (fichier === "Ajaxtblisterjoursferiers") {
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
$divLister.html(`
<div class="text-center p-5">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-2 text-muted italic">${(codeLangue === "en_US") ? "Synchronizing..." : "Synchronisation..."}</p>
</div>
`);
// 3. Appel AJAX
$.ajax({
url: racineWeb + fichier + "/",
type: 'post',
data: donnees,
success: function(data) {
$divLister.html(data);
// 4. Post-traitement selon le fichier
if (fichier === "Ajaxtblisterjoursferiers") {
$('#codePays').val(donnees.codePays);
$('#annee').val(donnees.annee);
}
// 5. Initialisation de la DataTable
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, '_'));
}
},
error: function(xhr) {
toastr.error((codeLangue === "en_US") ? "Data loading error" : "Erreur de chargement des données");
$divLister.html(`<div class="alert alert-danger m-3">${xhr.statusText}</div>`);
}
});
}
// Gère l'affichage des boutons en entête des formulaires
@ -91709,5 +91672,73 @@ function initSmartTable(selector = '.datatable-inter', pageTitle = 'Export Donn
});
}
return table;
}
/**
* Initialise une DataTable standard pour les tables de référence
* @param {string} selector - L'ID ou la classe de la table (ex: '#tableLister')
* @param {string} exportTitle - Le nom du fichier lors de l'export
*/
function initDataTableReference(selector, exportTitle = 'Export_Donnees') {
const codeLangue = $("#codeLangue").val();
// Objet de traduction interne
const langConfig = (codeLangue === "en_US") ? {
search: "Search:",
lengthMenu: "Show _MENU_ entries",
info: "Showing _START_ to _END_ of _TOTAL_ entries",
infoEmpty: "Showing 0 to 0 of 0 entries",
infoFiltered: "(filtered from _MAX_ total entries)",
zeroRecords: "No matching records found",
paginate: { next: "Next", previous: "Previous" }
} : {
search: "Recherche :",
lengthMenu: "Afficher _MENU_ lignes",
info: "Affichage de _START_ à _END_ sur _TOTAL_ lignes",
infoEmpty: "Affichage de 0 à 0 sur 0 ligne",
infoFiltered: "(filtré de _MAX_ lignes au total)",
zeroRecords: "Aucune donnée trouvée",
paginate: { next: "Suivant", previous: "Précédent" }
};
if ($.fn.DataTable.isDataTable(selector)) {
$(selector).DataTable().destroy();
}
const table = $(selector).DataTable({
dom: 'frtip',
responsive: true,
pageLength: 10,
language: langConfig, // On utilise l'objet défini au-dessus
buttons: [
{
extend: 'excelHtml5',
text: '<i class="fas fa-file-excel me-1"></i> Excel',
className: 'btn btn-sm btn-success-light border-success fw-bold text-success rounded-pill shadow-xs',
title: exportTitle,
exportOptions: { columns: ':not(:last-child)' }
},
{
extend: 'pdfHtml5',
text: '<i class="fas fa-file-pdf me-1"></i> PDF',
className: 'btn btn-sm btn-danger-light border-danger fw-bold text-danger rounded-pill shadow-xs',
title: exportTitle,
exportOptions: { columns: ':not(:last-child)' },
customize: function (doc) {
doc.styles.tableHeader.fillColor = '#212e53';
doc.styles.tableHeader.color = 'white';
doc.content[1].table.widths = Array(doc.content[1].table.body[0].length + 1).join('*').split('');
}
}
],
drawCallback: function() {
const info = this.api().page.info();
const label = (codeLangue === "en_US") ? " Lines" : " Lignes";
$("#badge-total").text(info.recordsTotal + label);
}
});
table.buttons().container().appendTo('#table-buttons');
return table;
}

View File

@ -1,18 +1,21 @@
<?php $superUser = $_SESSION['superUser'] ?? 0; ?>
<div class="card border-0 shadow-sm overflow-hidden" style="border-radius: var(--radius-md);">
<div class="card-header bg-white py-3 border-bottom-0 d-flex justify-content-between align-items-center">
<h6 class="mb-0 fw-bold text-uppercase text-primary small">
<i class="fas fa-globe-africa me-2"></i><?= _("Liste des Pays de référence") ?>
</h6>
<span class="badge bg-primary-ghost text-primary px-3 py-2 rounded-pill fw-bold" id="badge-total">
0 <?= _("Lignes") ?>
</span>
<div class="card-header bg-white py-3 border-bottom d-flex justify-content-between align-items-center">
<div class="d-flex align-items-center">
<h6 class="mb-0 fw-bold text-uppercase text-primary small">
<i class="fas fa-table me-2"></i><?= _("Données de référence") ?>
</h6>
<span class="badge bg-primary-ghost text-primary ms-3 px-3 py-2 rounded-pill fw-bold" id="badge-total">
0 <?= _("Lignes") ?>
</span>
</div>
<div id="table-buttons" class="d-flex gap-2"></div>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table id="tableLister" class="table table-hover align-middle mb-0 datatable-inter" style="width:100%">
<table id="tableLister" class="table table-hover align-middle mb-0" style="width:100%">
<thead class="bg-light text-muted small text-uppercase">
<tr>
<th class="ps-4 border-0"><?= _("Centre") ?></th>
@ -48,7 +51,13 @@
<style>
.bg-primary-ghost { background-color: rgba(33, 46, 83, 0.08) !important; }
#tableLister thead th { padding-top: 15px; padding-bottom: 15px; }
#tableLister thead th { padding-top: 15px; padding-bottom: 15px; font-weight: 700; }
#tableLister tbody td { border-color: #f1f4f6; }
.shadow-xs { box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
/* Style pour les boutons d'export injectés */
.dt-buttons .btn {
font-size: 0.75rem !important;
padding: 0.4rem 0.8rem !important;
}
</style>