diff --git a/ajax_dataload.php b/ajax_dataload.php index e85d193f3..7657881c3 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -7,6 +7,7 @@ use Util\Query; // Informazioni fondamentali $columns = filter('columns'); $order = filter('order')[0]; +$draw_numer = intval(filter('draw')); $order['column'] = $order['column'] - 1; array_shift($columns); @@ -32,6 +33,7 @@ $results = [ 'recordsTotal' => 0, 'recordsFiltered' => 0, 'summable' => [], + 'draw' => $draw_numer, ]; $query = Query::getQuery($structure); @@ -53,7 +55,9 @@ if (!empty($query)) { $results['recordsFiltered'] = $data['count']; // SOMME - $results['summable'] = Util\Query::getSums($structure, $search); + if ($draw_numer == 1) { + $results['summable'] = Util\Query::getSums($structure, $search); + } // Allineamento delle righe $align = []; diff --git a/include/top.php b/include/top.php index 9059e86f5..7100b5a16 100644 --- a/include/top.php +++ b/include/top.php @@ -105,8 +105,6 @@ if (Auth::check()) { id_module: \''.$id_module.'\', id_record: \''.$id_record.'\', - order_manager_id: \''.($dbo->isInstalled() ? Modules::get('Stato dei serivizi')['id'] : '').'\', - cifre_decimali: '.setting('Cifre decimali per importi').', decimals: "'.formatter()->getNumberSeparators()['decimals'].'", @@ -124,7 +122,9 @@ if (Auth::check()) { ckeditorToolbar: [ ["Undo","Redo","-","Cut","Copy","Paste","PasteText","PasteFromWord","-","Scayt", "-","Link","Unlink","-","Bold","Italic","Underline","Superscript","SpecialChar","HorizontalRule","-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","NumberedList","BulletedList","Outdent","Indent","Blockquote","-","Styles","Format","Image","Table", "TextColor", "BGColor" ], ], - + + order_manager_id: \''.($dbo->isInstalled() ? Modules::get('Stato dei serivizi')['id'] : '').'\', + dataload_page_buffer: '.setting('Lunghezza in pagine del buffer Datatables').', tempo_attesa_ricerche: '.setting('Tempo di attesa ricerche in secondi').', }; '; diff --git a/lib/functions.js b/lib/functions.js index a25a9fa6e..d662cf782 100644 --- a/lib/functions.js +++ b/lib/functions.js @@ -172,20 +172,24 @@ $(document).ready(function () { }); $(".btn-select-all").click(function () { - var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); - $("#main_loading").show(); + var id = $(document).find("#" + $(this).parent().parent().parent().data("target")); + var table = id.DataTable(); + $("#main_loading").show(); table.clear().draw(); + $(id).data('page-length', table.page.len()); + table.page.len(-1).draw(); }); $(".btn-select-none").click(function () { - var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); + var id = $(document).find("#" + $(this).parent().parent().parent().data("target")); + var table = id.DataTable(); table.rows().deselect(); - table.page.len(200); + table.page.len($(id).data('page-length')); }); $(".bulk-action").click(function () { @@ -623,14 +627,14 @@ function start_datatables() { selector: 'td:first-child' }, buttons: [{ - extend: 'csv', - fieldSeparator: ";", - exportOptions: { - modifier: { - selected: true + extend: 'csv', + fieldSeparator: ";", + exportOptions: { + modifier: { + selected: true + } } - } - }, + }, { extend: 'copy', exportOptions: { @@ -689,7 +693,8 @@ function start_datatables() { }, ], scroller: { - loadingIndicator: true + loadingIndicator: true, + displayBuffer: globals.dataload_page_buffer, }, ajax: { url: "ajax_dataload.php?id_module=" + id_module + "&id_plugin=" + id_plugin + "&id_parent=" + id_parent, @@ -699,8 +704,9 @@ function start_datatables() { return data.data; } }, - initComplete: function () { + initComplete: function (settings) { var api = this.api(); + api.columns('.search').every(function () { var column = this; $('
') @@ -753,7 +759,10 @@ function start_datatables() { $('.deleteicon').on("click", function (e) { reset($(this).parent().attr("id").replace("th_", "")); - api.page.len(200).draw(); + + if (api.page.len() == -1){ + api.page.len($(id).data('page-length')); + } }); // Ricerca di base ereditata dalla sessione @@ -827,7 +836,7 @@ function start_datatables() { $(this.footer()).addClass("text-right"); $(this.footer()).attr("id", "summable"); $(this.footer()).html(sum.summable[i]); - } else $(this.footer()).html(" "); + } i++; }); } diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 31e1c89b7..f0f30d379 100644 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -170,7 +170,7 @@ $_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'] $("#idvettore").attr("required", false); $("#idvettore").attr("disabled", true); $("label[for=idvettore]").text(""); - $("#idvettore").selectReset(""); + $("#idvettore").selectReset(""); $("#idvettore").next().next().find("button.bound:nth-child(1)").prop("disabled", true); }else{ $("#idvettore").attr("required", true); diff --git a/modules/fatture/add_intervento.php b/modules/fatture/add_intervento.php index a0cfd7dcc..d17e5317f 100644 --- a/modules/fatture/add_intervento.php +++ b/modules/fatture/add_intervento.php @@ -50,8 +50,8 @@ foreach ($rs as $key => $value) { $rs[$key]['prezzo'] = Translator::numberToLocale($prezzo); $rs[$key]['descrizione_intervento'] = strip_tags($rs[$key]['descrizione_intervento']); - if($prezzo <= 0){ -unset($rs[$key]); + if ($prezzo <= 0) { + unset($rs[$key]); } } diff --git a/modules/stato_servizi/modutil.php b/modules/stato_servizi/modutil.php index a7ed23dfc..4b08a254b 100644 --- a/modules/stato_servizi/modutil.php +++ b/modules/stato_servizi/modutil.php @@ -57,8 +57,8 @@ function submodules($list, $depth = 0) // Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti if (empty($sub['default'])) { - $result .= " - + $result .= ' + "; } else { diff --git a/src/Util/Query.php b/src/Util/Query.php index 33f5a0d9d..f7922b142 100644 --- a/src/Util/Query.php +++ b/src/Util/Query.php @@ -81,6 +81,11 @@ class Query } $date_query = !empty($filters) && !empty(self::$segments) ? ' AND ('.implode(' OR ', $filters).')' : ''; + // Sostituzione periodi temporali + preg_match('|segment\((.+?)\)|', $query, $matches); + $segment_name = !empty($matches[1]) ? $matches[1] : 'id_segment'; + $segment_filter = !empty($matches[0]) ? $matches[0] : 'segment'; + // Elenco delle sostituzioni $replace = [ // Identificatori @@ -96,7 +101,7 @@ class Query '|period_end|' => $_SESSION['period_end'], // Segmenti - '|segment|' => !empty($segment) ? ' AND id_segment = '.prepare($segment) : '', + '|'.$segment_filter.'|' => !empty($segment) ? ' AND '.$segment_name.' = '.prepare($segment) : '', ]; // Sostituzione dei formati diff --git a/update/2_4_10.php b/update/2_4_10.php index a43a32bd0..4be3c326c 100644 --- a/update/2_4_10.php +++ b/update/2_4_10.php @@ -1,8 +1,8 @@ save(); diff --git a/update/2_4_10.sql b/update/2_4_10.sql index eb15f8d54..505950bdb 100644 --- a/update/2_4_10.sql +++ b/update/2_4_10.sql @@ -89,9 +89,6 @@ UPDATE `mg_movimenti` SET `idsede_azienda` = (SELECT `idsede_partenza` FROM `dt_ UPDATE `mg_movimenti` SET `idsede_controparte` = (SELECT `idsede_destinazione` FROM `co_documenti` WHERE `co_documenti`.`id` = `mg_movimenti`.`iddocumento`) WHERE `iddocumento`!=0; UPDATE `mg_movimenti` SET `idsede_azienda` = (SELECT `idsede_destinazione` FROM `co_documenti` WHERE `co_documenti`.`id` = `mg_movimenti`.`iddocumento`) WHERE `iddocumento`!=0; --- Aggiungo LEFT e INNER JOIN per ottimizzare la query del modulo Fatture di vendita -UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` LEFT OUTER JOIN ( SELECT `zz_emails`.`name`, `zz_operations`.`id_record` FROM `zz_operations` INNER JOIN `zz_emails` ON `zz_operations`.`id_email` = `zz_emails`.`id` INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` AND `zz_modules`.`name` = \'Fatture di vendita\' AND `zz_operations`.`op` = \'send-email\' LIMIT 1) AS `email` ON `email`.`id_record` = `co_documenti`.`id` WHERE 1=1 AND `dir` = \'entrata\' |segment| AND `data` >= \'|period_start|\' AND `data` <= \'|period_end|\' HAVING 2=2 ORDER BY `data` DESC, CAST(numero_esterno AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Fatture di vendita'; - -- Sistemo vista per icon_Inviata modulo Fatture di vendita UPDATE `zz_views` SET `query` = 'IF(`email`.`name` IS NOT NULL, \'fa fa-envelope text-success\', \'\')' WHERE `zz_views`.`name` = 'icon_Inviata' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') ; @@ -185,3 +182,29 @@ ALTER TABLE `in_interventi_tecnici` CHANGE `idtipointervento` `idtipointervento` UPDATE `in_tariffe` INNER JOIN `in_tipiintervento` ON `in_tariffe`.`idtipointervento` = `in_tipiintervento`.`codice` SET `in_tariffe`.`idtipointervento` = `in_tipiintervento`.`idtipointervento`; ALTER TABLE `in_tariffe` CHANGE `idtipointervento` `idtipointervento` INT(11) NOT NULL, ADD FOREIGN KEY (`idtipointervento`) REFERENCES `in_tipiintervento`(`idtipointervento`); + +-- Ottimizzazione query Fatture +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti` + INNER JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` + INNER JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id` + LEFT JOIN `fe_stati_documento` ON `co_documenti`.`codice_stato_fe` = `fe_stati_documento`.`codice` + LEFT JOIN (SELECT `numero_esterno`, `id_segment` FROM `co_documenti` WHERE `co_documenti`.`idtipodocumento` IN(SELECT `id` FROM `co_tipidocumento` WHERE `dir` = ''entrata'') AND `co_documenti`.`data` >= ''2019-01-01'' AND `co_documenti`.`data` <= ''2019-12-31'' GROUP BY `id_segment`, `numero_esterno` HAVING COUNT(`numero_esterno`) > 1) dup ON `co_documenti`.`numero_esterno` = `dup`.`numero_esterno` AND `dup`.`id_segment` = `co_documenti`.`id_segment` + LEFT OUTER JOIN (SELECT `zz_emails`.`name`, `zz_operations`.`id_record` FROM `zz_operations` INNER JOIN `zz_emails` ON `zz_operations`.`id_email` = `zz_emails`.`id` INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` AND `zz_modules`.`name` = ''Fatture di vendita'' AND `zz_operations`.`op` = ''send-email'' LIMIT 1) AS `email` ON `email`.`id_record` = `co_documenti`.`id` +WHERE 1=1 AND `dir` = ''entrata'' |segment(co_documenti.id_segment)| AND `co_documenti`.`data` >= ''|period_start|'' AND `co_documenti`.`data` <= ''|period_end|'' +HAVING 2=2 +ORDER BY `co_documenti`.`data` DESC, CAST(`co_documenti`.`numero_esterno` AS UNSIGNED) DESC' WHERE `name` = 'Fatture di vendita'; + +UPDATE `zz_views` SET `query` = 'IF(`dup`.`numero_esterno` IS NULL, '''', ''red'')' WHERE `name` = '_bg_' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'an_anagrafiche.idanagrafica' WHERE `name` = 'idanagrafica' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'IF(co_documenti.numero_esterno='''', co_documenti.numero, co_documenti.numero_esterno)', `order_by` ='CAST(co_documenti.numero_esterno AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'co_documenti.data' WHERE `name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'an_anagrafiche.ragione_sociale' WHERE `name` = 'Ragione sociale' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = '(SELECT SUM(subtotale - sconto + iva + rivalsainps - ritenutaacconto) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento) + co_documenti.iva_rivalsainps' WHERE `name` = 'Totale' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'co_statidocumento.icona' WHERE `name` = 'icon_Stato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = 'co_statidocumento.descrizione' WHERE `name` = 'icon_title_Stato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = '`fe_stati_documento`.`icon`' WHERE `name` = 'icon_FE' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); +UPDATE `zz_views` SET `query` = '`fe_stati_documento`.`descrizione`' WHERE `name` = 'icon_title_FE' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); + +-- Impostazione per la lunghezza delle pagine Datatables +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Lunghezza in pagine del buffer Datatables', '200', 'decimal', 0, 'Generali', 1);