openstamanager/modules/contratti/plugins/contratti.consuntivo.php

310 lines
11 KiB
PHP
Raw Normal View History

<?php
include_once __DIR__.'/../../../core.php';
2018-06-26 09:41:43 +02:00
2020-02-14 17:02:16 +01:00
use Modules\Interventi\Intervento;
// Tabella con riepilogo interventi
2020-02-14 17:02:16 +01:00
$interventi = Intervento::where('id_contratto', $id_record)->get();
if (!empty($interventi)) {
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
2020-02-14 17:02:16 +01:00
foreach ($interventi as $intervento) {
// Riga per il singolo intervento
echo '
2020-02-14 17:02:16 +01:00
<tr style="background:'.$intervento->stato->colore.';">
<td>
2020-02-14 17:02:16 +01:00
<a href="javascript:;" class="btn btn-primary btn-xs" onclick="$(\'#dettagli_'.$intervento->id.'\').toggleClass(\'hide\'); $(this).find(\'i\').toggleClass(\'fa-plus\').toggleClass(\'fa-minus\');"><i class="fa fa-plus"></i></a>
'.Modules::link('Interventi', $intervento->id, tr('Intervento num. _NUM_ del _DATE_', [
'_NUM_' => $intervento->codice,
'_DATE_' => Translator::dateToLocale($intervento->inizio),
])).'
</td>
<td class="text-right">
2020-02-14 17:02:16 +01:00
'.numberFormat($intervento->ore_totali).'
</td>
<td class="text-right">
2020-02-14 17:02:16 +01:00
'.numberFormat($intervento->km_totali).'
</td>
<td class="text-right">
2020-02-14 17:02:16 +01:00
'.moneyFormat($intervento->spesa).'
</td>
<td class="text-right">
2020-02-14 17:02:16 +01:00
'.moneyFormat($intervento->imponibile).'
</td>
<td class="text-right">
2020-02-14 17:02:16 +01:00
'.moneyFormat($intervento->totale_imponibile).'
</td>
</tr>';
// Riga con dettagli
echo '
2020-02-14 17:02:16 +01:00
<tr class="hide" id="dettagli_'.$intervento->id.'">
<td colspan="6">';
2020-02-14 17:02:16 +01:00
// Lettura sessioni di lavoro
$sessioni = $intervento->sessioni;
if (!empty($sessioni)) {
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 ore').'</th>
<th width="120">'.tr('Costo km').'</th>
<th width="120">'.tr('Diritto ch.').'</th>
<th width="120">'.tr('Prezzo ore').'</th>
<th width="120">'.tr('Prezzo km').'</th>
<th width="120">'.tr('Diritto ch.').'</th>
</tr>';
2020-02-14 17:02:16 +01:00
foreach ($sessioni as $sessione) {
// Visualizzo lo sconto su ore o km se c'è
2020-02-14 17:02:16 +01:00
$sconto_ore = !empty($sessione->sconto_totale_manodopera) ? '<br><span class="label label-danger">'.moneyFormat(-$sessione->sconto_totale_manodopera).'</span>' : '';
$sconto_km = !empty($sessione->sconto_totale_viaggio) ? '<br><span class="label label-danger">'.moneyFormat(-$sessione->sconto_totale_viaggio).'</span>' : '';
echo '
<tr>
2020-02-14 17:02:16 +01:00
<td>'.$sessione->anagrafica->ragione_sociale.'</td>
<td>'.$sessione->tipo->descrizione.'</td>
<td class="text-right">'.numberFormat($sessione->ore).'</td>
<td class="text-right">'.numberFormat($sessione->km).'</td>
<td class="text-right danger">'.moneyFormat($sessione->costo_manodopera).'</td>
<td class="text-right danger">'.moneyFormat($sessione->costo_viaggio).'</td>
<td class="text-right danger">'.moneyFormat($sessione->costo_diritto_chiamata).'</td>
<td class="text-right success">'.moneyFormat($sessione->prezzo_manodopera).$sconto_ore.'</td>
<td class="text-right success">'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.'</td>
<td class="text-right success">'.moneyFormat($sessione->prezzo_diritto_chiamata).'</td>
</tr>';
}
echo '
</table>';
}
2020-02-14 17:02:16 +01:00
// Lettura articoli utilizzati
$articoli = $intervento->articoli;
if (!$articoli->isEmpty()) {
echo '
<table class="table table-striped table-condensed table-bordered">
<tr>
<th>'.tr('Materiale').'</th>
<th width="120">'.tr('Q.').'</th>
<th width="150">'.tr('Prezzo di acquisto').'</th>
<th width="150">'.tr('Prezzo di vendita').'</th>
</tr>';
2020-02-14 17:02:16 +01:00
foreach ($articoli as $articolo) {
$sconto = !empty($articolo->sconto) ? '<br><span class="label label-danger">'.moneyFormat(-$articolo->sconto).'</span>' : '';
echo '
<tr>
<td>
2020-02-14 17:02:16 +01:00
'.Modules::link('Articoli', $articolo->idarticolo, $articolo->descrizione).'
</td>
2020-02-14 17:02:16 +01:00
<td class="text-right">'.numberFormat($articolo->qta, 'qta').'</td>
<td class="text-right danger">'.moneyFormat($articolo->spesa).'</td>
<td class="text-right success">'.moneyFormat($articolo->imponibile).$sconto.'</td>
</tr>';
}
echo '
</table>';
}
2020-02-14 17:02:16 +01:00
// Lettura spese aggiuntive
$righe = $intervento->righe;
if (!$righe->isEmpty()) {
echo '
<table class="table table-striped table-condensed table-bordered">
<tr>
<th>'.tr('Altre spese').'</th>
<th width="120">'.tr('Q.').'</th>
<th width="150">'.tr('Prezzo di acquisto').'</th>
<th width="150">'.tr('Prezzo di vendita').'</th>
</tr>';
2020-02-14 17:02:16 +01:00
foreach ($righe as $riga) {
$sconto = !empty($riga->sconto) ? '<br><span class="label label-danger">'.moneyFormat(-$riga->sconto).'</span>' : '';
echo '
<tr>
<td>
2020-02-14 17:02:16 +01:00
'.$riga->descrizione.'
</td>
2020-02-14 17:02:16 +01:00
<td class="text-right">'.numberFormat($riga->qta, 'qta').'</td>
<td class="text-right danger">'.moneyFormat($riga->spesa).'</td>
<td class="text-right success">'.moneyFormat($riga->imponibile).$sconto.'</td>
</tr>';
}
echo '
</table>';
}
echo '
</td>
</tr>';
}
2020-02-14 17:02:16 +01:00
$array_interventi = $interventi->toArray();
$totale_ore = sum(array_column($array_interventi, 'ore_totali'));
$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'));
// Totali
echo '
<tr>
<td align="right">
<b><big>'.tr('Totale').'</big></b>
</td>';
echo '
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.numberFormat($totale_ore).'</b></big>
</td>';
echo '
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.numberFormat($totale_km).'</b></big>
</td>';
echo '
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.moneyFormat($totale_costo).'</b></big>
</td>';
echo '
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.moneyFormat($totale_addebito).'</b></big>
</td>';
echo '
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.moneyFormat($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>';
2020-02-14 17:02:16 +01:00
$stati = $interventi->groupBy('idstatointervento');
foreach ($stati as $interventi_collegati) {
$stato = $interventi_collegati->first()->stato;
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
echo '
<tr>
<td colspan="3"></td>
2020-02-14 17:02:16 +01:00
<td align="right" colspan="2" style="background:'.$stato->colore.';">
<big><b>'.$stato->descrizione.':</b></big>
</td>
<td align="right">
2020-02-14 17:02:16 +01:00
<big><b>'.moneyFormat($totale_stato).'</b></big>
</td>
</tr>';
}
echo '
</table>';
}
/*
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));
2019-03-08 17:24:48 +01:00
$totale_ore_contratto = $rs[0]['totale_ore'];
2018-11-22 15:34:44 +01:00
$diff = sum($budget, -$totale);
if ($diff > 0) {
$bilancio = '<span class="text-success"><big>'.moneyFormat($diff).'</big></span>';
} elseif ($diff < 0) {
$bilancio = '<span class="text-danger"><big>'.moneyFormat($diff).'</big></span>';
} else {
$bilancio = '<span><big>'.moneyFormat($diff).'</big></span>';
}
echo '
<div class="well text-center">
<big>
<b>'.tr('Rapporto budget/spesa').'</b>:<br>
'.$bilancio.'
</big>
<br><br>';
2019-03-08 17:24:48 +01:00
if (!empty($totale_ore_contratto)) {
echo '
<div class="row">
2019-03-08 17:24:48 +01:00
<big class="col-md-4 col-md-offset-4 text-center">
<table class="table text-left">
<tr>
2019-03-08 17:24:48 +01:00
<td colspan="2">'.tr('Ore in contratto').':</td>
<td colspan="2" class="text-right">'.Translator::numberToLocale($totale_ore_contratto).'</td>
</tr>
2020-02-14 17:02:16 +01:00
<tr>
2019-03-08 17:24:48 +01:00
<td>'.tr('Ore erogate totali').':</td>
<td class="text-right">'.Translator::numberToLocale($totale_ore_interventi).'</td>
2020-02-14 17:02:16 +01:00
2019-03-08 17:24:48 +01:00
<td>'.tr('Ore residue totali').':</td>
<td class="text-right">'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore_interventi)).'</td>
</tr>
<tr>
2019-03-08 17:24:48 +01:00
<td>'.tr('Ore erogate concluse').':</td>
<td class="text-right">'.Translator::numberToLocale($totale_ore_completate).'</td>
2020-02-14 17:02:16 +01:00
2019-03-08 17:24:48 +01:00
<td>'.tr('Ore residue').':</td>
<td class="text-right">'.Translator::numberToLocale(floatval($totale_ore_contratto) - floatval($totale_ore_completate)).'</td>
</tr>
</table>
</big>
</div>';
} else {
echo '
<div class="alert alert-info">
<p>'.tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"').'.</p>
</div>';
}
echo '
</div>';
/*
Stampa consuntivo
*/
echo '
<div class="text-center">
'.Prints::getLink('Consuntivo contratto', $id_record, 'btn-primary', tr('Stampa consuntivo')).'
</div>';