Aggiornamento della stampa dei ddt

This commit is contained in:
Thomas Zilio 2017-09-08 17:03:47 +02:00
parent def49a5659
commit 3302b27342
15 changed files with 1341 additions and 2076 deletions

View File

@ -22,7 +22,7 @@ class HTMLWrapper implements WrapperInterface
if (!empty($values['label'])) {
$result .= '
<div class="form-group">
<label for="'.\HTMLBuilder\prepareToField($values['id']).'">'.(empty($values['help']) ? $values['label'] : '<span class="tip" title="'.\HTMLBuilder\prepareToField($values['help']).'">'.$values['label'].'</span>').'</label>';
<label for="'.\HTMLBuilder\prepareToField($values['id']).'">'.(empty($values['help']) ? $values['label'] : '<span class="tip" title="'.\HTMLBuilder\prepareToField($values['help']).'">'.$values['label'].' <i class="fa fa-question-circle-o"></i></span>').'</label>';
}
if (!empty($values['icon-before']) || !empty($values['icon-after'])) {

View File

@ -31,9 +31,6 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
// Individuazione delle impostazioni finali
$settings = array_merge($default, (array) $custom);
// Fix per l'altezza minima del margine in alto
$settings['header-height'] = ($settings['header-height'] < $settings['margins']['top']) ? $settings['margins']['top'] : $settings['header-height'];
// Individuazione delle variabili fondamentali per la sostituzione dei contenuti
if (file_exists($docroot.'/templates/'.$ptype.'/custom/init.php')) {
include $docroot.'/templates/'.$ptype.'/custom/init.php';
@ -55,6 +52,24 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
}
$report = ob_get_clean();
if(!empty($autofill)){
$result = '';
// max($autofill['additional']) = $autofill['rows'] - 1
for ($i = (floor($autofill['count']) % $autofill['rows']); $i < $autofill['additional']; ++$i) {
$result .= '
<tr>';
for($c = 0; $c < $autofill['columns']; $c++){
$result .= '
<td>&nbsp;</td>';
}
$result .= '
</tr>';
}
$report = str_replace('|autofill|', $result, $report);
}
// Generazione dei contenuti dell'header
ob_start();
if (file_exists($docroot.'/templates/'.$ptype.'/custom/header.php')) {
@ -131,8 +146,8 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) {
'helvetica',
$settings['margins']['left'],
$settings['margins']['right'],
$settings['header-height'],
$settings['footer-height'],
$settings['margins']['top'] + $settings['header-height'],
$settings['margins']['bottom'] + $settings['footer-height'],
$settings['margins']['top'],
$settings['margins']['bottom'],
strtolower($settings['orientation']) == 'l' ? 'l' : 'p'

File diff suppressed because it is too large Load Diff

View File

@ -5,11 +5,11 @@ return [
'dimension' => 'A4',
'font-size' => '11pt',
'margins' => [
'top' => 9,
'bottom' => 9,
'top' => 10,
'bottom' => 10,
'left' => 12,
'right' => 12,
],
'header-height' => 40,
'header-height' => 30,
'footer-height' => 5,
];

View File

@ -78,15 +78,24 @@ table.table-striped tbody tr:nth-child(2n+1) td {
padding: 4px;
}
#contents{
border: 1px solid #aaa;
}
#contents td {
padding: 4px;
white-space: normal;
border-left: 1px solid #aaa;
border-right: 1px solid #aaa;
}
#contents th {
border-bottom: 1px solid #aaa;
border-right: 1px solid #aaa;
#contents th,
table.border-full th {
background: #ddd;
padding: 3px;
font-size: 90%;
padding: 4px;
font-size: 80%;
border: 1px solid #aaa;
}
table.border-full th {
font-size: 70%;
}

135
templates/ddt/body.php Normal file
View File

