fetchArray('SELECT * FROM zz_views WHERE id_module='.$id_module.' AND id IN (SELECT id_vista FROM zz_group_view WHERE id_gruppo=(SELECT idgruppo FROM zz_users WHERE id='.$_SESSION['id_utente'].')) ORDER BY `order` ASC'); if ($datas != null) { $select = ''; foreach ($datas as $data) { $select .= $data['query']." AS '".$data['name']."',"; if ($data['enabled']) { array_push($fields, trim($data['name'])); } } $select = substr($select, 0, strlen($select) - 1); } $module = $dbo->fetchArray('SELECT * FROM zz_modules WHERE id="'.$id_module.'"')[0]; $module_query = ($module['options2'] != '') ? $module['options2'] : $module['options']; $module_query = str_replace('|select|', $select, $module_query); $module_query = str_replace('|period_start|', $_SESSION['period_start'], $module_query); $module_query = str_replace('|period_end|', $_SESSION['period_end'], $module_query); $module_dir = $module['directory']; $search_filters = []; if (is_array($_SESSION['module_'.$id_module])) { foreach ($_SESSION['module_'.$id_module] as $field_name => $field_value) { if ($field_value != '') { $field_name = str_replace('search_', '', $field_name); $field_name = str_replace('__', ' ', $field_name); array_push($search_filters, '`'.$field_name.'` LIKE "%'.$field_value.'%"'); } } } if (sizeof($search_filters) > 0) { $module_query = str_replace('1=1', '1=1 AND ('.implode(' AND ', $search_filters).') ', $module_query); } // Aggiungo eventuali filtri dei permessi if ($additional_where[$rs[0]['name']] != '') { $module_query = str_replace('1=1', '1=1 '.$additional_where[$rs[0]['name']], $module_query); } $rsi = $dbo->fetchArray($module_query); // Se il cliente è uno solo carico la sua intestazione, altrimenti la lascio in bianco $idcliente = $rsi[0]['idanagrafica']; $singolo_cliente = true; for ($i = 0; $i < sizeof($rsi) && $singolo_cliente; ++$i) { if ($rsi[$i]['idanagrafica'] != $idcliente) { $singolo_cliente = false; } } if (!$singolo_cliente) { $idcliente = ''; } // carica report html $report = file_get_contents($docroot.'/templates/riepilogo_interventi/intervento.html'); $body = file_get_contents($docroot.'/templates/riepilogo_interventi/intervento_body.html'); if (!$singolo_cliente) { $body = str_replace('Spett.le', '', $body); } include_once $docroot.'/templates/pdfgen_variables.php'; $totrows = sizeof($rsi); $totale_km = 0.00; $totale_ore = 0.00; $totale = 0.00; $totale_calcolato = 0.00; $info_intervento = []; $ore = []; $km = []; $ntecnici = []; $tecnici = []; $costi_orari = []; $costi_km = []; $diritto_chiamata = []; $costo_ore_cons = []; $costo_km_cons = []; $diritto_chiamata_cons = []; $idinterventi = ['0']; if ($totrows > 0) { for ($i = 0; $i < $totrows; ++$i) { // Lettura dati dei tecnici dell'intervento corrente $query = 'SELECT *, ( ( TIME_TO_SEC(orario_fine)-TIME_TO_SEC(orario_inizio) ) ) AS t, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico FROM in_interventi_tecnici WHERE idintervento="'.$rsi[$i]['id'].'"'; $rs = $dbo->fetchArray($query); $n_tecnici = sizeof($rs); $riga_tecnici = "\n"; $t = 0; for ($j = 0; $j < $n_tecnici; ++$j) { $riga_tecnici .= "\n"; $riga_tecnici .= "\n"; // Conteggio ore totali $t += round($rs[$j]['t'] / 60 / 60, 2); array_push($costi_orari, floatval($rs[$j]['prezzo_ore_unitario'])); array_push($costi_km, floatval($rs[$j]['prezzo_km_unitario'])); array_push($diritto_chiamata, floatval($rs[$j]['prezzo_dirittochiamata'])); array_push($costo_ore_cons, floatval($rs[$j]['prezzo_ore_consuntivo'])); array_push($costo_km_cons, floatval($rs[$j]['prezzo_km_consuntivo'])); array_push($diritto_chiamata_cons, floatval($rs[$j]['prezzo_dirittochiamata_consuntivo'])); array_push($km, floatval($rs[$j]['km'])); $totale_km += floatval($rs[$j]['km']); } $riga_tecnici .= "
\n".$rs[$j]['nome_tecnico']."\n\n".Translator::dateToLocale($rs[$j]['orario_inizio']).' - '.Translator::timeToLocale($rs[$j]['orario_inizio']).'-'.Translator::timeToLocale($rs[$j]['orario_fine'])."\n"; $riga_tecnici .= "
\n"; $line = 'Intervento '.$rsi[$i]['id'].' del '.$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, $t); $totale_ore += floatval($t); $totale_dirittochiamata += floatval($rs[$i]['prezzo_dirittochiamata']); array_push($idinterventi, "'".$rsi[$i]['id']."'"); } } $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); if (sizeof($info_intervento) > 0) { // Tabella con riepilogo interventi, km e ore $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; // Tabella con i dati for ($i = 0; $i < sizeof($info_intervento); ++$i) { $subtotale_consuntivo = floatval($costo_ore_cons[$i] + $costo_km_cons[$i] + $diritto_chiamata_cons[$i]); $totale_consuntivo += $subtotale_consuntivo; $subtotale_calcolato = $costi_orari[$i] * $ore[$i] + $costi_km[$i] * $km[$i] + $diritto_chiamata[$i]; $totale_calcolato += $subtotale_calcolato; $body .= "\n"; // Totale km $body .= '\n"; // Costo km $body .= '\n"; // Totale ore $body .= '\n"; // Costo ore $body .= '\n"; // Diritto chiamata $body .= '\n"; // Subtot $body .= '\n"; } $body .= "\n"; // Totale costo km $body .= "\n"; $body .= "\n"; // Totale costo ore $body .= "\n"; $body .= "\n"; // Totale diritto chiamata $body .= "\n"; $body .= "\n"; // Riga dello sconto $sconto = $totale_calcolato - $totale_consuntivo; if ($sconto != 0) { /* $body .= "\n\n"; */ $body .= "\n"; } $totale_intervento_scontato = $totale_calcolato - $sconto; $body .= "\n"; $body .= "
\n"; $body .= "Interventi\n"; $body .= "\n"; $body .= "km\n"; $body .= "\n"; $body .= "Costo unitario al km\n"; $body .= "\n"; $body .= "Ore\n"; $body .= "\n"; $body .= "Costo unitario all’ora\n"; $body .= "\n"; $body .= "Diritto chiamata\n"; $body .= "\n"; $body .= "Subtotale\n"; $body .= "
\n"; $body .= '
'.$info_intervento[$i].'
Tecnici:

'.$tecnici[$i]."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($km[$i])."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($costi_km[$i])."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($ore[$i])."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($costi_orari[$i])."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($diritto_chiamata[$i])."
\n"; $body .= "
'; $body .= '
'.Translator::numberToLocale($subtotale_calcolato)."
\n"; $body .= "
\n"; $body .= "Totale:\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_km)."\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_ore)."\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_dirittochiamata)."\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_calcolato)." €\n"; $body .= "
\n"; $body .= "Arrotondamenti:\n"; $body .= "\n"; $body .= "".Translator::numberToLocale( -$sconto)." €\n"; $body .= "
\n"; $body .= "Totale scontato:\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_calcolato - $sconto)." €\n"; $body .= "

\n"; } // Conteggio articoli utilizzati $query = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=(SELECT idiva_vendita FROM mg_articoli WHERE id=idarticolo)) AS prciva_vendita, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento GROUP BY idintervento HAVING idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $totale_articoli = 0.00; for ($i = 0; $i < sizeof($rs2); ++$i) { // Articolo $body .= "\n"; // Quantità $qta = $rs2[$i]['sumqta']; $body .= "\n"; // Prezzo unitario $body .= "\n"; // Prezzo di vendita $body .= "\n"; $totale_articoli += $netto * $qta; } // Totale spesa articoli $body .= "\n"; $body .= "\n"; $body .= "
Materiale utilizzato per gli interventi
\n"; $body .= "Articolo\n"; $body .= "\n"; $body .= "Q.tà\n"; $body .= "\n"; $body .= "Prezzo unitario\n"; $body .= "\n"; $body .= "Subtot\n"; $body .= "
\n"; $body .= ''.nl2br($rs2[$i]['descrizione'])."\n"; if ($rs2[$i]['codice'] != '' && $rs2[$i]['codice'] != 'Lotto: , SN: , Altro: ') { $body .= '
'.$rs2[$i]['codice']."\n"; } $body .= '
Intervento '.$rs2[$i]['idintervento'].' del '.Translator::dateToLocale($rs2[$i]['data_intervento'])."\n"; $body .= "
\n"; $body .= ''.$rs2[$i]['sumqta']."\n"; $body .= "\n"; $netto = $rs2[$i]['prezzo_vendita']; $netto = $netto + $netto / 100 * $rs2[$i]['prc_guadagno']; $iva = $netto / 100 * $rs2[$i]['prciva_vendita']; $body .= ''.Translator::numberToLocale($netto)." €\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($netto * $qta)."\n"; $body .= "
\n"; $body .= "TOTALE MATERIALE UTILIZZATO:\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_articoli)." €\n"; $body .= "

\n"; } // Conteggio spese aggiuntive $query = 'SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_righe_interventi.idintervento GROUP BY idintervento HAVING idintervento=in_righe_interventi.idintervento ORDER BY orario_inizio) AS data_intervento FROM in_righe_interventi WHERE idintervento IN('.implode(',', $idinterventi).') ORDER BY id ASC'; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $body .= "\n"; $totale_spese = 0.00; for ($i = 0; $i < sizeof($rs2); ++$i) { // Articolo $body .= "\n"; // Quantità $qta = $rs2[$i]['qta']; $body .= "\n"; // Prezzo unitario $body .= "\n"; // Prezzo di vendita $body .= "\n"; $totale_spese += $netto * $qta; } // Totale spese aggiuntive $body .= "\n"; $body .= "\n"; $body .= "
Spese aggiuntive
\n"; $body .= "Descrizione\n"; $body .= "\n"; $body .= "Q.tà\n"; $body .= "\n"; $body .= "Prezzo unitario\n"; $body .= "\n"; $body .= "Subtot\n"; $body .= "
\n"; $body .= ''.$rs2[$i]['descrizione']."
\n"; $body .= 'Intervento '.$rs2[$i]['idintervento'].' del '.Translator::dateToLocale($rs2[$i]['data_intervento'])."\n"; $body .= "
\n"; $body .= ''.Translator::numberToLocale($rs2[$i]['qta'])."\n"; $body .= "\n"; $netto = $rs2[$i]['prezzo']; $body .= ''.Translator::numberToLocale($netto)." €\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($netto * $qta)." €\n"; $body .= "
\n"; $body .= "ALTRE SPESE:\n"; $body .= "\n"; $body .= ''.Translator::numberToLocale($totale_spese)." €\n"; $body .= "

\n"; } // Totale complessivo intervento $body .= "

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

\n"; $report_name = 'Riepilogo_interventi.pdf';