Aggiornamento della stampa degli interventi

Miglioramento della stampa degli interventi, ora generata attraverso il nuovo sistema (libreria mPDF).
This commit is contained in:
Thomas Zilio 2017-09-11 13:08:50 +02:00
parent 585290e011
commit 812f275beb
13 changed files with 345 additions and 454 deletions

View File

@ -159,7 +159,7 @@ switch (post('op')) {
$iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile'];
$desc_iva = $rs2[0]['descrizione'];
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto) VALUES ('.prepare($id_record).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
$dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, `order`) VALUES ('.prepare($id_record).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))');
$_SESSION['infos'][] = tr('Articolo aggiunto!');
@ -229,6 +229,21 @@ switch (post('op')) {
}
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
if ($start > $end) {
$dbo->query('UPDATE `co_righe2_contratti` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idcontratto`='.prepare($id_record));
$dbo->query('UPDATE `co_righe2_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
} elseif ($end != $start) {
$dbo->query('UPDATE `co_righe2_contratti` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idcontratto`='.prepare($id_record));
$dbo->query('UPDATE `co_righe2_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
}
break;
// eliminazione contratto
case 'delete':
$dbo->query('DELETE FROM co_contratti WHERE id='.prepare($id_record));

View File

@ -11,96 +11,105 @@ $totale_da_evadere = 0.00;
/*
ARTICOLI
*/
$q_art = 'SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record);
$rs_art = $dbo->fetchArray($q_art);
$rs_art = $dbo->fetchArray('SELECT * FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY `order`');
$imponibile_art = 0.0;
$iva_art = 0.0;
echo '
<table class="table table-striped table-hover table-condensed">
<tr>
<th>'.tr('Descrizione').'</th>
<th width="10%" class="text-center">'.tr('Q.').'</th>
<th width="10%" class="text-center">'.tr('U.m.').'</th>
<th width="12%" class="text-center">'.tr('Costo unitario').'</th>
<th width="12%" class="text-center">'.tr('Iva').'</th>
<th width="10%" class="text-center">'.tr('Imponibile').'</th>
<th width="80"></th>
</tr>';
<thead>
<tr>
<th>'.tr('Descrizione').'</th>
<th width="10%" class="text-center">'.tr('Q.').'</th>
<th width="10%" class="text-center">'.tr('U.m.').'</th>
<th width="12%" class="text-center">'.tr('Costo unitario').'</th>
<th width="12%" class="text-center">'.tr('Iva').'</th>
<th width="10%" class="text-center">'.tr('Imponibile').'</th>
<th width="80"></th>
</tr>
</thead>
<tbody class="sortable">';
// se ho almeno un articolo caricato mostro la riga
if (!empty($rs_art)) {
foreach ($rs_art as $r) {
// descrizione
echo '
<tr>
<td>
'.nl2br($r['descrizione']).'
</td>';
<tr data-id="'.$r['id'].'">
<td>
'.nl2br($r['descrizione']).'
</td>';
// q.tà
echo '
<td class="text-center">
'.Translator::numberToLocale($r['qta']).'
</td>';
<td class="text-center">
'.Translator::numberToLocale($r['qta']).'
</td>';
// um
echo '
<td class="text-center">
'.$r['um'].'
</td>';
<td class="text-center">
'.$r['um'].'
</td>';
// costo unitario
echo '
<td class="text-center">
'.Translator::numberToLocale($r['subtotale'] / $r['qta']).' &euro;
</td>';
<td class="text-center">
'.Translator::numberToLocale($r['subtotale'] / $r['qta']).' &euro;
</td>';
// iva
echo '
<td class="text-right">
'.Translator::numberToLocale($r['iva'])." &euro;<br>
<small class='help-block'>".$r['desc_iva'].'</small>
</td>';
<td class="text-right">
'.Translator::numberToLocale($r['iva'])." &euro;<br>
<small class='help-block'>".$r['desc_iva'].'</small>
</td>';
// Imponibile
echo '
<td class="text-right">
'.Translator::numberToLocale($r['subtotale']).' &euro;';
<td class="text-right">
'.Translator::numberToLocale($r['subtotale']).' &euro;';
if ($r['sconto_unitario'] > 0) {
echo '
<br><small class="label label-danger">- sconto '.Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
<br><small class="label label-danger">- sconto '.Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
}
echo '
</td>';
</td>';
// Possibilità di rimuovere una riga solo se il preventivo non è stato pagato
echo '
<td class="text-center">';
<td class="text-center">';
if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
echo '
<form action="'.$rootdir.'/editor.php?id_module='.Modules::getModule('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="id_record" value="'.$id_record.'">
<input type="hidden" name="op" value="delriga">
<input type="hidden" name="idriga" value="'.$r['id'].'">
<input type="hidden" name="idarticolo" value="'.$r['idarticolo'].'">
<form action="'.$rootdir.'/editor.php?id_module='.Modules::getModule('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="id_record" value="'.$id_record.'">
<input type="hidden" name="op" value="delriga">
<input type="hidden" name="idriga" value="'.$r['id'].'">
<input type="hidden" name="idarticolo" value="'.$r['idarticolo'].'">
<div class="btn-group">';
<div class="btn-group">';
echo "
<a class='btn btn-xs btn-warning' onclick=\"launch_modal('Modifica riga', '".$rootdir.'/modules/contratti/add_riga.php?idcontratto='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a href='javascript:;' class='btn btn-xs btn-danger' title='Rimuovi questa riga' onclick=\"if( confirm('Rimuovere questa riga dal contratto?') ){ $('#delete-form-".$r['id']."').submit(); }\"><i class='fa fa-trash'></i></a>";
<a class='btn btn-xs btn-warning' onclick=\"launch_modal('Modifica riga', '".$rootdir.'/modules/contratti/add_riga.php?idcontratto='.$id_record.'&idriga='.$r['id']."', 1 );\"><i class='fa fa-edit'></i></a>
<a href='javascript:;' class='btn btn-xs btn-danger' title='Rimuovi questa riga' onclick=\"if( confirm('Rimuovere questa riga dal contratto?') ){ $('#delete-form-".$r['id']."').submit(); }\"><i class='fa fa-trash'></i></a>";
echo '
</div>
</form>';
</div>
</form>';
}
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>
</div>';
}
echo '
</td>
</tr>';
</td>
</tr>';
$iva_art += $r['iva'];
$imponibile_art += $r['subtotale'] - $r['sconto'];
@ -109,6 +118,9 @@ if (!empty($rs_art)) {
}
}
echo '
</tbody>';
// SCONTO
if (abs($sconto_art) > 0) {
// Totale imponibile scontato
@ -185,3 +197,31 @@ echo '
echo '
</table>';
echo '
<script>
$(document).ready(function(){
$(".sortable").each(function() {
$(this).sortable({
axis: "y",
handle: ".handle",
cursor: "move",
dropOnEmpty: true,
scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) {
$.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"),
id_module: '.$id_module.',
id_record: '.$id_record.',
op: "update_position",
start: ui.item.data("start"),
end: ui.item.index()
});
}
});
});
});
</script>';

