From 4298e84d90ef95d0cbf20ad1d86a24a7ac77674e Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 27 Sep 2018 10:15:04 +0200 Subject: [PATCH] Miglioramento ricerche Datatables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Miglioramento delle ricerche Datatables in modo da rendere il sistema più comprensibile. --- include/manager.php | 2 +- include/top.php | 15 ++-- lib/functions.js | 41 +++++++-- lib/functions.php | 12 +++ .../pdfgen.riepilogo_interventi.php | 87 +++++++++---------- 5 files changed, 95 insertions(+), 62 deletions(-) diff --git a/include/manager.php b/include/manager.php index 4164b9fa9..c099c00d7 100644 --- a/include/manager.php +++ b/include/manager.php @@ -110,7 +110,7 @@ if (!empty($type) && $type != 'menu' && $type != 'custom') { } echo ' - search = []'; - $array = []; - foreach ($_SESSION as $idx1 => $arr2) { - if ($idx1 == 'module_'.$id_module) { - foreach ($arr2 as $field => $value) { - if (!empty($value) && starts_with($field, 'search_')) { - $field_name = str_replace('search_', '', $field); - echo ' + $array = $_SESSION['module_'.$id_module]; + if (!empty($array)) { + foreach ($array as $field => $value) { + if (!empty($value) && starts_with($field, 'search_')) { + $field_name = str_replace('search_', '', $field); + + echo ' search.push("search_'.$field_name.'"); search["search_'.$field_name.'"] = "'.$value.'";'; - } } } } diff --git a/lib/functions.js b/lib/functions.js index 33515f824..9698b5aab 100644 --- a/lib/functions.js +++ b/lib/functions.js @@ -602,7 +602,7 @@ function start_datatables() { $(win.document.body) .css('font-size', '10pt') .append( - '
' + $('#summable').text() + '
' + '
' + $('#summable').text() + '
' ); $(win.document.body).find('table') .addClass('compact') @@ -656,6 +656,7 @@ function start_datatables() { 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(); @@ -670,19 +671,19 @@ function start_datatables() { } } - idx1 = 'module_' + $this.data('idmodule'); //+ "-" + $this.data('idplugin'); - idx2 = 'search_' + $(this).parent().attr('id').replace('th_', ''); - - function start_search(search_value) { - session_set(idx1 + ',' + idx2, search_value, 0); + function start_search(module_id, field, search_value) { + searchTable(module_id, field, search_value); column.search(search_value).draw(); } - // Imposto delle sessioni per le ricerche del modulo e del campo specificatsi + // 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($(this).val()); + start_search(module_id, field, value); } else { - tempo = window.setTimeout(start_search, tempo_attesa_ricerche, $(this).val()); + tempo = window.setTimeout(start_search, tempo_attesa_ricerche, module_id, field, value); } }); }); @@ -1426,3 +1427,25 @@ function buttonRestore(button, loadingResult) { $this.addClass(loadingResult[1]); $this.prop("disabled", false); } + +/** + * Sostituisce i caratteri speciali per la ricerca attraverso le tabelle Datatables. + * + * @param string field + * + * @return string + */ +function searchFieldName(field) { + return field.replace(' ', '-').replace('.', ''); +} + +/** + * Salva nella sessione la ricerca per le tabelle Datatables. + * + * @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); +} diff --git a/lib/functions.php b/lib/functions.php index 61ea7ce58..861c537a5 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -354,3 +354,15 @@ function getURLPath() return slashes($path); } + +/** + * Sostituisce i caratteri speciali per la ricerca attraverso le tabelle Datatables. + * + * @param string $field + * + * @return string + */ +function searchFieldName($field) +{ + return str_replace([' ', '.'], ['-', ''], $field); +} diff --git a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php index bd238ce54..34e569f43 100644 --- a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php +++ b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php @@ -30,13 +30,13 @@ if (!empty($search_filters)) { // Filtri derivanti dai permessi (eventuali) $module_query = Modules::replaceAdditionals($id_module, $module_query); -$rsi = $dbo->fetchArray($module_query); +$interventi = $dbo->fetchArray($module_query); // Se il cliente è uno solo carico la sua intestazione, altrimenti la lascio in bianco -$idcliente = $rsi[0]['idanagrafica']; +$idcliente = $interventi[0]['idanagrafica']; $singolo_cliente = true; -for ($i = 0; $i < sizeof($rsi) && $singolo_cliente; ++$i) { - if ($rsi[$i]['idanagrafica'] != $idcliente) { +for ($i = 0; $i < sizeof($interventi) && $singolo_cliente; ++$i) { + if ($interventi[$i]['idanagrafica'] != $idcliente) { $singolo_cliente = false; } } @@ -55,7 +55,7 @@ if (!$singolo_cliente) { include_once $docroot.'/templates/pdfgen_variables.php'; -$totrows = sizeof($rsi); +$totrows = sizeof($interventi); $totale_km = 0.00; $totale = 0.00; $totale_calcolato = 0.00; @@ -74,54 +74,53 @@ $diritto_chiamata_cons = []; $idinterventi = ['0']; -if ($totrows > 0) { - for ($i = 0; $i < $totrows; ++$i) { - // Lettura dati dei tecnici dell'intervento corrente - $sessioni = $dbo->fetchArray('SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico FROM in_interventi_tecnici WHERE idintervento='.prepare($rsi[$i]['id'])); - $riga_tecnici = "\n"; - $t = 0; +foreach ($interventi as $intervento) { + // Lettura dati dei tecnici dell'intervento corrente + $sessioni = $dbo->fetchArray('SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico FROM in_interventi_tecnici WHERE idintervento='.prepare($intervento['id'])); - foreach ($sessioni as $sessione) { - $riga_tecnici .= "\n"; - $riga_tecnici .= "\n"; + $riga_tecnici = "
\n".$sessione['nome_tecnico']."\n\n".Translator::dateToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_inizio']).'-'.Translator::timeToLocale($sessione['orario_fine'])."\n"; - $riga_tecnici .= "
\n"; - array_push($costi_orari, floatval($sessione['prezzo_ore_unitario'])); - array_push($costi_km, floatval($sessione['prezzo_km_unitario'])); - array_push($diritto_chiamata, floatval($sessione['prezzo_dirittochiamata'])); + foreach ($sessioni as $sessione) { + $riga_tecnici .= "\n"; + $riga_tecnici .= "\n"; - array_push($costo_ore_cons, floatval($sessione['prezzo_ore_consuntivo'])); - array_push($costo_km_cons, floatval($sessione['prezzo_km_consuntivo'])); - array_push($diritto_chiamata_cons, floatval($sessione['prezzo_dirittochiamata_consuntivo'])); - array_push($km, floatval($sessione['km'])); - $totale_km += floatval($sessione['km']); - } + array_push($costi_orari, floatval($sessione['prezzo_ore_unitario'])); + array_push($costi_km, floatval($sessione['prezzo_km_unitario'])); + array_push($diritto_chiamata, floatval($sessione['prezzo_dirittochiamata'])); - $riga_tecnici .= "
\n".$sessione['nome_tecnico']."\n\n".Translator::dateToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_inizio']).'-'.Translator::timeToLocale($sessione['orario_fine'])."\n"; + $riga_tecnici .= "
\n"; - - $line = 'Intervento '.$rsi[$i]['Numero'].' del '.Translator::timestampToLocale($rsi[$i]['Data inizio'])."
".nl2br($rsi[$i]['richiesta'])."

\n"; - - // Se l'elenco non è di un singolo cliente stampo anche la sua ragione sociale - if (!$singolo_cliente) { - $line .= '
Cliente: '.$rsi[$i]['Ragione sociale']."\n"; - } - - array_push($info_intervento, $line); - - array_push($ntecnici, $n_tecnici); - array_push($tecnici, $riga_tecnici); - array_push($ore, get_ore_intervento($rsi[$i]['id'])); - - $totale_dirittochiamata += floatval($rs[$i]['prezzo_dirittochiamata']); - array_push($idinterventi, "'".$rsi[$i]['id']."'"); + array_push($costo_ore_cons, floatval($sessione['prezzo_ore_consuntivo'])); + array_push($costo_km_cons, floatval($sessione['prezzo_km_consuntivo'])); + array_push($diritto_chiamata_cons, floatval($sessione['prezzo_dirittochiamata_consuntivo'])); + array_push($km, floatval($sessione['km'])); + $totale_km += floatval($sessione['km']); } + + $riga_tecnici .= "\n"; + + $line = 'Intervento '.$intervento['Numero'].' del '.Translator::timestampToLocale($intervento['Data inizio'])."
".nl2br($intervento['richiesta'])."

\n"; + + // Se l'elenco non è di un singolo cliente stampo anche la sua ragione sociale + if (!$singolo_cliente) { + $line .= '
Cliente: '.$intervento['Ragione sociale']."\n"; + } + + array_push($info_intervento, $line); + + array_push($ntecnici, $n_tecnici); + array_push($tecnici, $riga_tecnici); + array_push($ore, get_ore_intervento($intervento['id'])); + + $totale_dirittochiamata += floatval($rs[$i]['prezzo_dirittochiamata']); + array_push($idinterventi, "'".$intervento['id']."'"); } -$body .= 'RIEPILOGO INTERVENTI DAL '.Translator::dateToLocale($date_start).' al '.Translator::dateToLocale($date_end)."

\n"; + +$body .= 'RIEPILOGO INTERVENTI DAL '.Translator::dateToLocale($_SESSION['period_start']).' al '.Translator::dateToLocale($_SESSION['period_end'])."

\n"; // Sostituisco i valori tra | | con il valore del campo del db -$body .= preg_replace('/|(.+?)|/', $rsi[0]['${1}'], $body); +$body .= preg_replace('/|(.+?)|/', $interventi[0]['${1}'], $body); if (sizeof($info_intervento) > 0) { // Tabella con riepilogo interventi, km e ore @@ -391,4 +390,4 @@ $body .= "

\n"; $body .= 'TOTALE INTERVENTI: '.Translator::numberToLocale($totale_intervento_scontato + $totale_articoli + $totale_spese)." €\n"; $body .= "

\n"; -$report_name = 'Riepilogo_interventi.pdf'; +$report_name = 'riepilogo_interventi.pdf';