@ -0,0 +1,135 @@
<?php
include_once __DIR__.'/../../core.php';
$report_name = 'ddt_'.$numero.'.pdf';
$autofill = [
'count' => 0,
'words' => 70,
'rows' => 16,
'additional' => 15,
'columns' => $mostra_prezzi ? 6 : 2,
];
$v_iva = [];
$v_totale = [];
$totale_ddt = 0.00;
$totale_imponibile = 0.00;
$totale_iva = 0.00;
$sconto = 0.00;
$sconto_generico = 0.00;
// Intestazione tabella per righe
echo "
<table class='table table-striped' id='contents'>
<thead>
<tr>
<th class='text-center'>".strtoupper(tr('Descrizione'))."</th>
<th class='text-center' style='width:7%'>".strtoupper(tr('Q.TÀ')).'</th>';
if ($mostra_prezzi) {
echo "
<th class='text-center' style='width:15%'>".strtoupper(tr('Prezzo u.'))."</th>
<th class='text-center' style='width:15%'>".strtoupper(tr('Importo'))."</th>
<th class='text-center' style='width:10%'>".strtoupper(tr('Sconto'))."</th>
<th class='text-center' style='width:7%'>".strtoupper(tr('IVA')).' (%)</th>';
}
echo '
</tr>
</thead>
<tbody>';
// Righe
$rs_gen = $dbo->fetchArray("SELECT *, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `dt_righe_ddt` WHERE idddt='$idddt'");
$imponibile_gen = 0.0;
$iva_gen = 0.0;
foreach ($rs_gen as $r) {
$autofill['count'] += ceil(strlen($r['descrizione']) / $autofill['words']);
$autofill['count'] += substr_count($r['descrizione'], PHP_EOL);
$descrizione = $r['descrizione'];
$qta = $r['qta'];
$subtot = $r['subtotale'] / $r['qta'];
$subtotale = $r['subtotale'];
$sconto = $r['sconto'];
$iva = $r['iva'];
if (str_contains($r['descrizione'], 'SCONTO')) {
$sconto_generico = $r['subtotale'];
$iva_gen += $r['iva'];
} else {
echo '
<tr>
<td>
'.nl2br($descrizione);
// Aggiunta riferimento a ordine
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
echo '
<br/><small>'.strtoupper(str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine n<sup>o</sup>_NUM_ del _DATE_'))).'</small>';
$autofill['count'] += 0.4;
}
echo '
</td>';
echo "
<td class='center' valign='top'>
".Translator::numberToLocale($qta, 2).'
</td>';
if ($mostra_prezzi) {
echo "
<td align='right' class='' valign='top'>
".Translator::numberToLocale($subtot, 2).' &euro;
</td>';
// Imponibile
echo "
<td align='right' class='' valign='top'>
".Translator::numberToLocale($subtotale, 2).' &euro;
</td>';
// Sconto
echo "
<td align='right' class='' valign='top'>
".Translator::numberToLocale($r['sconto_unitario'], 2).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'
</td>';
// Iva
echo "
<td align='center' valign='top'>";
if ($r['perc_iva'] > 0) {
echo '
'.$r['perc_iva'];
}
echo '
</td>';
}
echo '
</tr>';
$imponibile_gen += $subtotale;
$iva_gen += $iva;
$sconto += $sconto;
}
}
echo '
|autofill|
</tbody>
</table>';
// Info per il footer
$imponibile_ddt = $imponibile_gen;
$totale_iva = $iva_gen;
$totale_ddt = $imponibile_gen;

View File

@ -1,22 +0,0 @@
<style>
<!--
.table_values td{
border: 1px solid #888;
padding: 4px;
white-space: normal;
}
.table_values th{
background: #cfe1ec;
padding: 4px;
}
.center{
text-align: center;
}
-->
</style>
<page backcolor="#ffffff" backtop="75mm" backbottom="10mm" backleft="0mm" backright="0mm" footer="" style="font-size: $font_size$">
$body$
</page>

View File

@ -1,43 +0,0 @@
<page_header>
<table $body_table_params$>
<!-- Intestazione fornitore -->
<tr><td style="font-size:8pt; color:#555;">
<img src="$docroot$/templates/ordini/logo_azienda.jpg" alt="Logo" border="0" />
</td>
<td>
$f_ragionesociale$
$f_indirizzo$
$f_citta$
$f_piva$
$f_codicefiscale$
$f_capsoc$
$f_telefono$
$f_sitoweb$
$f_email$
</td></tr>
</table><br/>
<!-- Intestazione cliente -->
<table $body_table_params$>
<tr><td style="width:97mm; border:1px solid #777;" valign="top">
<small><b>CLIENTE</b></small><br/>
<div style="padding: 4px 20px 20px 20px;">
$c_ragionesociale$
$c_indirizzo$
$c_citta$
$c_piva$
$c_codicefiscale$
</div>
</td>
<td valign="top" style="width:96mm; border:1px solid #777;">
<small><b>DESTINAZIONE</b></small><br/>
<div style="padding: 4px 20px 20px 20px;">
$c_destinazione$
</div>
</td></tr>
</table>
<br/>
</page_header>

151
templates/ddt/footer.php Normal file
View File