View File

@ -34,7 +34,7 @@ echo '
$rs = $dbo->fetchArray('SELECT in_interventi.id, CONCAT(\'Intervento numero \', 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, IF(idclientefinale='.prepare($idanagrafica).', \'Interventi conto terzi\', \'Interventi diretti\') AS `optgroup`FROM in_interventi WHERE (idanagrafica='.prepare($idanagrafica).' OR idclientefinale='.prepare($idanagrafica).') AND NOT idstatointervento=\'DENY\' AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND NOT in_interventi.id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND NOT in_interventi.id IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)');
foreach ($rs as $key => $value) {
$rs[$key]['prezzo'] = get_costi_intervento($value['id'])['totale_manodopera'];
$rs[$key]['prezzo'] = get_costi_intervento($value['id'])['totale'];
}
// Intervento

View File

@ -94,7 +94,12 @@ echo '
</div>';
echo '
<button type="submit" class="btn btn-primary pull-right">'.$button.'</button>
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary pull-right">'.$button.'</button>
</div>
</div>
</form>';
echo '

View File

@ -55,7 +55,7 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
<th>'.tr('Totale', [], ['upper' => true]).'</th>
<th class="text-right">'.Translator::numberToLocale($costi['totale_costi']).' &euro;</th>
<th class="text-right">'.Translator::numberToLocale($costi['totale_addebito']).' &euro;</th>
<th class="text-right">'.Translator::numberToLocale($costi['totale_manodopera']).' &euro;</th>
<th class="text-right">'.Translator::numberToLocale($costi['totale']).' &euro;</th>
</tr>
</table>';
}

View File

