diff --git a/assets/src/js/functions/datatables.js b/assets/src/js/functions/datatables.js
index 09258abfb..969d9f135 100755
--- a/assets/src/js/functions/datatables.js
+++ b/assets/src/js/functions/datatables.js
@@ -38,34 +38,32 @@ function start_datatables() {
start_local_datatables();
$('.main-records').each(function () {
- var $this = $(this);
+ const $this = $(this);
// Controlla che la tabella non sia giĆ inizializzata
if (!$.fn.DataTable.isDataTable('#' + $this.attr('id'))) {
- var id_module = $this.data('idmodule');
- var id_plugin = $this.data('idplugin');
- var id_parent = $this.data('idparent');
+ const id_module = $this.data('idmodule');
+ const id_plugin = $this.data('idplugin');
+ const id_parent = $this.data('idparent');
// Parametri di ricerca da url o sessione
- var search = getTableSearch();
+ const search = getTableSearch();
- var column_search = [];
+ const column_search = [];
$this.find("th").each(function () {
- var id = $(this).attr('id').replace("th_", "");
- var single_value = search["search_" + id] ? search["search_" + id] : "";
+ const id = $(this).attr('id').replace("th_", "");
+ const single_value = search["search_" + id] ? search["search_" + id] : "";
column_search.push({
"sSearch": single_value,
});
});
- var tempo_attesa_ricerche = (globals.tempo_attesa_ricerche * 1000);
-
$this.on('preInit.dt', function (ev, settings) {
$('#mini-loader').show();
});
- var table = $this.DataTable({
+ const table = $this.DataTable({
language: globals.translations.datatables,
autoWidth: true,
dom: "ti",
@@ -97,82 +95,7 @@ function start_datatables() {
style: 'multi',
selector: 'td:first-child'
},
- buttons: [
- {
- extend: 'csv',
- fieldSeparator: ";",
- exportOptions: {
- modifier: {
- selected: true
- },
- format: {
- body: function (data, row, column, node) {
- data = $('
' + data + '
').text();
- data_edit = data.replace('.', ''); // Rimozione punto delle migliaia
-
- return data_edit.match(/^[0-9,]+$/) ? data_edit : data;
- }
- }
- }
- },
- {
- extend: 'copy',
- exportOptions: {
- modifier: {
- selected: true
- }
- }
- },
- {
- extend: 'print',
- autoPrint: true,
- footer: true,
- customize: function (win) {
- $(win.document.body)
- .css('font-size', '10pt')
- .append(
- ' | ' + $('#summable').text() + ' | |
'
- );
- $(win.document.body).find('table')
- .addClass('compact')
- .css('font-size', 'inherit');
- $(win.document.body).find('td:first-child')
- .addClass('hide');
- $(win.document.body).find('th:first-child')
- .addClass('hide');
- },
- exportOptions: {
- modifier: {
- selected: true
- }
- }
- },
- {
- extend: 'excel',
- exportOptions: {
- modifier: {
- selected: true
- },
- format: {
- body: function (data, row, column, node) {
- data = $('' + data + '
').text();
- data_edit = data.replace('.', ''); // Fix specifico per i numeri italiani
- data_edit = data_edit.replace(',', '.');
-
- return data_edit.match(/^[0-9\.]+$/) ? data_edit : data;
- }
- }
- }
- },
- {
- extend: 'pdf',
- exportOptions: {
- modifier: {
- selected: true
- }
- }
- },
- ],
+ buttons: getDatatablesButtons($this),
scroller: {
loadingIndicator: true,
displayBuffer: globals.dataload_page_buffer,
@@ -182,120 +105,9 @@ function start_datatables() {
type: 'GET',
dataSrc: "data",
},
- initComplete: function (settings) {
- var api = this.api();
- var search = getTableSearch();
-
- api.columns('.search').every(function () {
- var column = this;
-
- // Valore predefinito della ricerca
- var tempo;
- var header = $(column.header());
- var name = header.attr('id').replace('th_', '');
-
- var value = search['search_' + name] ? search['search_' + name] : '';
-
- $('
')
- .appendTo(column.header())
- .on('keyup', function (e) {
- clearInterval(tempo);
-
- // Fix del pulsante di pulizia ricerca e del messaggio sulla ricerca lenta
- if (e.which != 9) {
- if (!$(this).val()) {
- if ($(this).parent().data("slow") != undefined) $("#slow").remove();
- $(this).removeClass('input-searching');
- $(this).next('.deleteicon').addClass('hide');
- } else {
- if ($(this).parent().data("slow") != undefined && $("#slow").length == 0) {
- $("#" + $this.attr('id') + "_info").parent().append(' ' + globals.translations.long + '');
- }
- $(this).addClass('input-searching');
- $(this).next('.deleteicon').removeClass('hide');
- }
- }
-
- function start_search(module_id, field, search_value) {
- searchTable(module_id, field, search_value);
- column.search(search_value).draw();
- }
-
- // Impostazione delle sessioni per le ricerche del modulo e del campo specificati
- var module_id = $this.data('idmodule'); //+ "-" + $this.data('idplugin');
- var field = $(this).parent().attr('id').replace('th_', '');
- var value = $(this).val();
- if (e.keyCode == 13 || $(this).val() == '') {
- start_search(module_id, field, value);
- } else {
- tempo = window.setTimeout(start_search, tempo_attesa_ricerche, module_id, field, value);
- }
- });
- });
-
- // Disabilito l'ordinamento alla pressione del tasto invio sull'
- $("thead input, .search").on('keypress', function (e) {
- stopTableSorting(e);
- });
-
- // Disabilito l'ordinamento al click sull'
- $("thead input, .deleteicon").click(function (e) {
- stopTableSorting(e);
- });
-
- $('.deleteicon').on("click", function (e) {
- resetTableSearch($(this).parent().attr("id").replace("th_", ""));
- });
- },
- drawCallback: function (settings) {
- var api = new $.fn.dataTable.Api(settings);
-
- $(".dataTables_sizing .deleteicon").addClass('hide');
-
- $("[data-background]").each(function () {
- $(this).parent().css("background", $(this).data("background"));
- });
-
- $("[data-color]").each(function () {
- $(this).parent().css("color", $(this).data("color"));
- });
-
- $("[data-link]").each(function () {
- var $link = $(this);
- $(this).parent().not('.bound').addClass('bound').click(function (event) {
- if ($link.data('type') === 'dialog') {
- launch_modal(globals.translations.details, $link.data('link'));
- } else {
- openLink(event, $link.data('link'))
- }
- });
- $(this).parent().addClass("clickable");
- });
-
- // Reimposto il flag sulle righe ricaricate selezionate in precedenza
- var selected = $this.data('selected') ? $this.data('selected').split(';') : [];
- table.rows().every(function (rowIdx) {
- if ($.inArray(this.id().toString(), selected) !== -1) {
- table.row(':eq(' + rowIdx + ')', {
- page: 'current'
- }).select();
- }
- });
- },
- footerCallback: function (row, data, start, end, display) {
- var i = -1;
- var json = this.api().ajax.json();
-
- this.api().columns().every(function () {
- if (json.summable[i] !== undefined) {
- $(this.footer()).addClass("text-right")
- .attr("id", "summable")
- .html(json.summable[i]);
- }
-
- i++;
- });
- }
+ initComplete: initComplete,
+ drawCallback: drawCallback,
+ footerCallback: footerCallback,
});
table.on('processing.dt', function (e, settings, processing) {
@@ -309,26 +121,30 @@ function start_datatables() {
});
}
+/**
+ * Funzione per evitare il sorting al click della colonna.
+ * Utilizzata per evitare il sorting nelle ricerche.
+ * @param {*} e
+ */
function stopTableSorting(e) {
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
+/**
+ * Funzione per resettare il campo di ricerca in una specifica colonna.
+ * @param {string} type
+ */
function resetTableSearch(type) {
if (type == null) $('[id^=th_] input').val('').trigger('keyup');
else $('[id^=th_' + type + '] input').val('').trigger('keyup');
}
-function reset(type) {
- return resetTableSearch(type);
-}
-
/**
* Sostituisce i caratteri speciali per la ricerca attraverso le tabelle Datatables.
*
- * @param string field
- *
+ * @param {string} field
* @return string
*/
function searchFieldName(field) {
@@ -338,17 +154,21 @@ function searchFieldName(field) {
/**
* Salva nella sessione la ricerca per le tabelle Datatables.
*
- * @param int module_id
- * @param string field
- * @param mixed value
+ * @param {int} module_id
+ * @param {string} field
+ * @param {mixed} value
*/
function searchTable(module_id, field, value) {
session_set('module_' + module_id + ',' + 'search_' + searchFieldName(field), value, 0);
}
+/**
+ * Restituisce i valori di ricerca impostati nell'URL della pagina.
+ * @returns {{}}
+ */
function getTableSearch() {
// Parametri di ricerca da url o sessione
- var search = getUrlVars();
+ const search = getUrlVars();
globals.search.forEach(function (value, index, array) {
if (search[array[index]] === undefined) {
@@ -359,6 +179,220 @@ function getTableSearch() {
return search;
}
+/**
+ * Restituisce i pulsanti da generare per la tabella Datatables.
+ * @returns
+ */
+function getDatatablesButtons(table) {
+ return [
+ // Pulsante di esportazione CSV
+ {
+ extend: 'csv',
+ footer: true,
+ fieldSeparator: ";",
+ exportOptions: {
+ modifier: {
+ selected: true
+ },
+ format: {
+ body: function (data, row, column, node) {
+ data = $('' + data + '
').text();
+ data_edit = data.replace('.', ''); // Rimozione punto delle migliaia
+
+ return data_edit.match(/^[0-9,]+$/) ? data_edit : data;
+ }
+ }
+ }
+ },
+ // Pulsante di esportazione tramite copia
+ {
+ extend: 'copy',
+ footer: true,
+ exportOptions: {
+ modifier: {
+ selected: true
+ }
+ }
+ },
+ // Pulsante di esportazione via stampa della tabella
+ {
+ extend: 'print',
+ autoPrint: true,
+ footer: false, // Non funzionante in Firefox, e saltuarmente in Chrome
+ customize: function (win) {
+ const datatable = getTable(table).datatable;
+
+ const footer = datatable.table().footer().children[0];
+ console.log(footer);
+
+ const body = $(win.document.body);
+ body.find('table')
+ .addClass('compact')
+ .css('font-size', 'inherit')
+ .append(footer);
+
+ body.find('td:first-child, th:first-child')
+ .addClass('hide');
+
+ },
+ exportOptions: {
+ modifier: {
+ selected: true
+ }
+ }
+ },
+ // Pulsante di esportazione in formato Excel
+ {
+ extend: 'excel',
+ footer: true,
+ exportOptions: {
+ modifier: {
+ selected: true
+ },
+ format: {
+ body: function (data, row, column, node) {
+ data = $('' + data + '
').text();
+ data_edit = data.replace('.', ''); // Fix specifico per i numeri italiani
+ data_edit = data_edit.replace(',', '.');
+
+ return data_edit.match(/^[0-9\.]+$/) ? data_edit : data;
+ }
+ }
+ }
+ },
+ // Pulsante di esportazione in formato PDF
+ {
+ extend: 'pdf',
+ footer: true,
+ exportOptions: {
+ modifier: {
+ selected: true
+ }
+ }
+ },
+ ];
+}
+
+function initComplete(settings) {
+ const api = this.api();
+ const search = getTableSearch();
+
+ api.columns('.search').every(function () {
+ const column = this;
+
+ // Valore predefinito della ricerca
+ let tempo;
+ const header = $(column.header());
+ const name = header.attr('id').replace('th_', '');
+
+ const value = search['search_' + name] ? search['search_' + name] : '';
+
+ $('
')
+ .appendTo(column.header())
+ .on('keyup', function (e) {
+ clearInterval(tempo);
+
+ // Fix del pulsante di pulizia ricerca e del messaggio sulla ricerca lenta
+ if (e.which != 9) {
+ if (!$(this).val()) {
+ if ($(this).parent().data("slow") != undefined) $("#slow").remove();
+ $(this).removeClass('input-searching');
+ $(this).next('.deleteicon').addClass('hide');
+ } else {
+ if ($(this).parent().data("slow") != undefined && $("#slow").length == 0) {
+ $("#" + $this.attr('id') + "_info").parent().append(' ' + globals.translations.long + '');
+ }
+ $(this).addClass('input-searching');
+ $(this).next('.deleteicon').removeClass('hide');
+ }
+ }
+
+ function start_search(module_id, field, search_value) {
+ searchTable(module_id, field, search_value);
+ column.search(search_value).draw();
+ }
+
+ // Impostazione delle sessioni per le ricerche del modulo e del campo specificati
+ const module_id = $this.data('idmodule'); //+ "-" + $this.data('idplugin');
+ const field = $(this).parent().attr('id').replace('th_', '');
+ const value = $(this).val();
+ if (e.keyCode == 13 || $(this).val() == '') {
+ start_search(module_id, field, value);
+ } else {
+ const tempo_attesa_ricerche = (globals.tempo_attesa_ricerche * 1000);
+
+ tempo = window.setTimeout(start_search, tempo_attesa_ricerche, module_id, field, value);
+ }
+ });
+ });
+
+ // Disabilito l'ordinamento alla pressione del tasto invio sull'
+ $("thead input, .search").on('keypress', function (e) {
+ stopTableSorting(e);
+ });
+
+ // Disabilito l'ordinamento al click sull'
+ $("thead input, .deleteicon").click(function (e) {
+ stopTableSorting(e);
+ });
+
+ $('.deleteicon').on("click", function (e) {
+ resetTableSearch($(this).parent().attr("id").replace("th_", ""));
+ });
+}
+
+function drawCallback(settings) {
+ const table = getTable(settings.nTable);
+ const datatable = table.datatable;
+
+ $(".dataTables_sizing .deleteicon").addClass('hide');
+
+ $("[data-background]").each(function () {
+ $(this).parent().css("background", $(this).data("background"));
+ });
+
+ $("[data-color]").each(function () {
+ $(this).parent().css("color", $(this).data("color"));
+ });
+
+ $("[data-link]").each(function () {
+ const $link = $(this);
+ $(this).parent().not('.bound').addClass('bound').click(function (event) {
+ if ($link.data('type') === 'dialog') {
+ launch_modal(globals.translations.details, $link.data('link'));
+ } else {
+ openLink(event, $link.data('link'))
+ }
+ });
+ $(this).parent().addClass("clickable");
+ });
+
+ // Reimposto il flag sulle righe ricaricate selezionate in precedenza
+ const selected = table.getSelectedRows();
+ datatable.rows().every(function (rowIdx) {
+ if (selected.includes(this.id())) {
+ datatable.row(':eq(' + rowIdx + ')', {
+ page: 'current'
+ }).select();
+ }
+ });
+}
+
+function footerCallback(row, data, start, end, display) {
+ let i = -1;
+ const json = this.api().ajax.json();
+
+ this.api().columns().every(function () {
+ if (json.summable[i] !== undefined) {
+ $(this.footer()).addClass("text-right")
+ .attr("id", "summable")
+ .html(json.summable[i]);
+ }
+
+ i++;
+ });
+}
+
/**
* Restituisce un oggetto che permette di gestire le tabelle DataTables.
*
@@ -425,13 +459,13 @@ function getTable(selector) {
// Aggiornamento del footer nel caso sia richiesto
if (globals.restrict_summables_to_selected) {
- this.updateSelectedFooter();
+ this.updateFooterForSelectedRows();
}
},
addSelectedRows: function (row_ids) {
row_ids = Array.isArray(row_ids) ? row_ids : [row_ids];
row_ids.forEach(function (item, index) {
- selected.set(item, true);
+ selected.set(item.toString(), true);
});
this.saveSelectedRows();
@@ -439,7 +473,7 @@ function getTable(selector) {
removeSelectedRows: function (row_ids) {
row_ids = Array.isArray(row_ids) ? row_ids : [row_ids];
row_ids.forEach(function (item, index) {
- selected.delete(item);
+ selected.delete(item.toString());
});
this.saveSelectedRows();
@@ -449,12 +483,14 @@ function getTable(selector) {
this.saveSelectedRows();
},
- // Aggiornamento dei campi summable
- updateSelectedFooter: function () {
- let datatable = this.datatable;
+ /**
+ * Nuovi valori dei campi summable
+ * @returns
+ */
+ getSelectedRowsFooter: function () {
let ids = this.getSelectedRows();
- $.ajax({
+ return $.ajax({
url: globals.rootdir + "/ajax.php",
type: "POST",
dataType: "json",
@@ -463,15 +499,23 @@ function getTable(selector) {
id_plugin: this.id_plugin,
op: "summable-results",
ids: ids,
- },
- success: function (response) {
- for (let [column, value] of Object.entries(response)) {
- let index = parseInt(column) + 1;
- let sel = datatable.column(index).footer();
- $(sel).addClass("text-right")
- .attr("id", "summable")
- .html(value);
- }
+ }
+ });
+ },
+
+ /**
+ * Aggiornamento dei campi summable
+ */
+ updateFooterForSelectedRows: function () {
+ let datatable = this.datatable;
+
+ this.getSelectedRowsFooter().then(function (response) {
+ for (let [column, value] of Object.entries(response)) {
+ let index = parseInt(column) + 1;
+ let sel = datatable.column(index).footer();
+ $(sel).addClass("text-right")
+ .attr("id", "summable")
+ .html(value);
}
});
},