. */ include_once __DIR__.'/../../../core.php'; use Modules\Interventi\Intervento; // Tabella con riepilogo interventi $interventi = Intervento::where('id_preventivo', $id_record)->get(); if (!empty($interventi)) { echo ' '; // Tabella con i dati foreach ($interventi as $intervento) { // Riga per il singolo intervento echo ' '; // Riga con dettagli echo ' '; } $array_interventi = $interventi->toArray(); $totale_km = sum(array_column($array_interventi, 'km_totali')); $totale_costo = sum(array_column($array_interventi, 'spesa')); $totale_addebito = sum(array_column($array_interventi, 'imponibile')); $totale = sum(array_column($array_interventi, 'totale_imponibile')); $totale_ore = sum(array_column($array_interventi, 'ore_totali')); // Totali echo ' '; echo ' '; echo ' '; echo ' '; echo '
'.tr('Attività').' '.tr('Ore').' '.tr('Km').' '.tr('Costo').' '.tr('Tot. scontato').'
'.Modules::link('Interventi', $intervento->id, tr('Intervento num. _NUM_ del _DATE_', [ '_NUM_' => $intervento->codice, '_DATE_' => Translator::dateToLocale($intervento->inizio), ])).' '.numberFormat($intervento->ore_totali).' '.numberFormat($intervento->km_totali).' '.moneyFormat($intervento->spesa).' '.moneyFormat($intervento->totale_imponibile).'
'; // Lettura sessioni di lavoro $sessioni = $intervento->sessioni; if (!empty($sessioni)) { echo ' '; foreach ($sessioni as $sessione) { // Visualizzo lo sconto su ore o km se c'è $sconto_ore = !empty($sessione->sconto_totale_manodopera) ? '
'.moneyFormat(-$sessione->sconto_totale_manodopera).'' : ''; $sconto_km = !empty($sessione->sconto_totale_viaggio) ? '
'.moneyFormat(-$sessione->sconto_totale_viaggio).'' : ''; echo ' '; // Raggruppamento per tipologia descrizione $tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore; $tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; $tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; // Raggruppamento per tecnico $tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore; $tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km; $tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; // Raggruppamento per stato intervento $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; } echo '
'.tr('Tecnico').' '.tr('Tipo attività').' '.tr('Ore').' '.tr('Km').' '.tr('Costo ore').' '.tr('Costo km').' '.tr('Diritto ch.').' '.tr('Prezzo ore').' '.tr('Prezzo km').' '.tr('Diritto ch.').'
'.$sessione->anagrafica->ragione_sociale.' '.$sessione->tipo->descrizione.' '.numberFormat($sessione->ore).' '.numberFormat($sessione->km).' '.moneyFormat($sessione->costo_manodopera).' '.moneyFormat($sessione->costo_viaggio).' '.moneyFormat($sessione->costo_diritto_chiamata).' '.moneyFormat($sessione->prezzo_manodopera).$sconto_ore.' '.moneyFormat($sessione->prezzo_viaggio).$sconto_km.' '.moneyFormat($sessione->prezzo_diritto_chiamata).'
'; } // Lettura articoli utilizzati $articoli = $intervento->articoli; if (!$articoli->isEmpty()) { echo ' '; foreach ($articoli as $articolo) { $sconto = !empty($articolo->sconto) ? '
'.moneyFormat(-$articolo->sconto).'' : ''; echo ' '; // Raggruppamento per categoria articolo $materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa; $materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto; } echo '
'.tr('Materiale').' '.tr('Q.tà').' '.tr('Prezzo di acquisto').' '.tr('Prezzo di vendita').'
'.Modules::link('Articoli', $articolo->idarticolo, $articolo->descrizione).' '.numberFormat($articolo->qta, 'qta').' '.moneyFormat($articolo->spesa).' '.moneyFormat($articolo->imponibile).$sconto.'
'; } // Lettura spese aggiuntive $righe = $intervento->righe; if (!$righe->isEmpty()) { echo ' '; foreach ($righe as $riga) { $sconto = !empty($riga->sconto) ? '
'.moneyFormat(-$riga->sconto).'' : ''; echo ' '; } echo '
'.tr('Altre spese').' '.tr('Q.tà').' '.tr('Prezzo di acquisto').' '.tr('Prezzo di vendita').'
'.$riga->descrizione.' '.numberFormat($riga->qta, 'qta').' '.moneyFormat($riga->spesa).' '.moneyFormat($riga->imponibile).$sconto.'
'; } echo '
'.tr('Totale').' '.numberFormat($totale_ore).' '.numberFormat($totale_km).' '.moneyFormat($totale_costo).' '.moneyFormat($totale).'
'; } // Bilancio del preventivo $budget = $preventivo->totale_imponibile; $diff = sum($budget, -$totale); echo '

'.tr('Rapporto budget/spesa').':
'; if ($diff > 0) { echo ' +'.moneyFormat($diff).''; } elseif ($diff < 0) { echo ' '.moneyFormat($diff).''; } else { echo ' '.moneyFormat($diff).''; } echo '


'; ksort($tipologie); foreach ($tipologie as $key => $tipologia){ $margine = $tipologia['ricavo'] - $tipologia['costo']; $margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100; echo ' '; } echo '
'.tr('Tipologia').' '.tr('Ore').' '.tr('Costo').' '.tr('Ricavo').' '.tr('Margine').'
'.$key.' '.Translator::numberToLocale($tipologia['ore']).' '.Translator::numberToLocale($tipologia['costo']).' € '.Translator::numberToLocale($tipologia['ricavo']).' € '.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
'; ksort($tecnici); foreach ($tecnici as $key => $tecnico){ $margine = $tecnico['ricavo'] - $tecnico['costo']; $margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100; echo ' '; } echo '
'.tr('Tecnici').' '.tr('Ore').' '.tr('km').' '.tr('Costo').' '.tr('Ricavo').' '.tr('Margine').'
'.$key.' '.Translator::numberToLocale($tecnico['ore']).' '.(int)$tecnico['km'].' '.Translator::numberToLocale($tecnico['costo']).' € '.Translator::numberToLocale($tecnico['ricavo']).' € '.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
'; ksort($stati_intervento); foreach ($stati_intervento as $key => $stato){ $margine = $stato['ricavo'] - $stato['costo']; $margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100; echo ' '; } echo '
'.tr('Stato').' '.tr('Ore').' '.tr('Costo').' '.tr('Ricavo').' '.tr('Margine').'
'.$key.'
'.Translator::numberToLocale($stato['ore']).' '.Translator::numberToLocale($stato['costo']).' € '.Translator::numberToLocale($stato['ricavo']).' € '.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
'; ksort($materiali); foreach ($materiali as $key => $materiale){ $margine = $materiale['ricavo'] - $materiale['costo']; $margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; echo ' '; } echo '
'.tr('Materiale').' '.tr('Costo').' '.tr('Ricavo').' '.tr('Margine').'
'.$key.' '.Translator::numberToLocale($materiale['costo']).' € '.Translator::numberToLocale($materiale['ricavo']).' € '.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
'; /* Stampa consuntivo */ echo '
'.Prints::getLink('Consuntivo preventivo', $id_record, 'btn-primary', tr('Stampa consuntivo')).'
'; // 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 '
{[ "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_preventivo IS 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']).'" ]}
'; }