fetchArray($queryc); for ($i = 0; $i < sizeof($rsc); ++$i) { $colori[$rsc[$i]['idstatointervento']] = $rsc[$i]['colore']; $stati[$rsc[$i]['idstatointervento']] = $rsc[$i]['descrizione']; } // Contenitore per i totali interventi per stato $totale_x_stato = []; // Interventi collegati $q = 'SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento = in_interventi.id) AS data, (SELECT costo_orario FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS costo_ore_unitario, (SELECT costo_km FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS costo_km_unitario, (SELECT SUM(costo_diritto_chiamata) FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS dirittochiamata, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS km, (SELECT SUM(prezzo_ore_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_ore_consuntivo`, (SELECT SUM(prezzo_km_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km_consuntivo` FROM co_righe_contratti INNER JOIN in_interventi ON co_righe_contratti.idintervento=in_interventi.id WHERE co_righe_contratti.idcontratto='.prepare($id_record).' ORDER BY data DESC'; $rscontratti = $dbo->fetchArray($q); $totale_ore = 0.0; $totale_km = 0.0; $totale = 0; $interventi = []; $ore = []; $km = []; $ntecnici = []; $tecnici = []; $costi_orari = []; $costi_km = []; $idinterventi = []; $tot_ore_consuntivo = []; $tot_km_consuntivo = []; $tot_diritto_chiamata = []; if (!empty($rscontratti)) { foreach ($rscontratti as $r) { $totale_ore = 0; $totale_km = 0; $totale_diritto_chiamata = 0; // Lettura numero tecnici collegati all'intervento $query = 'SELECT an_anagrafiche.idanagrafica, prezzo_ore_consuntivo, prezzo_km_consuntivo, prezzo_ore_unitario, prezzo_km_unitario, prezzo_dirittochiamata, ragione_sociale, orario_inizio, orario_fine, in_interventi_tecnici.km FROM in_interventi_tecnici LEFT OUTER JOIN an_anagrafiche ON in_interventi_tecnici.idtecnico=an_anagrafiche.idanagrafica WHERE idintervento='.prepare($r['id']); $rst = $dbo->fetchArray($query); $n_tecnici = sizeof($rst); $tecnici_full = ''; $t = 0; for ($j = 0; $j < $n_tecnici; ++$j) { $t1 = datediff('n', $rst[$j]['orario_inizio'], $rst[$j]['orario_fine']); $orario = ''; if (floatval($t1) > 0) { $orario .= date('d/m/Y H:i', strtotime($rst[$j]['orario_inizio'])).' - '.date('d/m/Y H:i', strtotime($rst[$j]['orario_fine'])); } $tecnici_full .= $rst[$j]['ragione_sociale'].' ('.$orario.')
'.Translator::numberToLocale($t1 / 60).'h x '.Translator::numberToLocale($rst[$j]['prezzo_ore_unitario']).' €/h
'.Translator::numberToLocale($rst[$j]['km']).'km x '.Translator::numberToLocale($rst[$j]['prezzo_km_unitario']).' km/h
'.Translator::numberToLocale($rst[$j]['prezzo_dirittochiamata']).'€ d.c.