@ -186,7 +186,7 @@ function get_costi_intervento($id_intervento)
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.')
), 0) AS ricambi_addebito,
COALESCE(SUM(
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') * ROUND(qta, '.$decimals.')
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.')
), 0) AS ricambi_scontato
FROM mg_articoli_interventi WHERE idintervento='.prepare($id_intervento));
@ -199,7 +199,7 @@ function get_costi_intervento($id_intervento)
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.')
), 0) AS altro_addebito,
COALESCE(SUM(
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') * ROUND(qta, '.$decimals.')
ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.')
), 0) AS altro_scontato
FROM in_righe_interventi WHERE idintervento='.prepare($id_intervento));
@ -220,7 +220,7 @@ function get_costi_intervento($id_intervento)
$result['altro_addebito'],
]);
$totale_manodopera = sum([
$result['totale_scontato'] = sum([
$result['manodopera_scontato'],
$result['viaggio_scontato'],
$result['ricambi_scontato'],
@ -229,10 +229,10 @@ function get_costi_intervento($id_intervento)
// Calcolo dello sconto globale
$sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_intervento))[0];
$result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $totale_manodopera * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale'];
$result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $result['totale_scontato'] * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale'];
$result['sconto_globale'] = round($result['sconto_globale'], $decimals);
$result['totale_manodopera'] = sum($totale_manodopera, -$result['sconto_globale']);
$result['totale'] = sum($result['totale_scontato'], -$result['sconto_globale']);
return $result;
}

View File

@ -42,7 +42,7 @@ if (!empty($rsi)) {
// 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_manodopera']);
$totale_stato[$int['idstatointervento']] = sum($totale_stato[$int['idstatointervento']], $int['totale']);
// Riga intervento singolo
echo '

View File

@ -47,7 +47,7 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
Permissions::check();
// Operazioni di sostituzione
include $docroot.'/templates/pdfgen_variables.php';
include $docroot.'/templates/info.php';
// Generazione dei contenuti della stampa
ob_start();

View File

@ -93,6 +93,10 @@ table.table-bordered th {
background: #ddd;
}
table.table-bordered thead tr:nth-child(2) th {
background: #eee;
}
#contents th {
font-size: 80%;
}
@ -107,3 +111,7 @@ table.table-bordered td,
table.table-bordered th {
border: 1px solid #aaa;
}
td.middle {
vertical-align: middle !important;
}

View File

@ -112,7 +112,7 @@ foreach ($rs_gen as $r) {
if ($r['perc_iva'] > 0) {
echo '
'.$r['perc_iva'];
'.Translator::numberToLocale($r['perc_iva'], 2);
}
echo '

View File

@ -120,7 +120,7 @@ foreach ($righe as $r) {
<td class='text-center'>";
if ($r['perc_iva'] > 0) {
echo '
'.$r['perc_iva'];
'.Translator::numberToLocale($r['perc_iva'], 2);
}
echo '
</td>

View File

@ -12,53 +12,53 @@ $report_name = 'intervento_'.$idintervento.'.pdf';
echo '
<table class="table table-bordered">
<tr>
<th colspan="4" style="dont-size:14pt;" class="text-center">RAPPORTO OPERAZIONI E INTERVENTI</th>
<th colspan="4" style="font-size:14pt;" class="text-center">'.tr('Rapporto operazioni e interventi', [], ['upper' => true]).'</th>
</tr>
<tr>
<td class="text-center" style="width:40%">Intervento numero: <b>'.$records[0]['codice'].'</b></td>
<td class="text-center" style="width:20%">Data: <b>'.Translator::dateToLocale($records[0]['data_richiesta']).'</b></td>
<td class="text-center" style="width:20%">Preventivo N<sup>o</sup>: <b>'.$records[0]['numero_preventivo'].'</b></td>
<td class="text-center" style="width:20%">Contratto N<sup>o</sup>: <b>'.$records[0]['numero_contratto'].'</b></td>
<td class="text-center" style="width:40%">'.tr('Intervento numero').': <b>'.$records[0]['codice'].'</b></td>
<td class="text-center" style="width:20%">'.tr('Data').': <b>'.Translator::dateToLocale($records[0]['data_richiesta']).'</b></td>
<td class="text-center" style="width:20%">'.tr('Preventivo N<sup>o</sup>').': <b>'.$records[0]['numero_preventivo'].'</b></td>
<td class="text-center" style="width:20%">'.tr('Contratto N<sup>o</sup>').': <b>'.$records[0]['numero_contratto'].'</b></td>
</tr>';
// Dati cliente
// Dati cliente
echo '
<tr>
<td colspan=3>
Cliente: <b>'.$c_ragionesociale.'</b>
'.tr('Cliente').': <b>'.$c_ragionesociale.'</b>
</td>';
//Codice fiscale
// Codice fiscale
echo '
<td>
P.iva: <b>'.strtoupper($c_piva).'</b>
'.tr('P.Iva').': <b>'.strtoupper($c_piva).'</b>
</td>
</tr>';
//riga 2
// riga 2
echo '
<tr>
<td colspan="4">
Via: <b>'.$c_indirizzo.'</b> -
Cap: <b>'.$c_cap.'</b> -
Comune: <b>'.$c_citta.' ('.strtoupper($c_provincia).')</b>
'.tr('Via').': <b>'.$c_indirizzo.'</b> -
'.tr('CAP').': <b>'.$c_cap.'</b> -
'.tr('Comune').': <b>'.$c_citta.' ('.strtoupper($c_provincia).')</b>
</td>
</tr>';
echo '
<tr>
<td colspan="4">
Telefono: <b>'.$c_telefono.'</b>';
'.tr('Telefono').': <b>'.$c_telefono.'</b>';
if (!empty($c_cellulare)) {
echo' - Cellulare: <b>'.$c_cellulare.'</b>';
echo' - '.tr('Cellulare').': <b>'.$c_cellulare.'</b>';
}
echo '
</td>
</tr>';
//riga 3
//Elenco impianti su cui è stato fatto l'intervento
// riga 3
// Elenco impianti su cui è stato fatto l'intervento
$rs2 = $dbo->fetchArray('SELECT *, (SELECT nome FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS nome, (SELECT matricola FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS matricola FROM my_impianti_interventi WHERE idintervento='.prepare($idintervento));
$impianti = [];
for ($j = 0; $j < sizeof($rs2); ++$j) {
@ -67,146 +67,111 @@ for ($j = 0; $j < sizeof($rs2); ++$j) {
echo '
<tr>
<td colspan="4">
Impianti: '.implode(', ', $impianti).'
'.tr('Impianti').': '.implode(', ', $impianti).'
</td>
</tr>';
if (!empty($records[0]['richiesta'])) {
//Richiesta
echo '
// Richiesta
echo '
<tr>
<td colspan="4" style="height:20mm;">
<b>Richiesta:</b>
<b>'.tr('Richiesta').':</b>
<p>'.nl2br($records[0]['richiesta']).'</p>
</td>
</tr>';
}
if (!empty($records[0]['descrizione_intervento'])) {
//descrizione
echo '
// Descrizione
echo '
<tr>
<td><b>Descrizione:</b></td>
</tr>
<tr>
<td style="height:5mm;">'.nl2br($records[0]['descrizione_intervento']).'</td>
<td colspan="4" style="height:20mm;">
<b>'.tr('Descrizione').':</b>
<p>'.nl2br($records[0]['descrizione_intervento']).'</p>
</td>
</tr>';
}
echo '
</table>';
$totale = [];
// MATERIALE UTILIZZATO
// Conteggio articoli utilizzati
$rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, SUM(qta) AS sumqta FROM `mg_articoli_interventi` HAVING idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC");
$rs2 = $dbo->fetchArray('SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art FROM `mg_articoli_interventi` WHERE idintervento='.prepare($idintervento)." AND NOT idarticolo='0' ORDER BY idarticolo ASC");
if (!empty($rs2)) {
echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="font-size:11px; table-layout:fixed; border-color:#aaa;">
<col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80">
<table class="table table-bordered">
<thead>
<tr>
<th colspan="4" class="text-center">
<b>'.tr('Materiale utilizzato', [], ['upper' => true]).'</b>
</th>
</tr>
<tr>
<td align="center" colspan="6" valign="middle" style="font-size:11pt;" bgcolor="#cccccc">
<b>'.tr('Materiale utilizzato', [], ['upper' => true]).'</b>
</td>
</tr>
<tr>
<th style="font-size:8pt;width:20%" class="text-center">
<b>'.tr('Codice').'</b>
</th>
<tr>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Codice').'</b>
</td>
<th style="font-size:8pt;width:50%" class="text-center">
<b>'.tr('Descrizione').'</b>
</th>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Descrizione').'</b>
</td>
<th style="font-size:8pt;width:15%" class="text-center">
<b>'.tr('Q.').'</b>
</th>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Q.').'</b>
</td>
<th style="font-size:8pt;width:15%" class="text-center">
<b>'.tr('Prezzo').'</b>
</th>
</tr>
</thead>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Prezzo listino').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Sconto').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Subtot. netto').'</b>
</td>
</tr>';
$totale_articoli = [];
<tbody>';
foreach ($rs2 as $r) {
echo '
<tr>';
<tr>';
// Codice
echo '
<td valign="top">
'.$r['codice_art'].'
</td>';
<td>
'.$r['codice_art'].'
</td>';
// Descrizione
echo '
<td valign="top">
'.$r['descrizione'].'
</td>';
<td>
'.$r['descrizione'].'
</td>';
// Quantità
echo '
<td align="center" valign="top">
'.Translator::numberToLocale($r['sumqta'], 2).' '.$r['um'].'
</td>';
// Prezzo unitario
echo '
<td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').'
</td>';
// Sconto unitario
if ($r['sconto_unitario'] > 0) {
$sconto = Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;');
} else {
$sconto = '-';
}
echo '
<td align="center" valign="top">
'.($visualizza_costi ? $sconto : '-').'
</td>';
<td class="text-center">
'.Translator::numberToLocale($r['qta'], 2).' '.$r['um'].'
</td>';
// Netto
$netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['sumqta'];
$netto = $r['prezzo_vendita'] * $r['qta'] - $r['sconto'];
echo '
<td align="right" valign="top">
'.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').'
</td>
</tr>';
// Totale
$totale_articoli[] = $netto;
<td class="text-center">
'.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').'
</td>
</tr>';
}
$totale_articoli = sum($totale_articoli);
$totale[] = $totale_articoli;
echo '
</tbody>';
// Totale spesa articoli
if ($visualizza_costi) {
echo '
<tr>
<td colspan="5" align="right">
<td colspan="2" class="text-right">
<b>'.tr('Totale materiale utilizzato', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#dddddd">
<b>'.Translator::numberToLocale($totale_articoli, 2).' &euro;</b>
</td>
<th colspan="2" class="text-center">
<b>'.Translator::numberToLocale($costi_intervento['ricambi_scontato'], 2).' &euro;</b>
</th>
</tr>';
}
@ -220,105 +185,77 @@ if (!empty($rs2)) {
$rs2 = $dbo->fetchArray('SELECT * FROM in_righe_interventi WHERE idintervento='.prepare($idintervento).' ORDER BY id ASC');
if (!empty($rs2)) {
echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; border-color:#aaa; font-size:11px;">
<col width="90"><col width="254"><col width="54"><col width="80"><col width="80"><col width="80">
<table class="table table-bordered">
<thead>
<tr>
<th colspan="4" class="text-center">
<b>'.tr('Spese aggiuntive', [], ['upper' => true]).'</b>
</th>
</tr>
<tr>
<td align="center" colspan="6" valign="middle" style="font-size:11pt;" bgcolor="#cccccc">
<b>'.tr('Spese aggiuntive', [], ['upper' => true]).'</b>
</td>
</tr>
<tr>
<th style="font-size:8pt;width:50%" class="text-center">
<b>'.tr('Descrizione').'</b>
</th>
<tr>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b></b>
</td>
<th style="font-size:8pt;width:15%" class="text-center">
<b>'.tr('Q.').'</b>
</th>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Descrizione').'</b>
</td>
<th style="font-size:8pt;width:15%" class="text-center">
<b>'.tr('Prezzo unitario').'</b>
</th>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Q.').'</b>
</td>
<th style="font-size:8pt;width:20%" class="text-center">
<b>'.tr('Subtot.').'</b>
</th>
</tr>
</thead>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Prezzo listino').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Sconto').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Subtot. netto').'</b>
</td>
</tr>';
$totale_righe = [];
<tbody>';
foreach ($rs2 as $r) {
// Articolo
echo '
<tr>
<td></td>
<td>
'.nl2br($r['descrizione']).'
</td>';
// Quantità
echo '
<td align="center">
<td class="text-center">
'.Translator::numberToLocale($r['qta'], 2).'
</td>';
// Prezzo unitario
echo '
<td align="right" valign="top">
<td class="text-center">
'.($visualizza_costi ? Translator::numberToLocale($r['prezzo_vendita'], 2).' &euro;' : '-').'
</td>';
// Sconto unitario
if ($r['sconto_unitario'] > 0) {
$sconto = Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;');
} else {
$sconto = '-';
}
echo '
<td align="center" valign="top">
'.($visualizza_costi ? $sconto : '-').'
</td>';
// Prezzo totale
$netto = ($r['prezzo_vendita'] - $r['sconto']) * $r['qta'];
$netto = $r['prezzo_vendita'] * $r['qta'] - $r['sconto'];
echo '
<td align="right" valign="top">
<td class="text-center">
'.($visualizza_costi ? Translator::numberToLocale($netto, 2) : '-').'
</td>
</tr>';
// Subtot
$totale_righe[] = $netto;
}
$totale_righe = sum($totale_righe);
$totale[] = $totale_righe;
echo '
</tbody>';
if ($visualizza_costi) {
// Totale spese aggiuntive
echo '
<tr>
<td colspan="5" align="right">
<td colspan="3" class="text-right">
<b>'.tr('Totale spese aggiuntive', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#dddddd">
<b>'.Translator::numberToLocale($totale_righe, 2).' &euro;</b>
</td>
<th class="text-center">
<b>'.Translator::numberToLocale($costi_intervento['altro_scontato'], 2).' &euro;</b>
</th>
</tr>';
}
@ -328,326 +265,210 @@ if (!empty($rs2)) {
// FINE SPESE AGGIUNTIVE
// ORE TECNICI + FIRMA
echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed;">
<col width="362"><col width="80"><col width="70"><col width="70"><col width="74">
<tr>
<td align="center" colspan="5" valign="middle" style="font-size:11pt;" bgcolor="#cccccc">
<b>'.tr('Ore tecnici', [], ['upper' => true]).'</b>
</td>
</tr>';
// INTESTAZIONE ELENCO TECNICI
echo '
<tr>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Tecnico').'</b>
</td>
<table class="table table-bordered">
<thead>
<tr>
<th class="text-center" colspan="5" style="font-size:11pt;">
<b>'.tr('Ore tecnici', [], ['upper' => true]).'</b>
</th>
</tr>
<tr>
<th class="text-center" style="font-size:8pt;width:30%">
<b>'.tr('Tecnico').'</b>
</th>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Data').'</b>
</td>
<th class="text-center" style="font-size:8pt;width:15%">
<b>'.tr('Data').'</b>
</th>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Dalle').'</b>
</td>
<th class="text-center" style="font-size:8pt;width:10%">
<b>'.tr('Dalle').'</b>
</th>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Alle').'</b>
</td>
<th class="text-center" style="font-size:8pt;width:10%">
<b>'.tr('Alle').'</b>
</th>
<td align="center" style="font-size:8pt;" bgcolor="#dddddd">
<b>'.tr('Sconto').'</b>
</td>
</tr>';
<td class="text-center" style="font-size:6pt;width:35%">
'.tr('I dati del ricevente verrano trattati in base al D.lgs n. 196/2003').'
</td>
</tr>
</thead>
<tbody>';
// Sessioni di lavoro dei tecnici
$rst = $dbo->fetchArray('SELECT an_anagrafiche.*, in_interventi_tecnici.* FROM in_interventi_tecnici JOIN an_anagrafiche ON in_interventi_tecnici.idtecnico=an_anagrafiche.idanagrafica WHERE in_interventi_tecnici.idintervento='.prepare($idintervento).' ORDER BY in_interventi_tecnici.orario_inizio');
$totale_ore = 0;
$totale_costo_ore = 0;
$totale_costo_km = 0;
$totale_sconto = 0;
$totale_sconto_km = 0;
$totale_manodopera = 0;
$totale_viaggio = 0;
foreach ($rst as $r) {
foreach ($rst as $i => $r) {
echo '
<tr>';
// nome tecnico
echo '
<td align="left">
<td style="vertical-align:middle">
'.$r['ragione_sociale'].'
</td>';
// data
echo '
<td align="center">
<td class="text-center" style="vertical-align:middle">
'.Translator::dateToLocale($r['orario_inizio'], '-').'
</td>';
// ora inizio
echo '
<td align="center">
<td class="text-center" style="vertical-align:middle">
'.Translator::timeToLocale($r['orario_inizio'], '-').'
</td>';
// ora fine
echo '
<td align="center">
<td class="text-center" style="vertical-align:middle">
'.Translator::timeToLocale($r['orario_fine'], '-').'
</td>';
// Sconto
echo '
<td align="center">
'.($r['sconto_unitario'] > 0 ? Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;') : '-').'
</td>
</tr>';
$totale_ore += $r['ore'];
$totale_km += $r['km'];
$totale_costo_ore = sum($totale_costo_ore, $r['prezzo_ore_consuntivo']);
$totale_sconto = sum($totale_sconto, $r['sconto']);
$totale_costo_km = sum($totale_costo_km, $r['prezzo_km_consuntivo']);
$totale_sconto_km = sum($totale_sconto_km, $r['scontokm']);
}
$totale_manodopera = sum($totale_costo_ore, -$totale_sconto);
$totale_viaggio = sum($totale_costo_km, -$totale_sconto_km);
$totale_intervento = sum($totale_manodopera, $totale_viaggio);
$totale[] = $totale_intervento;
echo '
</table>';
// ore lavorate
echo '
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; font-size:11px;">
<col width="90"><col width="326"><col width="80"><col width="80"><col width="80">
<tr>
<td style="font-size:8pt;" align="center" bgcolor="#dedede"></td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Descrizione').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Q.').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Prezzo listino').'</b>
</td>
<td style="font-size:8pt;" align="center" bgcolor="#dedede">
<b>'.tr('Subtot. netto').'</b>
</td>
</tr>';
// Ore lavoro
echo '
<tr>
<td></td>
<td>
'.tr('Ore tecnici').'
</td>
<td align="center">
'.Translator::numberToLocale($totale_ore, 2).' ore
</td>';
if ($visualizza_costi) {
echo '
<td align="right">
'.Translator::numberToLocale($totale_costo_ore, 2).' &euro;
</td>
<td align="right">
'.Translator::numberToLocale($totale_manodopera, 2).' &euro;
</td>';
} else {
echo '
<td align="right">-</td>
<td align="right">-</td>';
}
echo '
</tr>';
// Ore di viaggio
if ($totale_km > 0) {
echo '
<tr>
<td></td>
<td>
'.tr('Km / viaggio').'
</td>
<td align="center">
'.Translator::numberToLocale($totale_km, 2).' km
</td>';
if ($visualizza_costi) {
// Spazio aggiuntivo
if ($i == 0) {
echo '
<td align="right">
'.Translator::numberToLocale($totale_costo_km, 2).' &euro;
</td>
<td align="right">
'.Translator::numberToLocale($totale_viaggio, 2).' &euro;
<td class="text-center" style="font-size:8pt;">
'.tr('Si dichiara che i lavori sono stati eseguiti ed i materiali installati').'
</td>';
} else {
echo '
<td align="right">-</td>
<td align="right">-</td>';
<td class="text-center" style="border-bottom:0px;border-top:0px;"></td>';
}
echo '
</tr>';
}
// Subtotale manodopera + viaggio
if ($visualizza_costi) {
echo '
<tr>
<td colspan="4" align="right">
<b>'.tr('Totale intervento', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#dddddd">
<b>'.Translator::numberToLocale($totale_intervento, 2).' &euro;</b>
</td>
</tr>';
}
echo '
</table>';
<tr>';
$totale = sum($totale);
// TOTALE COSTI FINALI
// Ore lavorate
if ($visualizza_costi) {
$ore = get_ore_intervento($idintervento);
$costo_orario = $records[0]['tot_ore_consuntivo'] - $records[0]['tot_dirittochiamata'];
if ($ore > 0) {
$costo_orario /= $ore;
}
echo '
<br>
<td class="text-center" style="vertical-align:middle">
'.tr('Ore lavorate').':<br/><b>'.Translator::numberToLocale($ore, 2).'</b>
</td>';
<nobreak>
<table class="table_values" cellspacing="0" cellpadding="0" style="table-layout:fixed; font-size:11px;">
<col width="630"><col width="80">';
// Totale imponibile
// Costo orario
echo '
<tr>
<td valign="middle" align="right">
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
</td>
<td class="text-center" style="vertical-align:middle">
'.tr('Costo orario').':<br/><b>'.Translator::numberToLocale($costo_orario, 2).'</b>';
<td align="right" bgcolor="#cccccc">
<b>'.Translator::numberToLocale($totale, 2).' &euro;</b>
if ($records[0]['tot_dirittochiamata'] != 0) {
echo '
<small> + '.Translator::numberToLocale($records[0]['tot_dirittochiamata'], 2).' d.c.</small>';
}
echo '
</td>';
// Costo totale manodopera
echo '
<td colspan="2" class="text-center" style="vertical-align:middle">
'.tr('Manodopera').':<br/><b>'.Translator::numberToLocale($costi_intervento['manodopera_scontato'], 2).'</b>
</td>';
} else {
echo '
<td colspan="4"></td>';
}
// Timbro e firma
$firma = !empty($records[0]['firma_file']) ? '<img src="'.$docroot.'/files/interventi/'.$records[0]['firma_file'].'" style="width:70mm;">' : '';
echo '
<td class="text-center" style="font-size:8pt;height:30mm;vertical-align:bottom">
'.$firma.'<br>
<i>('.tr('Timbro e firma leggibile').'.)</i>
</td>
</tr>';
// TOTALE COSTI FINALI
if ($visualizza_costi) {
// Totale imponibile
echo '
<tr>
<td colspan="4" class="text-right">
<b>'.tr('Imponibile', [], ['upper' => true]).':</b>
</td>
<th class="text-center">
<b>'.Translator::numberToLocale($costi_intervento['totale_scontato'], 2).' &euro;</b>
</th>
</tr>';
// Eventuale sconto incondizionato
if ($records[0]['sconto_globale'] > 0) {
$prc = ($records[0]['tipo_sconto'] == 'PRC');
$records[0]['sconto_globale'] = $prc ? $totale * $records[0]['sconto_globale'] / 100 : $records[0]['sconto_globale'];
$sconto = Translator::numberToLocale($records[0]['sconto_globale'], ($prc ? 0 : 2)).($prc ? '%' : '&euro;');
$totale = sum($totale, -$records[0]['sconto_globale']);
if (!empty($costi_intervento['sconto_globale'])) {
echo '
<tr>
<td valign="middle" align="right">
<td colspan="4" class="text-right">
<b>'.tr('Sconto incondizionato', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#cccccc">
<b>-'.Translator::numberToLocale($sconto, 2).' &euro;</b>
</td>
<th class="text-center">
<b>-'.Translator::numberToLocale($costi_intervento['sconto_globale'], 2).' &euro;</b>
</th>
</tr>';
// Imponibile scontato
echo '
<tr>
<td valign="middle" align="right">
<td colspan="4" class="text-right">
<b>'.tr('Imponibile scontato', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#cccccc">
<b>'.Translator::numberToLocale($totale, 2).' &euro;</b>
</td>
<th class="text-center">
<b>'.Translator::numberToLocale($costi_intervento['totale'], 2).' &euro;</b>
</th>
</tr>';
}
// Leggo iva da applicare
$q1 = 'SELECT percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita'));
$rs1 = $dbo->fetchArray($q1);
$rs1 = $dbo->fetchArray('SELECT percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
$percentuale_iva = $rs1[0]['percentuale'];
$iva = ($totale / 100 * $percentuale_iva);
$iva = ($costi_intervento['totale'] / 100 * $percentuale_iva);
// IVA
// Totale intervento
echo '
<tr>
<td valign="middle" align="right">
<td colspan="4" class="text-right">
<b>'.tr('Iva (_PRC_%)', [
'_PRC_' => Translator::numberToLocale($percentuale_iva, 0),
], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#cccccc">
<th class="text-center">
<b>'.Translator::numberToLocale($iva, 2).' &euro;</b>
</td>
</th>
</tr>';
$totale = sum($totale, $iva);
$totale = sum($costi_intervento['totale'], $iva);
// TOTALE INTERVENTO
echo '
<tr>
<td valign="middle" align="right">
<td colspan="4" class="text-right">
<b>'.tr('Totale intervento', [], ['upper' => true]).':</b>
</td>
<td align="right" bgcolor="#cccccc">
<th class="text-center">
<b>'.Translator::numberToLocale($totale, 2).' &euro;</b>
</td>
</tr>
</table>
</nobreak>';
}
// timbro e firma
if ($records[0]['firma_file'] != '') {
$firma = '<img src="'.$docroot.'/files/interventi/'.$records[0]['firma_file'].'" style="width:70mm;">';
} else {
$firma = '';
</th>
</tr>';
}
echo '
<br>
<table border="0" cellspacing="0" cellpadding="0" style="table-layout:fixed;">
<col width="454"><col width="280">
<tr>
<td align="left" valign="middle">
<b>'.tr('Si dichiara che i lavori sono stati eseguiti ed i materiali installati').'.</b><br>
'.tr('I dati del ricevente verrano trattati in base al D.lgs n. 196/2003').'.
</td>
<td align="center" valign="bottom" style="border:1px solid #888; height:20mm; font-size:8pt;">
'.$firma.'<br>
<i>('.tr('Timbro e firma leggibile').'.)</i>
</td>
</tr>
</table>';

View File

@ -10,6 +10,8 @@ $module_name = 'Interventi';
$query = 'SELECT in_interventi.*, (SELECT numero FROM co_contratti WHERE id=(SELECT idcontratto FROM co_righe_contratti WHERE idintervento=in_interventi.id)) AS numero_contratto, (SELECT numero FROM co_preventivi WHERE id=(SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id ORDER BY idpreventivo DESC LIMIT 0,1)) AS numero_preventivo, (SELECT SUM(prezzo_dirittochiamata) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_dirittochiamata`, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km`, (SELECT SUM(ore*prezzo_ore_unitario) 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`, in_interventi.descrizione AS `descrizione_intervento`, richiesta FROM in_interventi INNER JOIN in_tipiintervento ON in_interventi.idtipointervento=in_tipiintervento.idtipointervento WHERE id='.prepare($idintervento).' '.Modules::getAdditionalsQuery('Interventi');
$records = $dbo->fetchArray($query);
$costi_intervento = get_costi_intervento($idintervento);
$id_cliente = $records[0]['idanagrafica'];
$id_sede = $records[0]['idsede'];