From fa1dcef03cf499b6b628903930a0449f48c41ed1 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 15 Sep 2017 12:50:59 +0200 Subject: [PATCH] Aggiunta stampa dello spesometro --- modules/stampe_contabili/edit.php | 56 ++++-- pdfgen.php | 18 +- templates/base/settings.php | 4 +- templates/base/style.css | 5 +- .../registro_iva/pdfgen.registro_iva.php | 10 +- templates/spesometro/body.php | 181 ++++++++++++++++++ templates/spesometro/header.php | 17 ++ templates/spesometro/logo_azienda.jpg | Bin 0 -> 4348 bytes templates/spesometro/settings.php | 5 + 9 files changed, 270 insertions(+), 26 deletions(-) create mode 100644 templates/spesometro/body.php create mode 100644 templates/spesometro/header.php create mode 100644 templates/spesometro/logo_azienda.jpg create mode 100644 templates/spesometro/settings.php diff --git a/modules/stampe_contabili/edit.php b/modules/stampe_contabili/edit.php index 1b5a3cf3c..32141a102 100644 --- a/modules/stampe_contabili/edit.php +++ b/modules/stampe_contabili/edit.php @@ -3,24 +3,52 @@ include_once __DIR__.'/../../core.php'; echo ' -
-
-

'.tr('Registri iva').'

-
- -
-
-
- - '.tr('Stampa registro iva vendite').' - +
+
+
+
+

'.tr('Registri iva dal _START_ al _END_', [ + '_START_' => Translator::dateToLocale($_SESSION['period_start']), + '_END_' => Translator::dateToLocale($_SESSION['period_end']), + ]).'

-
+ +
+
+
+

'.tr('Spesometro dal _START_ al _END_', [ + '_START_' => Translator::dateToLocale($_SESSION['period_start']), + '_END_' => Translator::dateToLocale($_SESSION['period_end']), + ]).'

+
+ + +
+
'; diff --git a/pdfgen.php b/pdfgen.php index 2148b43ea..1d3bf3dd0 100644 --- a/pdfgen.php +++ b/pdfgen.php @@ -9,11 +9,11 @@ foreach ($get as $key => $value) { ${$key} = !empty(${$key}) ? ${$key} : $value; } -// Mostro o nascondo i costi dell'intervento... -$visualizza_costi = get_var('Visualizza i costi sulle stampe degli interventi'); +// Individuazione del formato della stampa +$old_format = file_exists($docroot.'/templates/'.$ptype.'/pdfgen.'.$ptype.'.php') || file_exists($docroot.'/templates/'.$ptype.'/custom/pdfgen.'.$ptype.'.php'); // Nuovo sistema di generazione stampe -if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { +if (!$old_format) { // Impostazioni di default if (file_exists($docroot.'/templates/base/custom/settings.php')) { $default = include $docroot.'/templates/base/custom/settings.php'; @@ -34,7 +34,7 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { // 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'; - } else { + } elseif (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { include $docroot.'/templates/'.$ptype.'/init.php'; } @@ -141,16 +141,19 @@ $mode = !empty($filename) ? 'F' : 'I'; $filename = !empty($filename) ? $filename : sanitizeFilename($report_name); $title = basename($filename); -if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { +if (!$old_format) { $styles = [ 'templates/base/bootstrap.css', 'templates/base/style.css', ]; + $settings['orientation'] = strtoupper($settings['orientation']) == 'L' ? 'L' : 'P'; + $settings['format'] = is_string($settings['format']) ? $settings['format'].($settings['orientation'] == 'L' ? '-L' : '') : $settings['format']; + // Instanziamento dell'oggetto mPDF $mpdf = new mPDF( 'c', - $settings['dimension'], + $settings['format'], $settings['font-size'], 'helvetica', $settings['margins']['left'], @@ -159,7 +162,7 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { $settings['margins']['bottom'] + $settings['footer-height'], $settings['margins']['top'], $settings['margins']['bottom'], - strtolower($settings['orientation']) == 'l' ? 'l' : 'p' + $settings['orientation'] ); // Impostazione di header e footer @@ -177,6 +180,7 @@ if (file_exists($docroot.'/templates/'.$ptype.'/init.php')) { // Impostazione del font-size $mpdf->WriteHTML('body {font-size: '.$settings['font-size'].'pt;}', 1); + $mpdf->shrink_tables_to_fit = 1; // Aggiunta dei contenuti $mpdf->WriteHTML($report); diff --git a/templates/base/settings.php b/templates/base/settings.php index 721e335c0..620835ef2 100644 --- a/templates/base/settings.php +++ b/templates/base/settings.php @@ -1,8 +1,8 @@ 'p', - 'dimension' => 'A4', + 'orientation' => 'L', + 'format' => 'A4', 'font-size' => 10, 'margins' => [ 'top' => 10, diff --git a/templates/base/style.css b/templates/base/style.css index 0043f9833..d62022afa 100644 --- a/templates/base/style.css +++ b/templates/base/style.css @@ -15,7 +15,9 @@ p { table { width: 100%; - overflow: wrap + overflow: wrap; + word-break: break-all; + word-wrap: break-word; } table td, @@ -24,6 +26,7 @@ table th { padding: 4px; } +.row-bg, table.table-striped tbody tr:nth-child(2n) td { background-color: #eee; } diff --git a/templates/registro_iva/pdfgen.registro_iva.php b/templates/registro_iva/pdfgen.registro_iva.php index 78c87ff04..6b7f382de 100644 --- a/templates/registro_iva/pdfgen.registro_iva.php +++ b/templates/registro_iva/pdfgen.registro_iva.php @@ -53,9 +53,15 @@ if ($dir == 'entrata') { $rs = $dbo->fetchArray($query); if ($dir == 'entrata') { - $body .= "REGISTRO IVA VENDITA