'; // Conteggio ore totali $t += $t1 / 60; $totale_ore += $rst[$j]['prezzo_ore_consuntivo']; $totale_km += $rst[$j]['prezzo_km_consuntivo']; $totale_diritto_chiamata += $rst[$j]['prezzo_dirittochiamata']; } $totale_ore_impiegate += $t; $desc = nl2br($r['descrizione']); $line = Modules::link('Interventi', $r['id'], tr('Intervento _NUM_ del _DATE_', [ '_NUM_' => $r['codice'], '_DATE_' => Translator::dateToLocale($r['data']), ])).'
'.$desc; // Inutilizzati $contratti[] = $line; $tot_ore_consuntivo[] = $totale_ore; $tot_dirittochiamata[] = $totale_diritto_chiamata; $idinterventi[] = "'".$rscontrattii[0]['idintervento']."'"; $ntecnici[] = $n_tecnici; // Utilizzati $tot_km_consuntivo[] = $totale_km; $tecnici[] = $tecnici_full; $interventi[] = $line; } } // Tabella con riepilogo interventi e ore if (!empty($rscontratti)) { echo ' '; if ($stato == 'aperto' || $stato == 'in attesa') { echo ' '; } echo ' '; // Tabella con i dati for ($i = 0; $i < sizeof($interventi); ++$i) { echo ' '; echo ' '; $subtotale = $tot_ore_consuntivo[$i] + $km[$i] * $costo_km[$i] + $diritto_chiamata[$i]; echo ' '; if ($stato == 'Accettato' || $stato == 'In lavorazione') { echo " "; } echo ' '; $totale += $subtotale; $totale_x_stato[$r['idstatointervento']] += $subtotale; // Mostro gli articoli collegati a questo intervento $query = 'SELECT * FROM mg_articoli_interventi WHERE idintervento='.prepare($r['id']); $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { echo ' '; } /* Elenco righe di spese aggiuntive */ $query = 'SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($r['id']).' ORDER BY id ASC'; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { echo ' '; } } // Totali echo ' '; // Totali per stato echo ' '; foreach ($totale_x_stato as $stato => $tot) { echo ' '; } echo '
'.tr('Interventi').' '.tr('Tecnici').' '.tr('Subtotale contratto').'
'.$interventi[$i].' '.$tecnici[$i].' '.Translator::numberToLocale($subtotale).'
'; for ($j = 0; $j < sizeof($rs2); ++$j) { echo ' '; // Articolo echo ' '; // Q.tà echo ' '; // Prezzo di vendita echo ' '; // Subtotale consuntivo $netto = $rs2[$j]['prezzo_vendita'] * $rs2[$j]['qta']; echo ' '; $totale += $netto; $totale += $netto; $totale_x_stato[$r['idstatointervento']] += $netto; } echo '
'.tr('Articoli utilizzati').':
'.tr('Articolo').' '.tr('Q.tà').' '.tr('Prezzo unitario').' '.tr('Subtot').'
'.Modules::link('Articoli', $rs2[$j]['idarticolo'], $rs2[$j]['descrizione']); if ($rs2[$i]['lotto'] != '') { echo '
'.tr('Lotto').': '.$rs2[$i]['lotto']; } if ($rs2[$i]['serial'] != '') { echo '
'.tr('SN').': '.$rs2[$i]['serial']; } if ($rs2[$i]['altro'] != '') { echo '
'.$rs2[$i]['altro']; } echo '
'.Translator::numberToLocale($rs2[$j]['qta']).''.Translator::numberToLocale($rs2[$j]['prezzo_vendita']).''.Translator::numberToLocale($netto).'
'; // Righe for ($j = 0; $j < sizeof($rs2); ++$j) { echo ' '; // Descrizione echo ' '; // Quantità $qta = $rs2[$j]['qta']; echo ' '; // Prezzo unitario $netto = $rs2[$j]['prezzo']; echo ' '; // Prezzo totale $subtotale = $rs2[$j]['prezzo'] * $rs2[$j]['qta']; echo ' '; $totale += $subtotale; $totale += $subtotale; $totale_x_stato[$r['idstatointervento']] += $subtotale; } echo '
'.tr('Spese aggiuntive').':
'.tr('Descrizione').' '.tr('Q.tà').' '.tr('Prezzo unitario').' '.tr('Subtot').'
'.$rs2[$j]['descrizione'].''.Translator::numberToLocale($rs2[$j]['qta']).''.Translator::numberToLocale($netto).''.Translator::numberToLocale($subtotale).'
'.tr('Totale').' '.Translator::numberToLocale($totale).'

'.tr('Totale interventi per stato', [], ['upper' => true]).'
'.$stati[$stato].': '.Translator::numberToLocale($tot).'
'; } /* Bilancio del contratto */ $rs = $dbo->fetchArray('SELECT SUM(subtotale) AS budget FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record)); $budget = $rs[0]['budget']; $rs = $dbo->fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe2_contratti` WHERE um='ore' AND idcontratto=".prepare($id_record)); $contratto_tot_ore = $rs[0]['totale_ore']; $diff = Translator::numberToLocale(floatval($budget) - floatval($totale)); if ($diff > 0) { $bilancio = ''.$diff.' €'; } elseif ($diff < 0) { $bilancio = ''.$diff.' €'; } else { $bilancio = ''.$diff.' €'; } echo '
Rapporto budget/spesa:
'.$bilancio.'


'; $diff2 = Translator::numberToLocale(floatval($contratto_tot_ore) - floatval($totale_ore_impiegate)); echo ' Ore residue: '.$diff2.'
Ore erogate: '.Translator::numberToLocale($totale_ore_impiegate).'
Ore in contratto: '.Translator::numberToLocale($contratto_tot_ore).'
'; /* Stampa consuntivo */ echo '

'.tr('Stampa consuntivo').'
';