diff --git a/Js/fonctions.js b/Js/fonctions.js index 600723a..658ee0c 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -360,70 +360,94 @@ function changer_langue_connexion() { } /** - * CONFIGURATION DATATABLES - * Initialise un tableau DataTable avec options génériques. - * - * @param {string|jQuery} selector - Sélecteur du tableau (ex: '.tabliste' ou '#myTable') - * @param {object} options - Options personnalisées (langue, boutons, ordre, etc.) + * Initialise DataTables avec support multilingue, exports personnalisés et entêtes fixes. + * * @param {string} selector - Sélecteur jQuery de la table (ex: '.tabliste') + * @param {object} options - Options DataTables spécifiques pour surcharger par défaut + * @param {string} titreDoc - Titre principal pour les exports (PDF/Excel/Print) + * @param {string} message - Informations de police/contexte sous le titre (messageTop) */ function appliquerDataTable(selector = '.tabliste', options = {}, titreDoc = "Rapport", message = "") { + // 1. Détection de la langue via un champ caché dans votre header const codeLangue = $("#codeLangue").val() || 'fr_FR'; + // 2. Dictionnaire de traduction const translations = { fr_FR: { lengthMenu: "Affiche _MENU_ par page", zeroRecords: "Aucune donnée trouvée", info: "_PAGE_ sur _PAGES_", - search: "Recherche:", - paginate: { next: "►", previous: "◄" } + infoEmpty: "Aucun enregistrement disponible", + infoFiltered: "(filtré de _MAX_ total)", + search: "Recherche rapide :", + paginate: { + next: "Suivant ►", + previous: "◄ Précédent" + } }, en_US: { lengthMenu: "Display _MENU_ records", zeroRecords: "Nothing found", info: "Showing page _PAGE_ of _PAGES_", - search: "Search:", - paginate: { next: "►", previous: "◄" } + infoEmpty: "No records available", + infoFiltered: "(filtered from _MAX_ total)", + search: "Quick Search:", + paginate: { + next: "Next ►", + previous: "◄ Previous" + } } }; $(selector).each(function() { const $table = $(this); + // 3. Gestion automatique des colonnes masquées (via l'attribut data-hidden="true" sur le TH) const hiddenTargets = []; $table.find('thead th').each((idx, th) => { - if ($(th).data('hidden')) hiddenTargets.push(idx); + if ($(th).data('hidden')) { + hiddenTargets.push(idx); + } }); - // Configuration des boutons avec Titre ET Message de haut de page - const exportButtons = [ - { - extend: 'excel', - title: titreDoc, - messageTop: message // Ajoute les infos en haut de l'Excel - }, - { - extend: 'pdf', - title: titreDoc, - messageTop: message, // Ajoute les infos en haut du PDF - orientation: 'landscape' - }, - { - extend: 'print', - title: titreDoc, - messageTop: message // Ajoute les infos sur l'impression + // 4. Configuration des boutons d'export avec Titre et Message Contextuel + const exportConfig = { + title: titreDoc, + messageTop: message, + exportOptions: { + columns: ':visible' // Exporte uniquement ce qui est affiché à l'écran } - ]; + }; + // 5. Initialisation de l'instance DataTable const instance = $table.DataTable($.extend(true, { - destroy: true, - responsive: true, - order: [[0, "desc"]], + destroy: true, // Permet de réinitialiser la table si elle existe déjà + responsive: true, // Adaptation mobile + pageLength: 25, // Nombre de lignes par défaut + order: [[0, "desc"]], // Tri par défaut sur la 1ère colonne + dom: 'Bfrtip', // Positionnement des éléments (Buttons, filter, processing, table, info, pagination) language: translations[codeLangue] || translations.fr_FR, - columnDefs: [{ targets: hiddenTargets, visible: false }], - dom: 'Bfrtip', - buttons: exportButtons + columnDefs: [ + { targets: hiddenTargets, visible: false } // Masque les colonnes techniques + ], + // Activation du Header et Footer collants (Nécessite l'extension FixedHeader) + fixedHeader: { + header: true, + footer: true + }, + buttons: [ + $.extend(true, {}, exportConfig, { extend: 'copy', className: 'btn btn-sm btn-light' }), + $.extend(true, {}, exportConfig, { extend: 'excel', className: 'btn btn-sm btn-success' }), + $.extend(true, {}, exportConfig, { + extend: 'pdf', + className: 'btn btn-sm btn-danger', + orientation: 'landscape', + pageSize: 'A4' + }), + $.extend(true, {}, exportConfig, { extend: 'print', className: 'btn btn-sm btn-dark' }) + ] }, options)); + // 6. Recalcul de la largeur des colonnes après le rendu initial $table.on('init.dt', function () { if (instance && instance.responsive) { instance.columns.adjust(); diff --git a/Vue/Ajaxrequeteresumesinistres/index.php b/Vue/Ajaxrequeteresumesinistres/index.php index a09c557..9fc4b26 100644 --- a/Vue/Ajaxrequeteresumesinistres/index.php +++ b/Vue/Ajaxrequeteresumesinistres/index.php @@ -15,11 +15,9 @@ % -
+
- - - +
@@ -42,7 +40,6 @@ 100) ? 'text-danger fw-bold' : (($ratio > 70) ? 'text-warning' : 'text-success'); ?> @@ -51,33 +48,30 @@ nettoyer($rpsinistre['dateEffetAdherent']), $_SESSION['lang']) ?> nettoyer($rpsinistre['duree_acquise']) ?> - - - % - - + % nettoyer($rpsinistre['codeProduit']) ?> - - " . $nbligne . " => " . _("Excel"); - break; - } - ?> + 200"; break; } ?> + + + + + + % + + + - + @@ -86,26 +80,28 @@ \ No newline at end of file diff --git a/Vue/gabarit.php b/Vue/gabarit.php index bb0d72d..82783bf 100755 --- a/Vue/gabarit.php +++ b/Vue/gabarit.php @@ -710,7 +710,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte']; - +