@ -0,0 +1,151 @@
<?php
// TABELLA PRINCIPALE
echo '
<table class="border-full">';
if ($mostra_prezzi) {
// Riga 1
echo "
<tr>
<td rowspan='7' class='border-full'>
<p class='small-bold'>".strtoupper(tr('Note')).'</p>
<p>'.nl2br($rs[0]['note'])."</p>
</td>
<td style='width:33mm;' class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Totale imponibile')).'</p>
</td>
</tr>';
// Dati riga 1
echo "
<tr>
<td class='border-bottom cell-padded text-right'>
".Translator::numberToLocale($imponibile_ddt, 2).' &euro;
</td>
</tr>';
// Riga 2
echo "
<tr>
<td style='width:33mm;' class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Totale imposte'))."</p>
</td>
</tr>
<tr>
<td class='border-bottom cell-padded text-right'>
".Translator::numberToLocale($totale_iva, 2).' &euro;
</td>
</tr>';
// Riga 3
echo "
<tr>
<td class='border-bottom'>
<p class='small-bold'>".strtoupper(tr('Totale documento'))."</p>
</td>
</tr>
<tr>
<td class='cell-padded text-right' style='border-bottom:none;'>
".Translator::numberToLocale($totale_ddt, 2).' &euro;
</td>
</tr>';
} else {
// Riga 1
echo "
<tr>
<td style='height:40mm;'>
<p class='small-bold'>".strtoupper(tr('Note')).'</p>
'.nl2br($rs[0]['note']).'
</td>
</tr>';
}
echo '
</table>';
echo '
<table class="border-full">
<tr>
<th class="border-bottom border-right" style="width:33%">
'.strtoupper(tr('Aspetto beni')).'
</th>
<th class="border-bottom border-right" style="width:33%">
'.strtoupper(tr('Causale trasporto')).'
</th>
<th class="border-bottom" style="width:33%">
'.strtoupper(tr('Porto')).'
</th>
</tr>
<tr>
<td class="cell-padded border-right">
$aspettobeni$ &nbsp;
</td>
<td class="cell-padded border-right">
$causalet$ &nbsp;
</td>
<td class="cell-padded">
$porto$ &nbsp;
</td>
</tr>
<tr>
<th class="border-bottom border-right">
'.strtoupper(tr('N<sup>o</sup> colli')).'
</th>
<th class="border-bottom border-right">
'.strtoupper(tr('Tipo di spedizione')).'
</th>
<th class="border-bottom">
'.strtoupper(tr('Vettore')).'
</th>
</tr>
<tr>
<td class="cell-padded border-right">
$n_colli$ &nbsp;
</td>
<td class="cell-padded border-right">
$spedizione$ &nbsp;
</td>
<td class="cell-padded">
$vettore$ &nbsp;
</td>
</tr>
<tr>
<th class="border-bottom border-right">
'.strtoupper(tr('Firma conducente')).'
</th>
<th class="border-bottom border-right">
'.strtoupper(tr('Firma vettore')).'
</th>
<th class="border-bottom">
'.strtoupper(tr('Firma destinatario')).'
</th>
</tr>
<tr>
<td class="cell-padded border-right">
&nbsp;<br>&nbsp;
</td>
<td class="cell-padded border-right">
&nbsp;<br>&nbsp;
</td>
<td class="cell-padded">
&nbsp;<br>&nbsp;
</td>
</tr>
</table>';
echo '
$pagination$';

89
templates/ddt/header.php Normal file
View File

@ -0,0 +1,89 @@
<?php
echo '
<!-- Intestazione fornitore -->
<div class="row">
<div class="col-xs-6">
<img src="'.__DIR__.'/logo_azienda.jpg"/>
</div>
<div class="col-xs-6 text-right">
<p><b>$f_ragionesociale$</b></p>
<p>$f_indirizzo$ $f_citta$</p>
<p>$f_piva$</p>
<p>$f_codicefiscale$</p>
<p>$f_capsoc$</p>
<p>$f_telefono$</p>
</div>
</div>
<br>
<div class="row">
<!-- Dati Fattura -->
<div class="col-xs-6">
<div class="text-center" style="height:5mm;">
<b>$tipo_doc$</b>
</div>
<table class="table">
<tr>
<td valign="top" class="border-full text-center">
<p class="small-bold">'.strtoupper(tr('Nr. documento')).'</p>
<p>$numero_doc$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.strtoupper(tr('Data documento')).'</p>
<p>$data$</p>
</td>
<td class="border-right border-bottom border-top text-center">
<p class="small-bold">'.strtoupper(tr('Cliente')).'</p>
<p>$c_codice$</p>
</td>
<td class="border-right border-bottom border-top center text-center">
<p class="small-bold">'.strtoupper(tr('Foglio')).'</p>
<p>{PAGENO}/{nb}</p>
</td>
</tr>
<tr>
<td colspan=2 class="border-bottom border-left" style="height:11mm;">
<p class="small-bold">'.strtoupper(tr('Partita IVA')).'</p>
<small>$c_piva$</small>
</td>
<td colspan=2 class="border-bottom border-right">
<p class="small-bold">'.strtoupper(tr('Codice fiscale')).'</p>
<small>$c_codicefiscale$</small>
</td>
</tr>
<tr>
<td colspan="4" class="border-full" style="height:11mm;">
<p class="small-bold">'.strtoupper(tr('Pagamento')).'</p>
<p>$pagamento$</p>
</td>
</tr>
</table>
</div>
<div class="col-xs-5 col-xs-offset-1">
<table class="table" style="width:100%;margin-top:5mm;">
<tr>
<td class="border-full" style="height:16mm;">
<p class="small-bold">'.strtoupper(tr('Spett.le')).'</p>
<p>$c_ragionesociale$</p>
<p>$c_indirizzo$ $c_citta$</p>
</td>
</tr>
<tr>
<td class="border-full" style="height:16mm;">
<p class="small-bold">'.strtoupper(tr('Destinazione diversa')).'</p>
<small>$c_destinazione$</small>
</td>
</tr>
</table>
</div>
</div>';

63
templates/ddt/init.php Normal file
View File

