Miglioramento stampe Scadenzario e Registro IVA
Fix #622, riferimento a #537. Aggiunto supporto a stampe "a pezzi" per ridurre l'utilizzo della memoria.
This commit is contained in:
parent
606fce5f37
commit
7eda6ad01b
149
src/Prints.php
149
src/Prints.php
|
@ -382,35 +382,51 @@ class Prints
|
||||||
// Individuazione delle impostazioni finali
|
// Individuazione delle impostazioni finali
|
||||||
$settings = array_merge($default, (array) $custom);
|
$settings = array_merge($default, (array) $custom);
|
||||||
|
|
||||||
|
// Instanziamento dell'oggetto mPDF
|
||||||
|
$mpdf = new \Mpdf\Mpdf([
|
||||||
|
'mode' => 'utf-8',
|
||||||
|
'format' => $settings['format'],
|
||||||
|
'orientation' => strtoupper($settings['orientation']) == 'L' ? 'L' : 'P',
|
||||||
|
'font-size' => $settings['font-size'],
|
||||||
|
'margin_left' => $settings['margins']['left'],
|
||||||
|
'margin_right' => $settings['margins']['right'],
|
||||||
|
'margin_top' => $settings['margins']['top'] + $settings['header-height'],
|
||||||
|
'margin_bottom' => $settings['margins']['bottom'] + $settings['footer-height'],
|
||||||
|
'margin_header' => $settings['margins']['top'],
|
||||||
|
'margin_footer' => $settings['margins']['bottom'],
|
||||||
|
|
||||||
|
// Abilitazione per lo standard PDF/A
|
||||||
|
//'PDFA' => true,
|
||||||
|
//'PDFAauto' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$mode = !empty($filename) ? 'F' : 'I';
|
||||||
|
|
||||||
|
$filename = !empty($filename) ? $filename : sanitizeFilename($report_name);
|
||||||
|
$title = basename($filename);
|
||||||
|
|
||||||
|
// Impostazione del titolo del PDF
|
||||||
|
$mpdf->SetTitle($title);
|
||||||
|
|
||||||
|
// Inclusione dei fogli di stile CSS
|
||||||
|
$styles = [
|
||||||
|
'templates/base/bootstrap.css',
|
||||||
|
'templates/base/style.css',
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($styles as $value) {
|
||||||
|
$mpdf->WriteHTML(file_get_contents(DOCROOT.'/'.$value), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Impostazione del font-size
|
||||||
|
$mpdf->WriteHTML('body {font-size: '.$settings['font-size'].'pt;}', 1);
|
||||||
|
|
||||||
// Individuazione delle variabili fondamentali per la sostituzione dei contenuti
|
// Individuazione delle variabili fondamentali per la sostituzione dei contenuti
|
||||||
include self::filepath($id_print, 'init.php');
|
include self::filepath($id_print, 'init.php');
|
||||||
|
|
||||||
// Individuazione delle variabili per la sostituzione
|
// Individuazione delle variabili per la sostituzione
|
||||||
include DOCROOT.'/templates/info.php';
|
include DOCROOT.'/templates/info.php';
|
||||||
|
|
||||||
// Generazione dei contenuti della stampa
|
|
||||||
ob_start();
|
|
||||||
include self::filepath($id_print, 'body.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> </td>';
|
|
||||||
}
|
|
||||||
$result .= '
|
|
||||||
</tr>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$report = str_replace('|autofill|', $result, $report);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generazione dei contenuti dell'header
|
// Generazione dei contenuti dell'header
|
||||||
ob_start();
|
ob_start();
|
||||||
include self::filepath($id_print, 'header.php');
|
include self::filepath($id_print, 'header.php');
|
||||||
|
@ -430,53 +446,70 @@ class Prints
|
||||||
// Operazioni di sostituzione
|
// Operazioni di sostituzione
|
||||||
include DOCROOT.'/templates/replace.php';
|
include DOCROOT.'/templates/replace.php';
|
||||||
|
|
||||||
$mode = !empty($filename) ? 'F' : 'I';
|
|
||||||
|
|
||||||
$filename = !empty($filename) ? $filename : sanitizeFilename($report_name);
|
|
||||||
$title = basename($filename);
|
|
||||||
|
|
||||||
$styles = [
|
|
||||||
'templates/base/bootstrap.css',
|
|
||||||
'templates/base/style.css',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Instanziamento dell'oggetto mPDF
|
|
||||||
$mpdf = new \Mpdf\Mpdf([
|
|
||||||
'mode' => 'utf-8',
|
|
||||||
'format' => $settings['format'],
|
|
||||||
'orientation' => strtoupper($settings['orientation']) == 'L' ? 'L' : 'P',
|
|
||||||
'font-size' => $settings['font-size'],
|
|
||||||
'margin_left' => $settings['margins']['left'],
|
|
||||||
'margin_right' => $settings['margins']['right'],
|
|
||||||
'margin_top' => $settings['margins']['top'] + $settings['header-height'],
|
|
||||||
'margin_bottom' => $settings['margins']['bottom'] + $settings['footer-height'],
|
|
||||||
'margin_header' => $settings['margins']['top'],
|
|
||||||
'margin_footer' => $settings['margins']['bottom'],
|
|
||||||
|
|
||||||
// Abilitazione per lo standard PDF/A
|
|
||||||
//'PDFA' => true,
|
|
||||||
//'PDFAauto' => true,
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Impostazione di header e footer
|
// Impostazione di header e footer
|
||||||
$mpdf->SetHTMLFooter($foot);
|
$mpdf->SetHTMLFooter($foot);
|
||||||
$mpdf->SetHTMLHeader($head);
|
$mpdf->SetHTMLHeader($head);
|
||||||
|
|
||||||
// Impostazione del titolo del PDF
|
// Generazione dei contenuti della stampa
|
||||||
$mpdf->SetTitle($title);
|
// Generazione a singoli pezzi
|
||||||
|
$single_pieces = self::filepath($id_print, 'piece.php');
|
||||||
|
if (!empty($single_pieces)) {
|
||||||
|
ob_start();
|
||||||
|
include self::filepath($id_print, 'top.php');
|
||||||
|
$top = ob_get_clean();
|
||||||
|
|
||||||
// Inclusione dei fogli di stile CSS
|
$mpdf->WriteHTML($top);
|
||||||
foreach ($styles as $value) {
|
|
||||||
$mpdf->WriteHTML(file_get_contents(DOCROOT.'/'.$value), 1);
|
foreach ($records as $record) {
|
||||||
|
ob_start();
|
||||||
|
include self::filepath($id_print, 'piece.php');
|
||||||
|
$piece = ob_get_clean();
|
||||||
|
|
||||||
|
$mpdf->WriteHTML($piece);
|
||||||
|
}
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
include self::filepath($id_print, 'bottom.php');
|
||||||
|
$bottom = ob_get_clean();
|
||||||
|
|
||||||
|
$mpdf->WriteHTML($bottom);
|
||||||
|
|
||||||
|
$report = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Impostazione del font-size
|
// Generazione totale
|
||||||
$mpdf->WriteHTML('body {font-size: '.$settings['font-size'].'pt;}', 1);
|
else {
|
||||||
|
ob_start();
|
||||||
|
include self::filepath($id_print, 'body.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> </td>';
|
||||||
|
}
|
||||||
|
$result .= '
|
||||||
|
</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$report = str_replace('|autofill|', $result, $report);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Operazioni di sostituzione
|
||||||
|
include DOCROOT.'/templates/replace.php';
|
||||||
|
|
||||||
// Aggiunta dei contenuti
|
// Aggiunta dei contenuti
|
||||||
$mpdf->WriteHTML($report);
|
$mpdf->WriteHTML($report);
|
||||||
|
|
||||||
// Creazione effettiva del PDF
|
// Creazione effettiva del PDF
|
||||||
$mpdf->Output($filename, $mode);
|
$mpdf->Output($filename, $mode);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,133 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
|
||||||
|
|
||||||
$dir = $_GET['dir'];
|
|
||||||
if ($dir == 'entrata') {
|
|
||||||
$tipo = 'vendite';
|
|
||||||
} else {
|
|
||||||
$tipo = 'acquisti';
|
|
||||||
}
|
|
||||||
|
|
||||||
$report_name = 'registro_iva_'.$tipo.'.pdf';
|
|
||||||
|
|
||||||
$periodo = $_GET['periodo'];
|
|
||||||
|
|
||||||
$v_iva = [];
|
|
||||||
$v_totale = [];
|
|
||||||
|
|
||||||
$totale_iva = 0;
|
|
||||||
$totale_subtotale = 0;
|
|
||||||
|
|
||||||
$date_start = $_SESSION['period_start'];
|
|
||||||
$date_end = $_SESSION['period_end'];
|
|
||||||
|
|
||||||
$query = 'SELECT *, co_documenti.id AS id, IF(numero = "", numero_esterno, numero) AS numero, SUM(subtotale-co_righe_documenti.sconto) AS subtotale, SUM(iva) AS iva, an_anagrafiche.ragione_sociale, an_anagrafiche.codice AS codice_anagrafica FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id=co_righe_documenti.iddocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_iva ON co_righe_documenti.idiva=co_iva.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica WHERE dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data >= '.prepare($date_start).' AND co_documenti.data <= '.prepare($date_end).' GROUP BY co_documenti.id, co_righe_documenti.idiva ORDER BY co_documenti.id, co_documenti.'.(($dir == 'entrata') ? 'data' : 'numero');
|
|
||||||
$rs = $dbo->fetchArray($query);
|
|
||||||
|
|
||||||
if ('entrata' == $dir) {
|
|
||||||
echo "<span style='font-size:12pt;'><b>".tr('Registro iva vendita dal _START_ al _END_ _ESERCIZIO_', [
|
|
||||||
'_START_' => Translator::dateToLocale($date_start),
|
|
||||||
'_END_' => Translator::dateToLocale($date_end),
|
|
||||||
'_ESERCIZIO_' => (date('Y', strtotime($date_start)) == date('Y', strtotime($date_end)) ? '- Esercizio '.date('Y', strtotime($date_end)) : ''),
|
|
||||||
], ['upper' => true]).'</b></span><br><br>';
|
|
||||||
} elseif ('uscita' == $dir) {
|
|
||||||
echo "<span style='font-size:12pt;'><b>".tr('Registro iva acquisto dal _START_ al _END_ _ESERCIZIO_', [
|
|
||||||
'_START_' => Translator::dateToLocale($date_start),
|
|
||||||
'_END_' => Translator::dateToLocale($date_end),
|
|
||||||
'_ESERCIZIO_' => (date('Y', strtotime($date_start)) == date('Y', strtotime($date_end)) ? '- Esercizio '.date('Y', strtotime($date_end)) : ''),
|
|
||||||
], ['upper' => true]).'</b></span><br><br>';
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<table cellspacing='0' style='table-layout:fixed;'>
|
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th bgcolor='#dddddd'>N<sup>o</sup> prot.</th>
|
|
||||||
<th bgcolor='#dddddd'>N<sup>o</sup> doc.</th>
|
|
||||||
<th bgcolor='#dddddd'>Data</th>
|
|
||||||
<th bgcolor='#dddddd'>Tipo</th>
|
|
||||||
<th bgcolor='#dddddd'>".(($dir == 'entrata') ? 'Cliente' : 'Fornitore')."</th>
|
|
||||||
<th bgcolor='#dddddd'>Tot doc.</th>
|
|
||||||
<th bgcolor='#dddddd'>Imponibile</th>
|
|
||||||
<th bgcolor='#dddddd'>%</th>
|
|
||||||
<th bgcolor='#dddddd'>Iva</th>
|
|
||||||
<th bgcolor='#dddddd'>Imposta</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
";
|
|
||||||
|
|
||||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
||||||
echo ' <tr>';
|
|
||||||
|
|
||||||
if ($rs[$i]['numero'] == $rs[$i - 1]['numero']) {
|
|
||||||
echo ' <td></td>';
|
|
||||||
echo ' <td></td>';
|
|
||||||
echo ' <td></td>';
|
|
||||||
echo ' <td></td>';
|
|
||||||
echo ' <td></td>';
|
|
||||||
echo ' <td></td>';
|
|
||||||
} else {
|
|
||||||
echo ' <td>'.(($dir == 'uscita') ? $rs[$i]['numero'] : '-').'</td>';
|
|
||||||
echo ' <td>'.$rs[$i]['numero_esterno'].'</td>';
|
|
||||||
echo ' <td>'.date('d/m/Y', strtotime($rs[$i]['data'])).'</td>';
|
|
||||||
echo ' <td>'.$rs[$i]['codice_tipo_documento_fe'].'</td>';
|
|
||||||
echo ' <td>'.$rs[$i]['codice_anagrafica'].' / '.tr($rs[$i]['ragione_sociale'], [], ['upper' => true]).'</td>';
|
|
||||||
echo " <td class='text-right'>".moneyFormat(get_totale_fattura($rs[$i]['iddocumento'])).'</td>';
|
|
||||||
}
|
|
||||||
|
|
||||||
echo " <td class='text-right'>".moneyFormat($rs[$i]['subtotale']).'</td>';
|
|
||||||
echo " <td class='text-center'>".Translator::numberToLocale($rs[$i]['percentuale'], 0).'</td>';
|
|
||||||
echo " <td class='text-center'>".$rs[$i]['desc_iva'].'</td>';
|
|
||||||
echo " <td class='text-right'>".moneyFormat($rs[$i]['iva']).'</td>';
|
|
||||||
echo ' </tr>';
|
|
||||||
|
|
||||||
$v_iva[$rs[$i]['desc_iva']] += $rs[$i]['iva'];
|
|
||||||
$v_totale[$rs[$i]['desc_iva']] += $rs[$i]['subtotale'];
|
|
||||||
|
|
||||||
$totale_iva += $rs[$i]['iva'];
|
|
||||||
$totale_subtotale += $rs[$i]['subtotale'];
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '
|
|
||||||
</table>';
|
|
||||||
|
|
||||||
echo " <br><br><span style='font-size:12pt;'><b>RIEPILOGO IVA</b></span><br><br>";
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<table cellspacing='0' style='table-layout:fixed;' style='width:50%'>
|
|
||||||
<tr>
|
|
||||||
<th bgcolor='#dddddd'>Iva</th>
|
|
||||||
<th bgcolor='#dddddd'>Imponibile</th>
|
|
||||||
<th bgcolor='#dddddd'>Imposta</th>
|
|
||||||
</tr>
|
|
||||||
";
|
|
||||||
|
|
||||||
foreach ($v_iva as $desc_iva => $tot_iva) {
|
|
||||||
if ('' != $desc_iva) {
|
|
||||||
echo "
|
|
||||||
<tr>
|
|
||||||
<td valign='top'>\n";
|
|
||||||
echo $desc_iva."\n";
|
|
||||||
echo " </td>\n";
|
|
||||||
|
|
||||||
echo " <td valign='top' align='right'>\n";
|
|
||||||
echo moneyFormat($v_totale[$desc_iva])."\n";
|
|
||||||
echo " </td>\n";
|
|
||||||
|
|
||||||
echo " <td valign='top' align='right'>\n";
|
|
||||||
echo moneyFormat($v_iva[$desc_iva])."\n";
|
|
||||||
echo " </td>
|
|
||||||
</tr>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
echo " <tr bgcolor='#dddddd'>
|
|
||||||
<td><b>TOTALE</b></td>
|
|
||||||
<td class='text-right'>".moneyFormat($totale_subtotale)."</td>
|
|
||||||
<td class='text-right'>".moneyFormat($totale_iva).'</td>
|
|
||||||
</tr>';
|
|
||||||
|
|
||||||
echo '
|
|
||||||
</table>';
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
$totale_iva = sum(array_column($records, 'iva'));
|
||||||
|
$totale_subtotale = sum(array_column($records, 'subtotale'));
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
<h4><b>'.tr('Riepilogo IVA', [], ['upper' => true]).'</b></h4>
|
||||||
|
|
||||||
|
<table class="table" style="width:50%">
|
||||||
|
<thead>
|
||||||
|
<tr bgcolor="#dddddd">
|
||||||
|
<th>'.tr('Iva').'</th>
|
||||||
|
<th class="text-center">'.tr('Imponibile').'</th>
|
||||||
|
<th class="text-center">'.tr('Imposta').'</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($iva as $descrizione => $tot_iva) {
|
||||||
|
if (!empty($descrizione)) {
|
||||||
|
$somma_iva = sum($iva[$descrizione]);
|
||||||
|
$somma_totale = sum($totale[$descrizione]);
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
'.$descrizione.'
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="text-right">
|
||||||
|
'.moneyFormat($somma_totale).'
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="text-right">
|
||||||
|
'.moneyFormat($somma_totale).'
|
||||||
|
</td>
|
||||||
|
</tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
|
||||||
|
<tr bgcolor="#dddddd">
|
||||||
|
<td class="text-right">
|
||||||
|
<b>'.tr('Totale', [], ['upper' => true]).':</b>
|
||||||
|
</td>
|
||||||
|
<td class="text-right">'.moneyFormat($totale_subtotale).'</td>
|
||||||
|
<td class="text-right">'.moneyFormat($totale_iva).'</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>';
|
||||||
|
|
|
@ -4,7 +4,7 @@ echo '
|
||||||
<table style="color:#aaa; font-size:10px;">
|
<table style="color:#aaa; font-size:10px;">
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left" style="width:97mm;">
|
<td align="left" style="width:97mm;">
|
||||||
'.tr('Stampato con OpenSTAManager il _DATA_', ['_DATA_' => date('d/m/Y')]).'
|
'.tr('Stampato con OpenSTAManager il _DATE_', ['_DATE_' => date('d/m/Y')]).'
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td align="right" style="width:97mm;">
|
<td align="right" style="width:97mm;">
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
echo '
|
|
||||||
<!-- Intestazione fornitore -->
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p><b>$f_ragionesociale$</b></p>
|
|
||||||
<p>$f_indirizzo$ $f_citta_full$</p>
|
|
||||||
<p>'.(!empty($f_piva) ? tr('P.Iva').': ' : '').'$f_piva$</p>
|
|
||||||
<p>'.(!empty($f_codicefiscale) ? tr('C.F.').': ' : '').'$f_codicefiscale$</p>
|
|
||||||
<p>'.(!empty($f_capsoc) ? tr('Cap.Soc.').': ' : '').'$f_capsoc$</p>
|
|
||||||
<p>'.(!empty($f_telefono) ? tr('Tel').': ' : '').'$f_telefono$</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 text-right">
|
|
||||||
<img src="$logo$" alt="Logo" border="0"/>
|
|
||||||
</div>
|
|
||||||
</div>';
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
$dir = $_GET['dir'];
|
||||||
|
|
||||||
|
$date_start = $_SESSION['period_start'];
|
||||||
|
$date_end = $_SESSION['period_end'];
|
||||||
|
|
||||||
|
$tipo = $dir == 'entrata' ? 'vendite': 'acquisti';
|
||||||
|
$report_name = 'registro_iva_'.$tipo.'.pdf';
|
||||||
|
|
||||||
|
$v_iva = [];
|
||||||
|
$v_totale = [];
|
||||||
|
|
||||||
|
$query = 'SELECT *,
|
||||||
|
co_documenti.id AS id,
|
||||||
|
IF(numero = "", numero_esterno, numero) AS numero,
|
||||||
|
SUM(subtotale - sconto) AS subtotale,
|
||||||
|
(SELECT SUM(subtotale - sconto + iva + rivalsainps - ritenutaacconto) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento) + co_documenti.iva_rivalsainps AS totale,
|
||||||
|
SUM(iva) AS iva, an_anagrafiche.ragione_sociale,
|
||||||
|
an_anagrafiche.codice AS codice_anagrafica
|
||||||
|
FROM co_documenti
|
||||||
|
INNER JOIN co_righe_documenti ON co_documenti.id=co_righe_documenti.iddocumento
|
||||||
|
INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id
|
||||||
|
INNER JOIN co_iva ON co_righe_documenti.idiva=co_iva.id
|
||||||
|
INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica
|
||||||
|
WHERE dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data >= '.prepare($date_start).' AND co_documenti.data <= '.prepare($date_end).'
|
||||||
|
GROUP BY co_documenti.id, co_righe_documenti.idiva
|
||||||
|
ORDER BY co_documenti.id, co_documenti.'.(($dir == 'entrata') ? 'data' : 'numero');
|
||||||
|
$records = $dbo->fetchArray($query);
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<tr>';
|
||||||
|
|
||||||
|
$previous_number = $previous_number ?: null;
|
||||||
|
if ($record['numero'] == $previous_number) {
|
||||||
|
echo '
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>';
|
||||||
|
} else {
|
||||||
|
echo '
|
||||||
|
<td>'.(($dir == 'uscita') ? $record['numero'] : '-').'</td>
|
||||||
|
<td>'.$record['numero_esterno'].'</td>
|
||||||
|
<td>'.Translator::numbertoLocale($record['data']).'</td>
|
||||||
|
<td>'.$record['codice_tipo_documento_fe'].'</td>
|
||||||
|
<td>'.$record['codice_anagrafica'].' / '.tr($record['ragione_sociale'], [], ['upper' => true]).'</td>
|
||||||
|
<td>'.moneyFormat($record['totale']).'</td>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<td class="text-right">'.moneyFormat($record['subtotale']).'</td>
|
||||||
|
<td class="text-center">'.Translator::numberToLocale($record['percentuale'], 0).'</td>
|
||||||
|
<td class="text-center">'.$record['desc_iva'].'</td>
|
||||||
|
<td class="text-right">'.moneyFormat($record['iva']).'</td>
|
||||||
|
</tr>';
|
||||||
|
|
||||||
|
$previous_number = $record['numero'];
|
||||||
|
|
||||||
|
$iva[$record['desc_iva']][] = $record['iva'];
|
||||||
|
$totale[$record['desc_iva']][] = $record['subtotale'];
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
$year_start = date('Y', strtotime($date_start));
|
||||||
|
$year_end = date('Y', strtotime($date_end));
|
||||||
|
|
||||||
|
$esercizio = $year_start == $year_end ? ' - '.tr('Esercizio _YEAR_',[
|
||||||
|
'_YEAR_' => $year_end,
|
||||||
|
]) : '';
|
||||||
|
|
||||||
|
if ('entrata' == $dir) {
|
||||||
|
$titolo = tr('Registro iva vendita dal _START_ al _END_', [
|
||||||
|
'_START_' => Translator::dateToLocale($date_start),
|
||||||
|
'_END_' => Translator::dateToLocale($date_end),
|
||||||
|
], ['upper' => true]);
|
||||||
|
} elseif ('uscita' == $dir) {
|
||||||
|
$titolo = tr('Registro iva acquisto dal _START_ al _END_', [
|
||||||
|
'_START_' => Translator::dateToLocale($date_start),
|
||||||
|
'_END_' => Translator::dateToLocale($date_end),
|
||||||
|
], ['upper' => true]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tipo = $dir == "entrata" ? tr("Cliente") : tr("Fornitore");
|
||||||
|
|
||||||
|
echo '<h4><b>'.$titolo.'</b></h4>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr bgcolor="#dddddd">
|
||||||
|
<th>'.tr('N<sup>o</sup> prot.').'</th>
|
||||||
|
<th>'.tr('N<sup>o</sup> doc.').'</th>
|
||||||
|
<th>'.tr('Data').'</th>
|
||||||
|
<th>'.tr('Tipo').'</th>
|
||||||
|
<th>'.$tipo.'</th>
|
||||||
|
<th>'.tr('Tot doc.').'</th>
|
||||||
|
<th>'.tr('Imponibile').'</th>
|
||||||
|
<th>%</th>
|
||||||
|
<th>'.tr('Iva').'</th>
|
||||||
|
<th>'.tr('Imposta').'</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>';
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
$totale_da_pagare = sum(array_column($records, 'Importo'));
|
||||||
|
$totale_pagato = sum(array_column($records, 'Pagato'));
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" class="text-right">
|
||||||
|
<b>'.tr('Totale', [], ['upper' => true]).':</b>
|
||||||
|
</td>
|
||||||
|
<td class="text-right">'.moneyFormat($totale_da_pagare, 2).'</td>
|
||||||
|
<td class="text-right">'.moneyFormat($totale_pagato, 2).'</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>';
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<table style="color:#aaa; font-size:10px;">
|
||||||
|
<tr>
|
||||||
|
<td align="left" style="width:97mm;">
|
||||||
|
'.tr('Stampato con OpenSTAManager il _DATE_', ['_DATE_' => date('d/m/Y')]).'
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td align="right" style="width:97mm;">
|
||||||
|
'.tr('Pagina _PAGE_ di _TOTAL_', [
|
||||||
|
'_PAGE_' => '{PAGENO}',
|
||||||
|
'_TOTAL_' => '{nb}',
|
||||||
|
]).'
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>';
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
$report_name = 'Scadenzario_Totale.pdf';
|
||||||
|
|
||||||
|
$module_name = 'Scadenzario';
|
||||||
|
$date_start = $_SESSION['period_start'];
|
||||||
|
$date_end = $_SESSION['period_end'];
|
||||||
|
|
||||||
|
$module = Modules::get('Scadenzario');
|
||||||
|
$id_module = $module['id'];
|
||||||
|
|
||||||
|
$total = Util\Query::readQuery($module);
|
||||||
|
|
||||||
|
// Lettura parametri modulo
|
||||||
|
$module_query = $total['query'];
|
||||||
|
|
||||||
|
$search_filters = [];
|
||||||
|
|
||||||
|
if (is_array($_SESSION['module_'.$id_module])) {
|
||||||
|
foreach ($_SESSION['module_'.$id_module] as $field => $value) {
|
||||||
|
if (!empty($value) && starts_with($field, 'search_')) {
|
||||||
|
$field_name = str_replace('search_', '', $field);
|
||||||
|
$field_name = str_replace('__', ' ', $field_name);
|
||||||
|
$field_name = str_replace('-', ' ', $field_name);
|
||||||
|
array_push($search_filters, '`'.$field_name.'` LIKE "%'.$value.'%"');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($search_filters)) {
|
||||||
|
$module_query = str_replace('2=2', '2=2 AND ('.implode(' AND ', $search_filters).') ', $module_query);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filtri derivanti dai permessi (eventuali)
|
||||||
|
$module_query = Modules::replaceAdditionals($id_module, $module_query);
|
||||||
|
|
||||||
|
// Scadenze
|
||||||
|
$records = $dbo->fetchArray($module_query);
|
|
@ -1,97 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
|
||||||
|
|
||||||
$module_name = 'Scadenzario';
|
|
||||||
$date_start = $_SESSION['period_start'];
|
|
||||||
$date_end = $_SESSION['period_end'];
|
|
||||||
|
|
||||||
$module = Modules::get('Scadenzario');
|
|
||||||
$id_module = $module['id'];
|
|
||||||
|
|
||||||
$total = Util\Query::readQuery($module);
|
|
||||||
|
|
||||||
// Lettura parametri modulo
|
|
||||||
$module_query = $total['query'];
|
|
||||||
|
|
||||||
$search_filters = [];
|
|
||||||
|
|
||||||
if (is_array($_SESSION['module_'.$id_module])) {
|
|
||||||
foreach ($_SESSION['module_'.$id_module] as $field => $value) {
|
|
||||||
if (!empty($value) && starts_with($field, 'search_')) {
|
|
||||||
$field_name = str_replace('search_', '', $field);
|
|
||||||
$field_name = str_replace('__', ' ', $field_name);
|
|
||||||
$field_name = str_replace('-', ' ', $field_name);
|
|
||||||
array_push($search_filters, '`'.$field_name.'` LIKE "%'.$value.'%"');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($search_filters)) {
|
|
||||||
$module_query = str_replace('2=2', '2=2 AND ('.implode(' AND ', $search_filters).') ', $module_query);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filtri derivanti dai permessi (eventuali)
|
|
||||||
$module_query = Modules::replaceAdditionals($id_module, $module_query);
|
|
||||||
|
|
||||||
$scadenze = $dbo->fetchArray($module_query);
|
|
||||||
|
|
||||||
// carica report html
|
|
||||||
$report = file_get_contents($docroot.'/templates/scadenzario/scadenzario.html');
|
|
||||||
$body = file_get_contents($docroot.'/templates/scadenzario/scadenzario_body.html');
|
|
||||||
|
|
||||||
include_once $docroot.'/templates/pdfgen_variables.php';
|
|
||||||
|
|
||||||
//Filtro in base al segmento
|
|
||||||
$id_segment = $_SESSION['module_'.$id_module]['id_segment'];
|
|
||||||
$rs_segment = $dbo->fetchArray('SELECT * FROM zz_segments WHERE id='.prepare($id_segment));
|
|
||||||
|
|
||||||
$add_where = 'AND '.$rs_segment[0]['clause'];
|
|
||||||
|
|
||||||
$body .= '<h3>'.$titolo.' dal '.Translator::dateToLocale($date_start).' al '.Translator::dateToLocale($date_end)."</h3>\n";
|
|
||||||
$body .= "<table class=\"table_values\" cellspacing=\"0\" border=\"0\" cellpadding=\"0\" style=\"table-layout:fixed; border-color:#aaa;\">\n";
|
|
||||||
$body .= "<col width=\"300\"><col width=\"200\"><col width=\"150\"><col width=\"50\"><col width=\"70\"><col width=\"70\">\n";
|
|
||||||
|
|
||||||
$body .= "<thead>\n";
|
|
||||||
$body .= " <tr>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Documento</th>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Anagrafica</th>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Tipo di pagamento</th>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Data scadenza</th>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Importo</th>\n";
|
|
||||||
$body .= " <th style='padding:2mm; background:#eee;'>Già pagato</th>\n";
|
|
||||||
$body .= " </tr>\n";
|
|
||||||
$body .= "</thead>\n";
|
|
||||||
|
|
||||||
$body .= "<tbody>\n";
|
|
||||||
|
|
||||||
/*$rs = $dbo->fetchArray("SELECT co_scadenziario.id AS id, ragione_sociale AS `Anagrafica`, co_pagamenti.descrizione AS `Tipo di pagamento`, CONCAT( co_tipidocumento.descrizione, CONCAT( ' numero ', IF(numero_esterno<>'', numero_esterno, numero) ) ) AS `Documento`, DATE_FORMAT(data_emissione, '%d/%m/%Y') AS `Data emissione`, DATE_FORMAT(scadenza, '%d/%m/%Y') AS `Data scadenza`, da_pagare AS `Importo`, pagato AS `Pagato`, IF(scadenza<NOW(), '#ff7777', '') AS _bg_ FROM co_scadenziario
|
|
||||||
INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id
|
|
||||||
INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica
|
|
||||||
INNER JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id
|
|
||||||
INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id
|
|
||||||
WHERE ABS(pagato) < ABS(da_pagare) ".$add_where." AND scadenza >= '".$date_start."' AND scadenza <= '".$date_end."' ORDER BY scadenza ASC");*/
|
|
||||||
|
|
||||||
for ($i = 0; $i < sizeof($scadenze); ++$i) {
|
|
||||||
$body .= ' <tr>';
|
|
||||||
$body .= ' <td>'.$scadenze[$i]['Rif. Fattura'].'<br><small>'.Translator::dateToLocale($scadenze[$i]['Data emissione'])."</small></td>\n";
|
|
||||||
$body .= ' <td>'.$scadenze[$i]['Anagrafica']."</td>\n";
|
|
||||||
$body .= ' <td>'.$scadenze[$i]['Tipo di pagamento']."</td>\n";
|
|
||||||
$body .= " <td align='center'>".Translator::dateToLocale($scadenze[$i]['Data scadenza'])."</td>\n";
|
|
||||||
$body .= " <td align='right'>".moneyFormat($scadenze[$i]['Importo'], 2)."</td>\n";
|
|
||||||
$body .= " <td align='right'>".moneyFormat($scadenze[$i]['Pagato'], 2)."</td>\n";
|
|
||||||
$body .= " </tr>\n";
|
|
||||||
|
|
||||||
$totale_da_pagare += $scadenze[$i]['Importo'];
|
|
||||||
$totale_pagato += $scadenze[$i]['Pagato'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$body .= " <tr>\n";
|
|
||||||
$body .= " <td colspan='4' align='right'><b>TOTALE:</b></td><td align='right'>".moneyFormat($totale_da_pagare, 2)."</td><td align='right'>".moneyFormat($totale_pagato, 2)."</td>\n";
|
|
||||||
$body .= " </tr>\n";
|
|
||||||
|
|
||||||
$body .= "</tbody>\n";
|
|
||||||
$body .= "</table>\n";
|
|
||||||
|
|
||||||
$orientation = 'L';
|
|
||||||
$report_name = 'Scadenzario_Totale.pdf';
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
'.$record['Rif. Fattura'].'<br>
|
||||||
|
<small>'.Translator::dateToLocale($record['Data emissione']).'</small>
|
||||||
|
</td>
|
||||||
|
<td>'.$record['Anagrafica'].'</td>
|
||||||
|
<td>'.$record['Tipo di pagamento'].'</td>
|
||||||
|
<td class="text-center">'.Translator::dateToLocale($record['Data scadenza']).'</td>
|
||||||
|
<td class="text-right">'.moneyFormat($record['Importo'], 2).'</td>
|
||||||
|
<td class="text-right">'.moneyFormat($record['Pagato'], 2).'</td>
|
||||||
|
</tr>';
|
|
@ -1,12 +0,0 @@
|
||||||
<style>
|
|
||||||
<!--
|
|
||||||
.table_values td{
|
|
||||||
border: 1px solid #888;
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
-->
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<page backcolor="#ffffff" backtop="0mm" backbottom="10mm" backleft="10mm" backright="10mm" footer="" style="font-size: $font_size$">
|
|
||||||
$body$
|
|
||||||
</page>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<page_header>
|
|
||||||
|
|
||||||
</page_header>
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'orientation' => 'L',
|
||||||
|
'font-size' => '11pt',
|
||||||
|
];
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<h4><b>'.tr('Scadenze dal _START_ al _END_', [
|
||||||
|
'_START_' => Translator::dateToLocale($date_start),
|
||||||
|
'_END_' => Translator::dateToLocale($date_end),
|
||||||
|
], ['upper' => true]).'</b></h4>
|
||||||
|
|
||||||
|
<table class="table table-striped table-bordered" id="contents">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width="10%">'.tr('Documento', [], ['upper' => true]).'</th>
|
||||||
|
<th width="30%">'.tr('Anagrafica', [], ['upper' => true]).'</th>
|
||||||
|
<th width="30%">'.tr('Tipo di pagamento', [], ['upper' => true]).'</th>
|
||||||
|
<th width="10%" class="text-center">'.tr('Data scadenza', [], ['upper' => true]).'</th>
|
||||||
|
<th width="10%" class="text-center">'.tr('Importo', [], ['upper' => true]).'</th>
|
||||||
|
<th width="10%" class="text-center">'.tr('Già pagato', [], ['upper' => true]).'</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>';
|
|
@ -208,3 +208,14 @@ UPDATE `zz_views` SET `query` = '`fe_stati_documento`.`descrizione`' WHERE `name
|
||||||
|
|
||||||
-- Impostazione per la lunghezza delle pagine Datatables
|
-- Impostazione per la lunghezza delle pagine Datatables
|
||||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Lunghezza in pagine del buffer Datatables', '10', 'decimal', 0, 'Generali', 1);
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Lunghezza in pagine del buffer Datatables', '10', 'decimal', 0, 'Generali', 1);
|
||||||
|
|
||||||
|
-- Miglioramento query Scadenzario
|
||||||
|
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenziario`
|
||||||
|
LEFT JOIN `co_documenti` ON `co_scadenziario`.`iddocumento` = `co_documenti`.`id`
|
||||||
|
LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
|
||||||
|
LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id`
|
||||||
|
LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`
|
||||||
|
LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
|
||||||
|
WHERE 1=1 AND ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`) AND `co_statidocumento`.`descrizione` IN(''Emessa'',''Parzialmente pagato'')
|
||||||
|
HAVING 2=2
|
||||||
|
ORDER BY `scadenza` ASC' WHERE `name` = 'Scadenzario';
|
||||||
|
|
Loading…
Reference in New Issue