<?php include_once __DIR__.'/../../../core.php'; include_once Modules::filepath('Interventi', 'modutil.php'); /* CONSUNTIVO */ // Salvo i colori e gli stati degli stati intervento su un array $colori = []; $stati = []; $queryc = 'SELECT * FROM in_statiintervento'; $rsc = $dbo->fetchArray($queryc); for ($i = 0; $i < sizeof($rsc); ++$i) { $colori[$rsc[$i]['idstatointervento']] = $rsc[$i]['colore']; $stati[$rsc[$i]['idstatointervento']] = $rsc[$i]['descrizione']; } $budget = get_imponibile_preventivo($id_record); $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_preventivi_interventi INNER JOIN in_interventi ON co_preventivi_interventi.idintervento=in_interventi.id WHERE co_preventivi_interventi.idpreventivo='.prepare($id_record).' ORDER BY co_preventivi_interventi.idintervento DESC'); if (!empty($rsi)) { echo ' <table class="table table-bordered table-condensed"> <tr> <th>'.tr('Attività').'</th> <th width="100">'.tr('Ore').'</th> <th width="100">'.tr('Km').'</th> <th width="120">'.tr('Costo').'</th> <th width="120">'.tr('Addebito').'</th> <th width="120">'.tr('Tot. scontato').'</th> </tr>'; // 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']); // Riga intervento singolo echo ' <tr style="background:'.$colori[$int['idstatointervento']].';"> <td> <a href="javascript:;" class="btn btn-primary btn-xs" onclick="$(\'#dettagli_'.$int['id'].'\').toggleClass(\'hide\'); $(this).find(\'i\').toggleClass(\'fa-plus\').toggleClass(\'fa-minus\');"><i class="fa fa-plus"></i></a> '.Modules::link('Interventi', $int['id'], tr('Intervento num. _NUM_ del _DATE_', [ '_NUM_' => $int['codice'], '_DATE_' => Translator::dateToLocale($int['inizio']), ])).' </td> <td class="text-right"> '.Translator::numberToLocale($int['ore']).' </td> <td class="text-right"> '.Translator::numberToLocale($int['km']).' </td> <td class="text-right"> '.Translator::numberToLocale($int['totale_costo']).' </td> <td class="text-right"> '.Translator::numberToLocale($int['totale_addebito']).' </td> <td class="text-right"> '.Translator::numberToLocale($int['totale_scontato']).' </td> </tr>'; // Riga con dettagli echo ' <tr class="hide" id="dettagli_'.$int['id'].'"> <td colspan="6">'; /** * 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 ' <table class="table table-striped table-condensed table-bordered"> <tr> <th>'.tr('Tecnico').'</th> <th width="230">'.tr('Tipo attività').'</th> <th width="120">'.tr('Ore').'</th> <th width="120">'.tr('Km').'</th> <th width="120">'.tr('Costo orario').'</th> <th width="120">'.tr('Costo km').'</th> <th width="120">'.tr('Diritto ch.').'</th> <th width="120">'.tr('Prezzo orario').'</th> <th width="120">'.tr('Prezzo km').'</th> <th width="120">'.tr('Diritto ch.').'</th> </tr>'; foreach ($rst as $r) { // Visualizzo lo sconto su ore o km se c'è $sconto_ore = ($r['sconto'] != 0) ? '<br><span class="label label-danger">'.Translator::numberToLocale(-$r['sconto']).' €</span>' : ''; $sconto_km = ($r['scontokm'] != 0) ? '<br><span class="label label-danger">'.Translator::numberToLocale(-$r['scontokm']).' €</span>' : ''; // Aggiungo lo sconto globale nel totale ore if ($int['sconto_globale'] > 0) { $sconto_ore .= ' <span class="label label-danger">'.Translator::numberToLocale(-$int['sconto_globale']).' €</span>'; } echo ' <tr> <td>'.$r['ragione_sociale'].'</td> <td>'.$r['idtipointervento'].'</td> <td class="text-right">'.Translator::numberToLocale($r['ore']).'</td> <td class="text-right">'.Translator::numberToLocale($r['km']).'</td> <td class="text-right danger">'.Translator::numberToLocale($r['prezzo_ore_consuntivo_tecnico']).'</td> <td class="text-right danger">'.Translator::numberToLocale($r['prezzo_km_consuntivo_tecnico']).'</td> <td class="text-right danger">'.Translator::numberToLocale($r['prezzo_dirittochiamata_tecnico']).'</td> <td class="text-right success">'.Translator::numberToLocale($r['prezzo_ore_consuntivo']).$sconto_ore.'</td> <td class="text-right success">'.Translator::numberToLocale($r['prezzo_km_consuntivo']).$sconto_km.'</td> <td class="text-right success">'.Translator::numberToLocale($r['prezzo_dirittochiamata']).'</td> </tr>'; } echo ' </table>'; } /** * Lettura articoli utilizzati. */ $rst = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento='.prepare($int['id'])); if (!empty($rst)) { echo ' <table class="table table-striped table-condensed table-bordered"> <tr> <th>'.tr('Materiale').'</th> <th width="120">'.tr('Q.tà').'</th> <th width="150">'.tr('Prezzo di acquisto').'</th> <th width="150">'.tr('Prezzo di vendita').'</th> </tr>'; foreach ($rst as $r) { // Visualizzo lo sconto su ore o km se c'è $sconto = ($r['sconto'] != 0) ? '<br><span class="label label-danger">'.Translator::numberToLocale(-$r['sconto']).' €</span>' : ''; echo ' <tr> <td> '.Modules::link('Articoli', $r['idarticolo'], $r['descrizione']).(!empty($extra) ? '<small class="help-block">'.implode(', ', $extra).'</small>' : '').' </td> <td class="text-right">'.Translator::numberToLocale($r['qta'], 'qta').'</td> <td class="text-right danger">'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).'</td> <td class="text-right success">'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.'</td> </tr>'; } echo ' </table>'; } /** * Lettura spese aggiuntive. */ $rst = $dbo->fetchArray('SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($int['id'])); if (!empty($rst)) { echo ' <table class="table table-striped table-condensed table-bordered"> <tr> <th>'.tr('Altre spese').'</th> <th width="120">'.tr('Q.tà').'</th> <th width="150">'.tr('Prezzo di acquisto').'</th> <th width="150">'.tr('Prezzo di vendita').'</th> </tr>'; foreach ($rst as $r) { // Visualizzo lo sconto su ore o km se c'è $sconto = ($r['sconto'] != 0) ? '<br><span class="label label-danger">'.Translator::numberToLocale(-$r['sconto']).' €</span>' : ''; echo ' <tr> <td> '.$r['descrizione'].' </td> <td class="text-right">'.Translator::numberToLocale($r['qta'], 'qta').'</td> <td class="text-right danger">'.Translator::numberToLocale($r['prezzo_acquisto'] * $r['qta']).'</td> <td class="text-right success">'.Translator::numberToLocale($r['prezzo_vendita'] * $r['qta']).$sconto.'</td> </tr>'; } echo ' </table>'; } echo ' </td> </tr>'; $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> <td align="right"> <b><big>'.tr('Totale').'</big></b> </td>'; echo ' <td align="right"> <big><b>'.Translator::numberToLocale($totale_ore).'</b></big> </td>'; echo ' <td align="right"> <big><b>'.Translator::numberToLocale($totale_km).'</b></big> </td>'; echo ' <td align="right"> <big><b>'.Translator::numberToLocale($totale_costo).'</b></big> </td>'; echo ' <td align="right"> <big><b>'.Translator::numberToLocale($totale_addebito).'</b></big> </td>'; echo ' <td align="right"> <big><b>'.Translator::numberToLocale($totale).'</b></big> </td> </tr>'; // Totali per stato echo ' <tr> <td colspan="6"> <br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b> </td> </tr>'; foreach ($totale_stato as $stato => $tot) { echo ' <tr> <td colspan="3"></td> <td align="right" colspan="2" style="background:'.$colori[$stato].';"> <big><b>'.$stati[$stato].':</b></big> </td> <td align="right"> <big><b>'.Translator::numberToLocale($tot).'</b></big> </td> </tr>'; } echo ' </table>'; } /* Bilancio del preventivo */ $diff = sum($budget, -$totale_addebito); echo ' <div class="well text-center"> <br><span><big> <b>'.tr('Rapporto budget/spesa').':<br>'; if ($budget > $totale) { echo ' <span class="text-success"><big>+'.Translator::numberToLocale($diff).' €</big></span>'; } elseif ($diff < 0) { echo ' <span class="text-danger"><big>'.Translator::numberToLocale($diff).' €</big></span>'; } else { echo ' <span><big>'.Translator::numberToLocale($diff).' €</big></span>'; } echo ' </b></big></span> <br><br> </div>'; /* Stampa consuntivo */ echo ' <div class="text-center"> '.Prints::getLink('Consuntivo preventivo', $id_record, 'btn-primary', tr('Stampa consuntivo')).' </div>'; // Aggiunta interventi se il preventivo é aperto o in attesa o pagato (non si possono inserire interventi collegati ad altri preventivi) if (in_array($record['stato'], ['Accettato', 'In lavorazione', 'Pagato'])) { echo ' <form action="" method="post"> <input type="hidden" name="op" value="addintervento"> <input type="hidden" name="backto" value="record-edit"> <div class="row"> <div class="col-md-4"> {[ "type": "select", "label": "'.tr('Aggiungi un altro intervento a questo preventivo').'", "name": "idintervento", "values": "query=SELECT id, CONCAT(\'Intervento \', codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta), \'%d/%m/%Y\')) AS descrizione FROM in_interventi WHERE id NOT IN( SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN( SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN( SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL) AND idanagrafica='.prepare($record['idanagrafica']).'" ]} </div> </div> <!-- PULSANTI --> <div class="row"> <div class="col-md-12 text-right"> <button type="submit" class="btn btn-primary pull-right" onclick="if($(\'#idintervento\').val() && confirm(\'Aggiungere questo intervento al preventivo?\'){ $(this).parent().submit(); }"> <i class="fa fa-plus"></i> '.tr('Aggiungi').' </button> </div> </div> </form>'; }