Miglioramento ricerche Datatables

Miglioramento delle ricerche Datatables in modo da rendere il sistema più comprensibile.
This commit is contained in:
Thomas Zilio 2018-09-27 10:15:04 +02:00
parent 8ccdd70622
commit 4298e84d90
5 changed files with 95 additions and 62 deletions

View File

@ -110,7 +110,7 @@ if (!empty($type) && $type != 'menu' && $type != 'custom') {
}
echo '
<th'.$attr_td.' id="th_'.str_replace([' ', '.'], ['-', ''], $name).'"';
<th'.$attr_td.' id="th_'.searchFieldName($name).'"';
if ($total['search'][$key] == 1) {
echo ' class="search"';
} else {

View File

@ -38,16 +38,15 @@ if (Auth::check()) {
<script>
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.'";';
}
}
}
}

View File

@ -602,7 +602,7 @@ function start_datatables() {
$(win.document.body)
.css('font-size', '10pt')
.append(
'<table class="main-records table table-condensed table-bordered dataTable" ><tfoot><tr><td></td><td class="pull-right" >' + $('#summable').text() + '</td><td></td></tr></tfoot></table>'
'<table class="main-records table table-condensed table-bordered dataTable"><tfoot><tr><td></td><td class="pull-right">' + $('#summable').text() + '</td><td></td></tr></tfoot></table>'
);
$(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);
}

View File

@ -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);
}

View File

@ -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 = "<table><tr><td style='border:0px solid transparent;' colspan='2'><div style='width:75mm;'></div></td></tr>\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 .= "<tr><td valign='top' style='border:0px solid transparent;' align='left' >\n".$sessione['nome_tecnico']."\n</td>\n";
$riga_tecnici .= "<td valign='bottom' style='border:0px solid transparent;' align='right'>\n".Translator::dateToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_inizio']).'-'.Translator::timeToLocale($sessione['orario_fine'])."\n";
$riga_tecnici .= "</td></tr>\n";
$riga_tecnici = "<table><tr><td style='border:0px solid transparent;' colspan='2'><div style='width:75mm;'></div></td></tr>\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 .= "<tr><td valign='top' style='border:0px solid transparent;' align='left' >\n".$sessione['nome_tecnico']."\n</td>\n";
$riga_tecnici .= "<td valign='bottom' style='border:0px solid transparent;' align='right'>\n".Translator::dateToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_inizio']).'-'.Translator::timeToLocale($sessione['orario_fine'])."\n";
$riga_tecnici .= "</td></tr>\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 .= "</table>\n";
$line = '<span>Intervento <b>'.$rsi[$i]['Numero'].'</b> del <b>'.Translator::timestampToLocale($rsi[$i]['Data inizio'])."</b><br/><small style='color:#444;'>".nl2br($rsi[$i]['richiesta'])."</small></span><br/>\n";
// Se l'elenco non è di un singolo cliente stampo anche la sua ragione sociale
if (!$singolo_cliente) {
$line .= '<br/><span><small><b>Cliente:</b> '.$rsi[$i]['Ragione sociale']."</small></span>\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 .= "</table>\n";
$line = '<span>Intervento <b>'.$intervento['Numero'].'</b> del <b>'.Translator::timestampToLocale($intervento['Data inizio'])."</b><br/><small style='color:#444;'>".nl2br($intervento['richiesta'])."</small></span><br/>\n";
// Se l'elenco non è di un singolo cliente stampo anche la sua ragione sociale
if (!$singolo_cliente) {
$line .= '<br/><span><small><b>Cliente:</b> '.$intervento['Ragione sociale']."</small></span>\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 .= '<big><big><b>RIEPILOGO INTERVENTI DAL '.Translator::dateToLocale($date_start).' al '.Translator::dateToLocale($date_end)."</b></big></big><br/><br/>\n";
$body .= '<big><big><b>RIEPILOGO INTERVENTI DAL '.Translator::dateToLocale($_SESSION['period_start']).' al '.Translator::dateToLocale($_SESSION['period_end'])."</b></big></big><br/><br/>\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 .= "<p align=\"right\">\n";
$body .= '<big><b>TOTALE INTERVENTI: '.Translator::numberToLocale($totale_intervento_scontato + $totale_articoli + $totale_spese)." &euro;</b></big>\n";
$body .= "</p>\n";
$report_name = 'Riepilogo_interventi.pdf';
$report_name = 'riepilogo_interventi.pdf';