@ -0,0 +1,63 @@
<?php
include_once __DIR__.'/../../core.php';
// Lettura info ddt
$q = 'SELECT *, (SELECT dir FROM dt_tipiddt WHERE id=idtipoddt) AS dir, (SELECT descrizione FROM dt_tipiddt WHERE id=idtipoddt) AS tipo_doc, (SELECT descrizione FROM dt_causalet WHERE id=idcausalet) AS causalet, (SELECT descrizione FROM dt_porto WHERE id=idporto) AS porto, (SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni, (SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore FROM dt_ddt WHERE id='.prepare($idddt);
$rs = $dbo->fetchArray($q);
$module_name = ($rs[0]['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
$idcliente = $rs[0]['idanagrafica'];
$idsede = $rs[0]['idsede'];
$numero = !empty($rs[0]['numero_esterno']) ? $rs[0]['numero_esterno'] : $rs[0]['numero'];
if (empty($rs[0]['numero_esterno'])) {
$numero = 'pro-forma '.$numero;
$tipo_doc = 'DDT PRO-FORMA';
}
// Leggo i dati della destinazione (se 0=sede legale, se!=altra sede da leggere da tabella an_sedi)
$destinazione = '';
if (!empty($rs[0]['idsede'])) {
$rsd = $dbo->fetchArray('SELECT (SELECT codice FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS codice, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS ragione_sociale, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale FROM an_sedi WHERE idanagrafica='.prepare($id_cliente).' AND id='.prepare($rs[0]['idsede']));
if (!empty($rsd[0]['indirizzo'])) {
$destinazione .= $rsd[0]['indirizzo'].'<br/>';
}
if (!empty($rsd[0]['indirizzo2'])) {
$destinazione .= $rsd[0]['indirizzo2'].'<br/>';
}
if (!empty($rsd[0]['cap'])) {
$destinazione .= $rsd[0]['cap'].' ';
}
if (!empty($rsd[0]['citta'])) {
$destinazione .= $rsd[0]['citta'];
}
if (!empty($rsd[0]['provincia'])) {
$destinazione .= ' ('.$rsd[0]['provincia'].')';
}
}
// Sostituzioni specifiche
$replaces = [
'tipo_doc' => strtoupper($tipo_doc),
'numero_doc' => $numero,
'data' => Translator::numberToLocale($rs[0]['data']),
'pagamento' => $rs[0]['tipo_pagamento'],
'c_destinazione' => $destinazione,
'aspettobeni' => $rs[0]['aspettobeni'],
'causalet' => $rs[0]['causalet'],
'porto' => $rs[0]['porto'],
'n_colli' => !empty($rs[0]['n_colli']) ? $rs[0]['n_colli'] : '',
'spedizione' => $rs[0]['spedizione'],
'vettore' => $rs[0]['vettore'],
];
// Controllo sui permessi
if ($id_cliente != Auth::user()['idanagrafica'] && !Auth::admin()) {
die(tr('Non hai i permessi per questa stampa!'));
}
$mostra_prezzi = get_var("Stampa i prezzi sui ddt");

View File

@ -1,401 +0,0 @@
<?php
include_once __DIR__.'/../../core.php';
$idddt = save($_GET['idddt']);
$show_costi = get_var('Stampa i prezzi sui ddt');
// Lettura info ddt
$q = "SELECT *, (SELECT descrizione FROM dt_tipiddt WHERE dt_tipiddt.id=idtipoddt) AS tipo_doc, (SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS tipo_pagamento, (SELECT descrizione FROM dt_causalet WHERE id=idcausalet) AS causalet, (SELECT descrizione FROM dt_porto WHERE id=idporto) AS porto, (SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni, (SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore FROM dt_ddt WHERE id='$idddt'";
$rs = $dbo->fetchArray($q);
$numero_ddt = $rs[0]['numero'];
$idcliente = $rs[0]['idanagrafica'];
(!empty($rs[0]['numero_esterno'])) ? $numero = $rs[0]['numero_esterno'] : $numero = $rs[0]['numero'];
// Lettura righe ddt
$q2 = "SELECT * FROM dt_righe_ddt WHERE idddt='$idddt'";
$righe = $dbo->fetchArray($q2);
// carica report html
$report = file_get_contents(__DIR__.'/ddt.html');
$body = file_get_contents(__DIR__.'/ddt_body.html');
include_once $docroot.'/templates/pdfgen_variables.php';
// Leggo i dati della destinazione (se 0=sede legale, se!=altra sede da leggere da tabella an_sedi)
$destinazione = '';
if ($rs[0]['idsede'] == 0) {
$queryd = "SELECT ragione_sociale, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale FROM an_anagrafiche WHERE idanagrafica='".$idcliente."'";
$rsd = $dbo->fetchArray($queryd);
if ($rsd[0]['ragione_sociale'] != '') {
$destinazione .= $rsd[0]['ragione_sociale']."<br/>\n";
}
if ($rsd[0]['indirizzo'] != '') {
$destinazione .= $rsd[0]['indirizzo']."<br/>\n";
}
if ($rsd[0]['indirizzo2'] != '') {
$destinazione .= $rsd[0]['indirizzo2']."<br/>\n";
}
if ($rsd[0]['cap'] != '') {
$destinazione .= $rsd[0]['cap'].' ';
}
if ($rsd[0]['citta'] != '') {
$destinazione .= $rsd[0]['citta'];
}
if ($rsd[0]['provincia'] != '') {
$destinazione .= ' ('.$rsd[0]['provincia'].")<br/>\n";
}
if ($rsd[0]['piva'] != '') {
$destinazione .= 'P.IVA: '.$rsd[0]['piva']."<br/>\n";
}
if ($rsd[0]['codice_fiscale'] != '') {
$destinazione .= 'C.F.: '.$rsd[0]['codice_fiscale']."<br/>\n";
}
} else {
$queryd = "SELECT (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=an_sedi.idanagrafica) AS ragione_sociale, indirizzo, indirizzo2, cap, citta, provincia, piva, codice_fiscale FROM an_sedi WHERE idanagrafica='".$idcliente."' AND id='".$rs[0]['idsede']."'";
$rsd = $dbo->fetchArray($queryd);
if ($rsd[0]['ragione_sociale'] != '') {
$destinazione .= $rsd[0]['ragione_sociale']."<br/>\n";
}
if ($rsd[0]['indirizzo'] != '') {
$destinazione .= $rsd[0]['indirizzo']."<br/>\n";
}
if ($rsd[0]['indirizzo2'] != '') {
$destinazione .= $rsd[0]['indirizzo2']."<br/>\n";
}
if ($rsd[0]['cap'] != '') {
$destinazione .= $rsd[0]['cap'].' ';
}
if ($rsd[0]['citta'] != '') {
$destinazione .= $rsd[0]['citta'];
}
if ($rsd[0]['provincia'] != '') {
$destinazione .= ' ('.$rsd[0]['provincia'].")<br/>\n";
}
if ($rsd[0]['piva'] != '') {
$destinazione .= 'P.IVA: '.$rsd[0]['piva']."<br/>\n";
}
if ($rsd[0]['codice_fiscale'] != '') {
$destinazione .= 'C.F.: '.$rsd[0]['codice_fiscale']."<br/>\n";
}
}
$body = str_replace('$c_destinazione$', $destinazione, $body);
// Dati generici ddt
$body .= "<table style='width:200mm;' class='table_values' border='0' cellspacing='1'>\n";
$body .= "<tr><td width='229' class='center'><b>".$rs[0]['tipo_doc']."</b><br/>n<sup>o</sup> $numero</td>\n";
$body .= "<td width='229' class='center'><b>Data:</b><br/>".Translator::dateToLocale($rs[0]['data'])."</td>\n";
$body .= "<td width='229' class='center'><b>Pagamento:</b><br/>".$rs[0]['tipo_pagamento']."</td></tr>\n";
$body .= "</table><br/><br/>\n";
// Intestazione tabella per righe
$body .= "<table class='table_values' border='0' cellspacing='1' style='table-layout:fixed;'>\n";
$body .= "<col width='300'><col width='50'><col width='40'><col width='90'><col width='75'><col width='60'><col width='78'>\n";
$body .= "<thead>\n";
$body .= "<tr><th width='300'>Descrizione</th>\n";
$body .= "<th width='50' align='center'>Q.tà</th>\n";
$body .= "<th width='40' align='center'>u.m.</th>\n";
$body .= "<th width='90' align='center'>Costo&nbsp;unitario</th>\n";
$body .= "<th width='60' align='center'>Iva</th>\n";
$body .= "<th width='75' align='center'>Imponibile</th></tr>\n";
$body .= "</thead>\n";
$body .= "<tbody>\n";
// Mostro le righe del ddt
$totale_ddt = 0.00;
$totale_imponibile = 0.00;
$totale_iva = 0.00;
$sconto = 0.00;
/*
Articoli
*/
$q_art = "SELECT *, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `dt_righe_ddt` JOIN mg_prodotti ON dt_righe_ddt.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idddt, lotto HAVING idddt='$idddt' AND NOT idarticolo='0' ORDER BY idarticolo ASC";
$rs_art = $dbo->fetchArray($q_art);
$tot_art = sizeof($rs_art);
$imponibile_art = 0.0;
$iva_art = 0.0;
if ($tot_art > 0) {
for ($i = 0; $i < $tot_art; ++$i) {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rs_art[$i]['descrizione']);
if ($rs_art[$i]['codice'] != '') {
$body .= '<br/><small>'.$rs_art[$i]['codice']."</small>\n";
}
// Aggiunta riferimento a ordine
if (!empty($rs_art[$i]['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id="'.$rs_art[$i]['idordine'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ordine n<sup>o</sup>'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
$body .= "</td>\n";
$body .= "<td class='table_cell center' valign='top'>\n";
$body .= Translator::numberToLocale($rs_art[$i]['sumqta'], 2)."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center' valign='top'>\n";
$body .= $rs_art[$i]['um']."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center' valign='top'>\n";
if ($show_costi) {
$body .= Translator::numberToLocale($rs_art[$i]['subtotale'], 2)." &euro;\n";
} else {
$body .= '-';
}
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center' valign='top'>\n";
$iva = $rs_art[$i]['iva'];
if ($show_costi) {
$body .= Translator::numberToLocale($iva, 2)." &euro;\n";
} else {
$body .= '-';
}
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell center' valign='top'>\n";
if ($show_costi) {
$body .= Translator::numberToLocale($rs_art[$i]['subtotale'], 2)." &euro;\n";
if ($rs_art[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rs_art[$i]['sconto'], 2)." &euro;</small>\n";
}
} else {
$body .= '-';
}
$body .= "</td></tr>\n";
$imponibile_art += $rs_art[$i]['subtotale'];
$iva_art += $iva;
$sconto += $rs_art[$i]['sconto'];
}
$imponibile_ddt += $imponibile_art;
$totale_iva += $iva_art;
$totale_ddt += $imponibile_art;
}
/*
Righe generiche
*/
$q_gen = "SELECT * FROM `dt_righe_ddt` WHERE idddt='$idddt' AND idarticolo=0";
$rs_gen = $dbo->fetchArray($q_gen);
$tot_gen = sizeof($rs_gen);
$imponibile_gen = 0.0;
$iva_gen = 0.0;
if ($tot_gen > 0) {
for ($i = 0; $i < $tot_gen; ++$i) {
$body .= "<tr><td class='first_cell'>\n";
$body .= nl2br($rs_gen[$i]['descrizione']);
// Aggiunta riferimento a ordine
if (!empty($rs_gen[$i]['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id="'.$rs_gen[$i]['idordine'].'"');
($rso[0]['numero_esterno'] != '') ? $numero = $rso[0]['numero_esterno'] : $numero = $rso[0]['numero'];
$body .= '<br/><small>Rif. ordine n<sup>o</sup>'.$numero.' del '.Translator::dateToLocale($rso[0]['data']).'</small>';
}
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rs_gen[$i]['qta'], 2)."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
$body .= $rs_gen[$i]['um']."\n";
$body .= "</td>\n";
$body .= "<td class='table_cell center'>\n";
if ($show_costi) {
$body .= Translator::numberToLocale($rs_gen[$i]['subtotale'] / $rs_gen[$i]['qta'], 2)." &euro;\n";
} else {
$body .= '-';
}
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center'>\n";
$iva = $rs_gen[$i]['iva'];
if ($show_costi) {
$body .= Translator::numberToLocale($iva, 2)." &euro;\n";
} else {
$body .= '-';
}
$body .= "</td>\n";
// Imponibile
$body .= "<td class='table_cell center'>\n";
if ($show_costi) {
$body .= Translator::numberToLocale($rs_gen[$i]['subtotale'], 2)." &euro;\n";
if ($rs_gen[$i]['sconto'] > 0) {
$body .= "<br/>\n<small style='color:#555;'>- sconto ".Translator::numberToLocale($rs_gen[$i]['sconto'], 2)." &euro;</small>\n";
}
} else {
$body .= '-';
}
$body .= "</td></tr>\n";
$imponibile_gen += $rs_gen[$i]['subtotale'];
$iva_gen += $iva;
$sconto += $rs_gen[$i]['sconto'];
}
$imponibile_ddt += $imponibile_gen;
$totale_iva += $iva_gen;
$totale_ddt += $imponibile_gen;
}
// Totale imponibile
if ($show_costi) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Totale imponibile:</b>';
$body .= "</td>\n";
$body .= "<td class='table_cell_h center'>\n";
$body .= '<b>'.Translator::numberToLocale($imponibile_ddt, 2)." &euro;</b>\n";
$body .= "</td></tr>\n";
// Mostra sconto se c'è
if (abs($sconto) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Sconto:</b>';
$body .= "</td>\n";
// Sconto
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($sconto, 2).' &euro;';
$body .= '</td>';
$body .= "</tr>\n";
// Totale scontato
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Totale scontato:</b>';
$body .= "</td>\n";
// Sconto
$body .= "<td class='table_cell center'>\n";
$totale_ddt -= $sconto;
$body .= Translator::numberToLocale($totale_ddt, 2).' &euro;';
$body .= "</td></tr>\n";
}
// Mostra INPS se c'è
if (abs($rs[0]['rivalsainps']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Rivalsa INPS:</b>';
$body .= "</td>\n";
// Rivalsa INPS
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rs[0]['rivalsainps'], 2).' &euro;';
$body .= "</td></tr>\n";
$totale_ddt += $rs[0]['rivalsainps'];
}
// Mostra iva se c'è
$totale_iva += $rs[0]['iva_rivalsainps'];
if (abs($totale_iva) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Iva:</b>';
$body .= "</td>\n";
// Iva
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($totale_iva, 2)." &euro;\n";
$body .= "</td></tr>\n";
$totale_ddt += $totale_iva;
}
/*
Totale ddt
*/
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Totale ddt:</b>';
$body .= "</td>\n";
$body .= "<td class='table_cell_h center'>\n";
$body .= '<b>'.Translator::numberToLocale($totale_ddt, 2)." &euro;</b>\n";
$body .= "</td></tr>\n";
$netto_a_pagare = $totale_ddt;
// Mostra marca da bollo se c'è
if (abs($rs[0]['bollo']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Marca da bollo:</b>';
$body .= "</td>\n";
// Marca da bollo
$body .= "<td class='table_cell center'>\n";
$marca_da_bollo = str_replace(',', '.', $rs[0]['bollo']);
$body .= Translator::numberToLocale($marca_da_bollo, 2).' &euro;';
$body .= "</td></tr>\n";
$netto_a_pagare += $marca_da_bollo;
}
// Mostra ritenuta d'acconto se c'è
if (abs($rs[0]['ritenutaacconto']) > 0) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= "<b>Ritenuta d'acconto:</b>";
$body .= "</td>\n";
// Ritenuta d'acconto
$body .= "<td class='table_cell center'>\n";
$body .= Translator::numberToLocale($rs[0]['ritenutaacconto'], 2).' &euro;';
$body .= "</td></tr>\n";
$netto_a_pagare -= $rs[0]['ritenutaacconto'];
}
/*
Netto a pagare (se diverso dal totale)
*/
if ($totale_ddt != $netto_a_pagare) {
$body .= "<tr><td class='first_cell' colspan='5' align='right'>\n";
$body .= '<b>Netto a pagare:</b>';
$body .= "</td>\n";
$body .= "<td class='table_cell_h center'>\n";
$body .= '<b>'.Translator::numberToLocale($netto_a_pagare, 2)." &euro;</b>\n";
$body .= "</td></tr>\n";
}
}
$body .= "</tbody>\n";
$body .= "</table>\n";
// Note
$body .= '<p>'.nl2br($rs[0]['note'])."</p>\n";
if ($rs[0]['vettore'] != '') {
$vettore = ' ('.$rs[0]['vettore'].')';
} else {
$vettore = '';
}
// Dati footer ddt
$footer = "<br/><br/><table style='width:200mm;' class='table_values' style='table-layout:fixed;' border='0' cellspacing='1'>\n";
$footer .= "<col width='169'><col width='169'><col width='169'><col width='169'>\n";
$footer .= "<tr><td width='169' height='25' class='center'><b>Colli:</b><br/>".$rs[0]['n_colli']."&nbsp;</td>\n";
$footer .= "<td width='169' class='center'><b>Aspetto beni:</b><br/>".$rs[0]['aspettobeni']."&nbsp;</td>\n";
$footer .= "<td width='169' class='center'><b>Causale trasporto:</b><br/>".$rs[0]['causalet']."&nbsp;</td>\n";
$footer .= "<td width='169' class='center'><b>Porto:</b><br/>".$rs[0]['porto']."&nbsp;</td></tr>\n";
$footer .= "</table>\n";
$footer .= "<table style='width:200mm;' class='table_values' style='table-layout:fixed;' border='0' cellspacing='1'>\n";
$footer .= "<col width='232'><col width='232'><col width='232'>\n";
$footer .= "<tr><td width='232' height='25' class='center'><b>Tipo di spedizione:</b><br/>".$rs[0]['spedizione'].$vettore."&nbsp;</td>\n";
$footer .= "<td width='232' class='center'><b>Conducente:</b><br/>______________________</td>\n";
$footer .= "<td width='233' class='center'><b>Destinatario:</b><br/>______________________</td></tr>\n";
$footer .= "</table>\n";
$body = str_replace('|footer|', $footer, $body);
$report_name = 'ddt_'.$numero_ddt.'.pdf';

View File

@ -0,0 +1,6 @@
<?php
return [
'header-height' => '80',
'footer-height' => '80',
];

View File

@ -4,21 +4,24 @@ include_once __DIR__.'/../../core.php';
$report_name = 'fattura_'.$numero.'.pdf';
$n_rows = 0;
$words4row = 70;
$autofill = [
'count' => 0, // Conteggio delle righe
'words' => 70, // Numero di parolo dopo cui contare una riga nuova
'rows' => 20, // Numero di righe massimo presente nella pagina
'additional' => 15, // Numero di righe massimo da aggiungere
'columns' => 6, // Numero di colonne della tabella
];
$v_iva = [];
$v_totale = [];
$totale_documento = 0;
$totale_iva = 0;
$sconto = 0;
$imponibile = 0;
$iva = 0;
// Intestazione tabella per righe
echo "
<table class='table border-full table-striped' id='contents'>
<table class='table table-striped' id='contents'>
<thead>
<tr>
<th class='text-center' style='width:50%'>".strtoupper(tr('Descrizione'))."</th>
@ -36,69 +39,69 @@ echo "
$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice_articolo, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_documenti` WHERE iddocumento=".prepare($iddocumento).' ORDER BY `order`');
$tot_righe = sizeof($righe);
foreach ($righe as $i => $riga) {
$n_rows += ceil(strlen($riga['descrizione']) / $words4row);
$n_rows += substr_count($riga['descrizione'], PHP_EOL);
foreach ($righe as $r) {
$autofill['count'] += ceil(strlen($r['descrizione']) / $autofill['words']);
$autofill['count'] += substr_count($r['descrizione'], PHP_EOL);
echo "
echo '
<tr>
<td class='border-right'>
".nl2br($riga['descrizione']);
<td>
'.nl2br($r['descrizione']);
if (!empty($riga['codice_articolo'])) {
if (!empty($r['codice_articolo'])) {
echo '
<br><small>'.str_replace('_COD_', $riga['codice_articolo'], tr('COD. _COD_')).'</small>';
$n_rows += 0.4;
<br><small>'.str_replace('_COD_', $r['codice_articolo'], tr('COD. _COD_')).'</small>';
$autofill['count'] += 0.4;
}
// Aggiunta riferimento a ordine
if (!empty($riga['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($riga['idordine']));
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
echo '
<br><small>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ordine n<sup>o</sup>_NUM_ del _DATE_')).'</small>';
$n_rows += 0.4;
$autofill['count'] += 0.4;
}
// Aggiunta riferimento a ddt
elseif (!empty($riga['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id='.prepare($riga['idddt']));
elseif (!empty($r['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id='.prepare($r['idddt']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
echo '
<br><small>'.str_replace(['_NUM_', '_DATE_'], [$numero, Translator::dateToLocale($rso[0]['data'])], tr('Rif. ddt n<sup>o</sup>_NUM_ del _DATE_')).'</small>';
$n_rows += 0.4;
$autofill['count'] += 0.4;
}
echo '
</td>';
echo "
<td class='center border-right text-center'>
".(empty($riga['qta']) ? '' : Translator::numberToLocale($riga['qta'], 2)).'
<td class='text-center'>
".(empty($r['qta']) ? '' : Translator::numberToLocale($r['qta'], 2)).'
</td>';
// Unità di miusura
echo "
<td class='border-right text-center'>
".nl2br(strtoupper($riga['um'])).'
<td class='text-center'>
".nl2br(strtoupper($r['um'])).'
</td>';
// Costo unitario
echo "
<td class='border-right text-right'>
".(empty($riga['qta']) || empty($riga['subtotale']) ? '' : Translator::numberToLocale($riga['subtotale'] / $riga['qta'], 2)).' &euro;
<td class='text-right'>
".(empty($r['qta']) || empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] / $r['qta'], 2)).' &euro;
</td>';
// Imponibile
echo "
<td class='border-right text-right'>
".(empty($riga['subtotale']) ? '' : Translator::numberToLocale($riga['subtotale'], 2)).' &euro;';
<td class='text-right'>
".(empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'], 2)).' &euro;';
if ($riga['sconto'] > 0) {
$n_rows += 0.4;
if ($r['sconto'] > 0) {
$autofill['count'] += 0.4;
echo "
<br><small class='help-block'>- sconto ".Translator::numberToLocale($riga['sconto_unitario']).($riga['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
<br><small class='help-block'>- sconto ".Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
}
echo '
@ -107,26 +110,22 @@ foreach ($righe as $i => $riga) {
// Iva
echo "
<td class='text-center'>";
if (!empty($riga['idiva'])) {
if ($r['perc_iva'] > 0) {
echo '
'.intval($riga['perc_iva']).'%';
'.$r['perc_iva'].'%';
}
echo '
</td>
</tr>';
$imponibile += $riga['subtotale'];
$iva += $riga['iva'];
$sconto += $riga['sconto'];
$imponibile += $r['subtotale'];
$iva += $r['iva'];
$sconto += $r['sconto'];
$v_iva[$riga['desc_iva']] += $riga['iva'];
$v_totale[$riga['desc_iva']] += $riga['subtotale'] - $riga['sconto'];
$v_iva[$r['desc_iva']] += $r['iva'];
$v_totale[$r['desc_iva']] += $r['subtotale'] - $r['sconto'];
}
$imponibile_documento += $imponibile;
$totale_iva += $iva;
$totale_documento += $imponibile;
// Aggiungo diciture per condizioni iva particolari
if (!empty($v_iva)) {
$elenco = [
@ -139,12 +138,12 @@ if (!empty($v_iva)) {
// Controllo se è stata applicata questa tipologia di iva
foreach ($elenco as $e => $testo) {
if (in_array($e, $keys)) {
$n_rows += strlen($testo) / $words4row;
$n_rows += substr_count($riga['descrizione'], PHP_EOL);
$autofill['count'] += strlen($testo) / $autofill['words'];
$autofill['count'] += substr_count($r['descrizione'], PHP_EOL);
echo "
<tr>
<td class='border-right text-center'>
<td class='text-center'>
<b>".nl2br($testo)."</b>
</td>
@ -156,28 +155,19 @@ if (!empty($v_iva)) {
}
}
// % 20 -> < 19 righe
for ($i = (floor($n_rows) % 20); $i < 15; ++$i) {
echo '
<tr>
<td class="border-right">&nbsp;</td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
<td class="border-right"></td>
</tr>';
}
echo '
|autofill|
</tbody>
</table>';
$imponibile_documento -= $sconto;
$totale_documento = $totale_documento - $sconto + $totale_iva;
if (!empty($rs[0]['note'])) {
echo '
<br>
<p class="small-bold">'.strtoupper(tr('Note')).':</p>
<p>'.$rs[0]['note'].'</p>';
}
// Info per il footer
$totale_iva = $iva;
$imponibile_documento = $imponibile - $sconto;
$totale_documento = $imponibile - $sconto + $totale_iva;

View File

@ -1,6 +1,6 @@
<?php
return [
'header-height' => '90',
'footer-height' => '70',
'header-height' => '80',
'footer-height' => '60',
];