"; + $body .= "".tr('Registro iva vendita dal _START_ al _END_', [ + '_START_' => Translator::dateToLocale($_SESSION['period_start']), + '_END_' => Translator::dateToLocale($_SESSION['period_end']), + ], ['upper' => true]).'

'; } elseif ($dir == 'uscita') { - $body .= "REGISTRO IVA ACQUISTO

"; + $body .= "".tr('Registro iva acquisto dal _START_ al _END_', [ + '_START_' => Translator::dateToLocale($_SESSION['period_start']), + '_END_' => Translator::dateToLocale($_SESSION['period_end']), + ], ['upper' => true]).'

'; } $body .= " diff --git a/templates/spesometro/body.php b/templates/spesometro/body.php new file mode 100644 index 000000000..ee9bfefb1 --- /dev/null +++ b/templates/spesometro/body.php @@ -0,0 +1,181 @@ +".tr('Spesometro dal _START_ al _END_', [ + '_START_' => Translator::dateToLocale($_SESSION['period_start']), + '_END_' => Translator::dateToLocale($_SESSION['period_end']), +], ['upper' => true])." + + + + + + + + + + + + + + + '; + +$imponibile = []; +$iva = []; +$totale = []; + +$date_start = $_SESSION['period_start']; +$date_end = $_SESSION['period_end']; + +$anagrafiche = $dbo->fetchArray('SELECT idanagrafica, piva, ragione_sociale FROM `an_anagrafiche` WHERE `idanagrafica` IN (SELECT DISTINCT `idanagrafica` FROM `co_documenti` WHERE co_documenti.data>='.prepare($date_start).' AND co_documenti.data<='.prepare($date_end).' AND `co_documenti`.`id` IN (SELECT `iddocumento` FROM co_movimenti WHERE primanota = 1)) ORDER BY `ragione_sociale`'); + +foreach ($anagrafiche as $i => $anagrafica) { + $fatture = $dbo->fetchArray('SELECT `co_documenti`.*, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`idanagrafica` = '.prepare($anagrafica['idanagrafica']).' AND `co_documenti`.`id` IN (SELECT `iddocumento` FROM co_movimenti WHERE primanota = 1) AND co_documenti.data>='.prepare($date_start).' AND co_documenti.data<='.prepare($date_end).' ORDER BY `data`'); + + $num = 0; + foreach ($fatture as $key => $fattura) { + $righe = $dbo->fetchArray('SELECT `idiva`, `desc_iva`, SUM(subtotale) - SUM(sconto) AS imponibile, SUM(iva) AS iva, SUM(subtotale) - SUM(sconto) + SUM(iva) AS totale FROM `co_righe_documenti` WHERE iddocumento='.prepare($fattura['id']).' GROUP BY `idiva`, `desc_iva` ORDER BY `idiva`'); + + $fatture[$key]['righe'] = $righe; + $num += count($righe); + } + + $extra = ($i % 2) != 0 ? ' class="row-bg"' : ''; + + if ($num > 0) { + echo ' + + '; + + // Partita IVA + echo ' + '; + + $count = 0; + foreach ($fatture as $fattura) { + $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $fattura['tipo_documento'], + '_NUM_' => !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'], + '_DATE_' => Translator::dateToLocale($fattura['data']), + ]); + + // Documenti replicati per IVA + foreach ($fattura['righe'] as $riga) { + if ($count != 0) { + echo ' + '; + } + ++$count; + + // Documento + echo ' + '; + + // Descrizione IVA + echo ' + '; + + // Imponible + echo ' + '; + + // IVA + echo ' + '; + + // Totale + echo ' + + '; + + if (empty($iva[$riga['desc_iva']])) { + $iva[$riga['desc_iva']] = []; + } + + $imponibile[] = $riga['imponibile']; + $iva[$riga['desc_iva']][] = $riga['iva']; + $totale[] = $riga['totale']; + } + } + } +} + +echo ' + '; + +// Totale imponibile +echo ' + + + + + '; + +foreach ($iva as $desc => $values) { + $sum = sum($values); + // Totale IVA + echo ' + + + + +'; + + $totale_iva += $sum; +} + +// Totale IVA +echo ' + + + + + '; + +// TOTALE +echo ' + + + + '; + +echo ' +
".tr('P.Iva', [], ['upper' => true])."".tr('Ragione sociale', [], ['upper' => true])."".tr('Documento', [], ['upper' => true])."".tr('Aliquota', [], ['upper' => true])."".tr('Imponibile', [], ['upper' => true])."".tr('IVA', [], ['upper' => true])."".tr('Totale', [], ['upper' => true]).'
+ '.$anagrafica['ragione_sociale'].' + + '.$anagrafica['piva'].' + + '.$descrizione.' + + '.$riga['desc_iva'].' + + '.Translator::numberToLocale($riga['imponibile'], 2).' € + + '.Translator::numberToLocale($riga['iva'], 2).' € + + '.Translator::numberToLocale($riga['totale'], 2).' € +
+ '.tr('Imponibile', [], ['upper' => true]).': + + '.Translator::numberToLocale(sum($imponibile), 2).' € +
+ '.tr('IVA "_TYPE_"', [ + '_TYPE_' => $desc, + ], ['upper' => true]).': + + '.Translator::numberToLocale($sum, 2).' € +
+ '.tr('Totale IVA', [], ['upper' => true]).': + + '.Translator::numberToLocale($totale_iva, 2).' € +
+ '.tr('Totale', [], ['upper' => true]).': + + '.Translator::numberToLocale(sum($totale), 2).' € +
'; diff --git a/templates/spesometro/header.php b/templates/spesometro/header.php new file mode 100644 index 000000000..10edc41ab --- /dev/null +++ b/templates/spesometro/header.php @@ -0,0 +1,17 @@ + +
+
+

$f_ragionesociale$

+

$f_indirizzo$ $f_citta_full$

+

'.(!empty($f_piva) ? tr('P.Iva').': ' : '').'$f_piva$

+

'.(!empty($f_codicefiscale) ? tr('C.F.').': ' : '').'$f_codicefiscale$

+

'.(!empty($f_capsoc) ? tr('Cap.Soc.').': ' : '').'$f_capsoc$

+

'.(!empty($f_telefono) ? tr('Tel').': ' : '').'$f_telefono$

+
+
+ Logo +
+
'; diff --git a/templates/spesometro/logo_azienda.jpg b/templates/spesometro/logo_azienda.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fd3914522510a5f6af55ca002d656131577943f GIT binary patch literal 4348 zcmcIG2UJtpwl@VrCxoJO0wL0+iU>%N7AX=0X-XSViqaGWl->m-1e5`!S7|~75d=X3 zN^z7RHAo$0C`u6!6#_qDW_+&y)_d>IU-Qnn>)hSXzWeNb_t_uYp8?>f4KM}(2m}J0 zs1w+q08Rn)P&#@#C_OzLJq$+AzyxPvVq|3EVq<54AL2TE_z)Kl51*j8Fdx5|01uCd zjEETeh@_MxuduAVtc1L{gro$`2nYs)F)=W4GBI&V@bU0T{N=IV32-m~J|H;=hyws~ zfFK;8{VsqX009uHw;YHsSymH+?*e`4T3wM!=3P%0DwPvc>F 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 pzkP8z7RFBv 'L', +];