fetchArray($queryc);
for ($i = 0; $i < sizeof($rsc); ++$i) {
$colori[$rsc[$i]['idstatointervento']] = $rsc[$i]['colore'];
$stati[$rsc[$i]['idstatointervento']] = $rsc[$i]['descrizione'];
}
$totale_costo = 0;
$totale_addebito = 0;
$totale = 0;
$totale_stato = [];
// Tabella con riepilogo interventi
$rsi = $dbo->fetchArray('SELECT in_interventi.id, in_interventi.codice,
(SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio,
(SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore,
(SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km
FROM co_promemoria
INNER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id
WHERE co_promemoria.idcontratto='.prepare($id_record).'
UNION
SELECT in_interventi.id, in_interventi.codice,
(SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio,
(SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore,
(SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km
FROM in_interventi
WHERE id_contratto = '.prepare($id_record).'
ORDER BY id DESC');
if (!empty($rsi)) {
echo '
'.tr('Attività').' |
'.tr('Ore').' |
'.tr('Km').' |
'.tr('Costo').' |
'.tr('Addebito').' |
'.tr('Tot. scontato').' |
';
// Tabella con i dati
foreach ($rsi as $int) {
$int = array_merge($int, get_costi_intervento($int['id']));
$totale_stato[$int['idstatointervento']] = sum($totale_stato[$int['idstatointervento']], $int['totale_scontato']);
// Riga intervento singolo
echo '
'.Modules::link('Interventi', $int['id'], tr('Intervento _NUM_ del _DATE_', [
'_NUM_' => $int['codice'],
'_DATE_' => Translator::dateToLocale($int['inizio']),
])).'
|
'.Translator::numberToLocale($int['ore']).'
|
'.Translator::numberToLocale($int['km']).'
|
'.Translator::numberToLocale($int['totale_costo']).'
|
'.Translator::numberToLocale($int['totale_addebito']).'
|
'.Translator::numberToLocale($int['totale_scontato']).'
|
';
// Riga con dettagli
echo '
';
/**
* Lettura sessioni di lavoro.
*/
$rst = $dbo->fetchArray('SELECT in_interventi_tecnici.*, ragione_sociale FROM in_interventi_tecnici LEFT OUTER JOIN an_anagrafiche ON in_interventi_tecnici.idtecnico=an_anagrafiche.idanagrafica WHERE idintervento='.prepare($int['id']));
if (!empty($rst)) {
echo '
'.tr('Tecnico').' |
'.tr('Tipo attività').' |
'.tr('Ore').' |
'.tr('Km').' |
'.tr('Costo orario').' |
'.tr('Costo km').' |
'.tr('Diritto ch.').' |
'.tr('Costo addebitato').' |
'.tr('Prezzo km').' |
'.tr('Diritto ch.').' |
';
foreach ($rst as $r) {
// Visualizzo lo sconto su ore o km se c'è
$sconto_ore = ($r['sconto'] != 0) ? ' '.Translator::numberToLocale(-$r['sconto']).' €' : '';
$sconto_km = ($r['scontokm'] != 0) ? ' '.Translator::numberToLocale(-$r['scontokm']).' €' : '';
// Aggiungo lo sconto globale nel totale ore
if ($int['sconto_globale'] > 0) {
$sconto_ore .= ' '.Translator::numberToLocale(-$int['sconto_globale']).' €';
}
echo '
'.$r['ragione_sociale'].' |
'.$r['idtipointervento'].' |
'.Translator::numberToLocale($r['ore']).' |
'.Translator::numberToLocale($r['km']).' |
'.Translator::numberToLocale($r['prezzo_ore_consuntivo_tecnico']).' |
'.Translator::numberToLocale($r['prezzo_km_consuntivo_tecnico']).' |
'.Translator::numberToLocale($r['prezzo_dirittochiamata_tecnico']).' |
'.Translator::numberToLocale($r['prezzo_ore_consuntivo']).$sconto_ore.' |
'.Translator::numberToLocale($r['prezzo_km_consuntivo']).$sconto_km.' |
'.Translator::numberToLocale($r['prezzo_dirittochiamata']).' |
';
}
echo '
';
}
/**
* Lettura articoli utilizzati.
*/
$rst = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento='.prepare($int['id']));
if (!empty($rst)) {
echo '
'.tr('Materiale').' |
'.tr('Q.tà').' |
'.tr('Prezzo di acquisto').' |
'.tr('Prezzo di vendita').' |
';
foreach ($rst as $r) {
// Visualizzo lo sconto su ore o km se c'è
$sconto = ($r['sconto'] != 0) ? ' '.Translator::numberToLocale(-$r['sconto']).' €' : '';
echo '
'.Modules::link('Articoli', $r['idarticolo'], $r['descrizione']).(!empty($extra) ? ''.implode(', ', $extra).'' : '').'
|
'.Translator::numberToLocale($r['qta'], 'qta').' |
'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).' |
'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.' |
';
}
echo '
';
}
/**
* Lettura spese aggiuntive.
*/
$rst = $dbo->fetchArray('SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($int['id']));
if (!empty($rst)) {
echo '
'.tr('Altre spese').' |
'.tr('Q.tà').' |
'.tr('Prezzo di acquisto').' |
'.tr('Prezzo di vendita').' |
';
foreach ($rst as $r) {
// Visualizzo lo sconto su ore o km se c'è
$sconto = ($r['sconto'] != 0) ? ' '.Translator::numberToLocale(-$r['sconto']).' €' : '';
echo '
'.$r['descrizione'].'
|
'.Translator::numberToLocale($r['qta'], 'qta').' |
'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).' |
'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.' |
';
}
echo '
';
}
echo '
|
';
$totale_ore += $int['ore'];
$totale_km += $int['km'];
$totale_costo += $int['totale_costo'];
$totale_addebito += $int['totale_addebito'];
$totale += $int['totale_scontato'];
}
// Totali
echo '
'.tr('Totale').'
| ';
echo '
'.Translator::numberToLocale($totale_ore).'
| ';
echo '
'.Translator::numberToLocale($totale_km).'
| ';
echo '
'.Translator::numberToLocale($totale_costo).'
| ';
echo '
'.Translator::numberToLocale($totale_addebito).'
| ';
echo '
'.Translator::numberToLocale($totale).'
|
';
// Totali per stato
echo '
'.tr('Totale interventi per stato', [], ['upper' => true]).'
|
';
foreach ($totale_stato as $stato => $tot) {
echo '
|
'.$stati[$stato].':
|
'.Translator::numberToLocale($tot).'
|
';
}
echo '
';
}
/*
Bilancio del contratto
*/
$rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS budget FROM co_righe_contratti WHERE idcontratto='.prepare($id_record));
$budget = $rs[0]['budget'];
$rs = $dbo->fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe_contratti` WHERE um='ore' AND idcontratto=".prepare($id_record));
$contratto_tot_ore = $rs[0]['totale_ore'];
$diff = sum($budget, -$totale);
if ($diff > 0) {
$bilancio = '
'.tr('Rapporto budget/spesa').':
'.$bilancio.'
';
if (!empty($contratto_tot_ore)) {
echo '
'.tr('Ore residue').': |
'.Translator::numberToLocale(floatval($contratto_tot_ore) - floatval($totale_ore)).' |
'.tr('Ore erogate').': |
'.Translator::numberToLocale($totale_ore).' |
'.tr('Ore in contratto').': |
'.Translator::numberToLocale($contratto_tot_ore).' |
';
} else {
echo '
'.tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"').'.
';
}
echo '
';
/*
Stampa consuntivo
*/
echo '
'.Prints::getLink('Consuntivo contratto', $id_record, 'btn-primary', tr('Stampa consuntivo')).'
';