1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-23 06:47:40 +01:00

Aggiunta stampa bilancio

This commit is contained in:
MatteoPistorello 2021-02-01 16:02:41 +01:00
parent 938bbd7d17
commit 07282fb4fc
5 changed files with 413 additions and 1 deletions

View File

@ -32,6 +32,7 @@ if ($bilancio_gia_aperto) {
echo '
<div class="text-right">
'.Prints::getLink('Bilancio', null, 'btn btn-lg btn-info', tr('Stampa bilancio'), 'fa fa-print').'
<button type="button" class="btn btn-lg '.$btn_class.'" data-op="apri-bilancio" data-title="'.tr('Apertura bilancio').'" data-backto="record-list" data-msg="'.$msg.'" data-button="'.tr('Riprendi saldi').'" data-class="btn btn-lg btn-warning" onclick="message( this );">
<i class="fa fa-folder-open"></i> '.tr('Apertura bilancio').'
</button>

300
templates/bilancio/body.php Normal file
View File

@ -0,0 +1,300 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
// Stato Patrimoniale
echo '
<h4>Stato Patrimoniale</h3>
<table>
<tr>
<td width="50%">
<table class="table table-striped table-bordered" style="font-size:10px; overflow:hidden;" id="contents">
<thead>
<tr>
<th colspan="3"><h5>Attività</h5></th>
</tr>
<tr>
<th width="15%">CONTO</th>
<th width="60%">DESCRIZIONE</th>
<th width="25%">SALDO</th>
</tr>
</thead>
<tbody>';
// Mostra le righe delle attività
foreach($liv2_patrimoniale as $liv2_p){
if($liv2_p['totale']>0){
$totale_attivita += $liv2_p['totale'];
echo '
<tr>
<td><b>'.$liv2_p['numero'].'</b></td>
<td><b>'.$liv2_p['descrizione'].'</b></td>
<td class="text-right"><b>'.numberFormat($liv2_p['totale']).'</b></td>
</tr>';
foreach($liv3_patrimoniale as $liv3_p){
// Visualizzo solo i conti di livello 3 relativi al conto di livello 2
if($liv2_p['id'] == $liv3_p['idpianodeiconti2']){
echo '
<tr>
<td>'.$liv3_p['numero'].'</td>
<td>'.$liv3_p['descrizione'].'</td>
<td class="text-right">'.numberFormat($liv3_p['totale']).'</td>
</tr>';
}
}
if($liv2_p['descrizione']=="Crediti clienti e crediti diversi"){
echo '
<tr>
<td></td>
<td>Clienti</td>
<td class="text-right">'.numberFormat($crediti_clienti).'</td>
</tr>';
} elseif($liv2_p['descrizione']=="Debiti fornitori e debiti diversi") {
echo '
<tr>
<td></td>
<td>Fornitori</td>
<td class="text-right">'.numberFormat($debiti_fornitori).'</td>
</tr>';
}
}
}
echo '
<tr>
<td colspan="2"><h6><b>Totale Attività</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_attivita)).'</b></h6></td>
</tr>';
if($utile_perdita>0){
echo '
<tr>
<td colspan="2"><h6><b>Perdita</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
</tr>
<tr>
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_attivita)+abs($utile_perdita)).'</b></h6></td>
</tr>';
}
echo '
</tbody>
</table>
</td>
<td width="50%">
<table class="table table-striped table-bordered" style="font-size:10px; overflow:hidden;" id="contents">
<thead>
<tr>
<th colspan="3"><h5>Passività</h5></th>
</tr>
<tr>
<th width="20%">CONTO</th>
<th width="55%">DESCRIZIONE</th>
<th width="25%">SALDO</th>
</tr>
</thead>
<tbody>';
$i=0;
// Mostra le righe delle passività
foreach($liv2_patrimoniale as $liv2_p){
if($liv2_p['totale']<0){
$totale_passivita += $liv2_p['totale'];
echo '
<tr>
<td><b>'.$liv2_p['numero'].'</b></td>
<td><b>'.$liv2_p['descrizione'].'</b></td>
<td class="text-right"><b>'.numberFormat(abs($liv2_p['totale'])).'</b></td>
</tr>';
foreach($liv3_patrimoniale as $liv3_p){
if($liv2_p['id'] == $liv3_p['idpianodeiconti2']){
echo '
<tr>
<td>'.$liv3_p['numero'].'</td>
<td>'.$liv3_p['descrizione'].'</td>
<td class="text-right">'.numberFormat(abs($liv3_p['totale'])).'</td>
</tr>';
}
}
if($liv2_p['descrizione']=="Crediti clienti e crediti diversi"){
echo '
<tr>
<td></td>
<td>Clienti</td>
<td class="text-right">'.numberFormat(abs($crediti_clienti)).'</td>
</tr>';
} elseif($liv2_p['descrizione']=="Debiti fornitori e debiti diversi") {
echo '
<tr>
<td></td>
<td>Fornitori</td>
<td class="text-right">'.numberFormat(abs($debiti_fornitori)).'</td>
</tr>';
}
}
}
echo '
<tr>
<td colspan="2"><h6><b>Totale Passività</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_passivita)).'</b></h6></td>
</tr>';
if($utile_perdita<0){
echo '
<tr>
<td colspan="2"><h6><b>Utile</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
</tr>
<tr>
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_passivita)+abs($utile_perdita)).'</b></h6></td>
</tr>';
}
echo '
</tbody>
</table>
</td>
</tr>
</table>';
// Conto economico
echo '
<pagebreak>
<h4>Conto Economico</h4>
<table>
<tr>
<td width="50%">
<table class="table table-striped table-bordered" style="font-size:10px; overflow:hidden;" id="contents">
<thead>
<tr>
<th colspan="3"><h5>Costi</h5></th>
</tr>
<tr>
<th width="15%">CONTO</th>
<th width="60%">DESCRIZIONE</th>
<th width="25%">SALDO</th>
</tr>
</thead>
<tbody>';
// Mostra le righe dei costi
foreach($liv2_economico as $liv2_e){
if($liv2_e['totale']>0){
$totale_costi += $liv2_e['totale'];
echo '
<tr>
<td><b>'.$liv2_e['numero'].'</b></td>
<td><b>'.$liv2_e['descrizione'].'</b></td>
<td class="text-right"><b>'.numberFormat($liv2_e['totale']).'</b></td>
</tr>';
foreach($liv3_economico as $liv3_e){
if($liv2_e['id'] == $liv3_e['idpianodeiconti2']){
echo '
<tr>
<td>'.$liv3_e['numero'].'</td>
<td>'.$liv3_e['descrizione'].'</td>
<td class="text-right">'.numberFormat($liv3_e['totale']).'</td>
</tr>';
}
}
}
}
echo '
<tr>
<td colspan="2"><h6><b>Totale costi</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_costi)).'</b></h6></td>
</tr>';
if($utile_perdita<0){
echo '
<tr>
<td colspan="2"><h6><b>Utile</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
</tr>
<tr>
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_costi)+abs($utile_perdita)).'</b></h6></td>
</tr>';
}
echo '
</tbody>
</table>
</td>
<td width="50%">
<table class="table table-striped table-bordered" style="font-size:10px; overflow:hidden;" id="contents">
<thead>
<tr>
<th colspan="3"><h5>Ricavi</h5></th>
</tr>
<tr>
<th width="15%">CONTO</th>
<th width="60%">DESCRIZIONE</th>
<th width="25%">SALDO</th>
</tr>
</thead>
<tbody>';
// Mostra le righe dei ricavi
foreach($liv2_economico as $liv2_e){
if($liv2_e['totale']<0){
$totale_ricavi += $liv2_e['totale'];
echo '
<tr>
<td><b>'.$liv2_e['numero'].'</b></td>
<td><b>'.$liv2_e['descrizione'].'</b></td>
<td class="text-right"><b>'.numberFormat(abs($liv2_e['totale'])).'</b></td>
</tr>';
foreach($liv3_economico as $liv3_e){
if($liv2_e['id'] == $liv3_e['idpianodeiconti2']){
echo '
<tr>
<td>'.$liv3_e['numero'].'</td>
<td>'.$liv3_e['descrizione'].'</td>
<td class="text-right">'.numberFormat(abs($liv3_e['totale'])).'</td>
</tr>';
}
}
}
}
echo '
<tr>
<td colspan="2"><h6><b>Totale ricavi</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_ricavi)).'</b></h6></td>
</tr>';
if($utile_perdita>0){
echo '
<tr>
<td colspan="2"><h6><b>Perdita</b></h6></td>
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
</tr>
<tr>
<td colspan="2"><h6><b>Totale a pareggio</b></td>
<td class="text-right"><h6><b>'.numberFormat(abs($totale_ricavi)+abs($utile_perdita)).'</b></h6></td>
</tr>';
}
echo '
</tbody>
</table>
</td>
</tr>
</table>';

View File

@ -0,0 +1,26 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
echo '
<h5 style="border-bottom:1px solid #777; display:block;">
<div class="col-xs-5">STAMPA BILANCIO <small>'.dateFormat($date_start).' - '.dateFormat($date_end).'</small></div>
<div class="col-xs-7 text-right">'.$azienda['ragione_sociale'].'</div>
</h5><br>
<h4 class="text-center">ESERCIZIO '.$esercizio.'</h4><br>';

View File

@ -0,0 +1,82 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Carbon\Carbon;
$azienda = $dbo->fetchOne('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica='.setting('Azienda predefinita'));
$date_start = $_SESSION['period_start'];
$date_end = $_SESSION['period_end'];
$esercizio = new Carbon($date_start);
$esercizio = $esercizio->format('Y');
$liv2_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
$liv2_economico = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
$liv3_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND idpianodeiconti2!='.prepare($fornitori).' AND co_pianodeiconti3.id NOT IN (SELECT idconto_cliente FROM an_anagrafiche) AND co_pianodeiconti3.id NOT IN (SELECT idconto_fornitore FROM an_anagrafiche) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti2.numero');
$liv3_economico = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti2.numero');
$utile_perdita = $dbo->fetchOne('SELECT SUM(totale) AS totale FROM `co_movimenti` WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico")))AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end))['totale'];
$debiti_fornitori = $dbo->fetchArray('
SELECT
co_pianodeiconti3.numero AS numero,
co_pianodeiconti3.descrizione AS descrizione,
SUM(totale) AS totale,
co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2
FROM
`co_movimenti`
INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id
INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id
WHERE
co_pianodeiconti2.descrizione="Debiti fornitori e debiti diversi"
AND co_pianodeiconti3.id IN (SELECT idconto_fornitore FROM an_anagrafiche)
AND co_movimenti.data>='.prepare($date_start).'
AND co_movimenti.data<='.prepare($date_end).'
GROUP BY
idconto
ORDER BY
co_pianodeiconti2.numero');
$debiti_fornitori = sum(array_column($debiti_fornitori, 'totale'));
$crediti_clienti = $dbo->fetchArray('
SELECT
co_pianodeiconti3.numero AS numero,
co_pianodeiconti3.descrizione AS descrizione,
SUM(totale) AS totale,
co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2
FROM
`co_movimenti`
INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id
INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id
WHERE
co_pianodeiconti2.descrizione="Crediti clienti e crediti diversi"
AND co_pianodeiconti3.id IN (SELECT idconto_cliente FROM an_anagrafiche)
AND co_movimenti.data>='.prepare($date_start).'
AND co_movimenti.data<='.prepare($date_end).'
GROUP BY
idconto
ORDER BY
co_pianodeiconti2.numero');
$crediti_clienti = sum(array_column($crediti_clienti, 'totale'));

View File

@ -76,4 +76,7 @@ ALTER TABLE `co_movimenti_modelli` ADD `totale` DECIMAL(15,6) NOT NULL AFTER `id
ALTER TABLE `co_preventivi` ADD `garanzia` TEXT NOT NULL AFTER `condizioni_fornitura`;
-- Modificata lunghezza campo Partita iva
ALTER TABLE `an_anagrafiche` CHANGE `piva` `piva` VARCHAR(16) NOT NULL;
ALTER TABLE `an_anagrafiche` CHANGE `piva` `piva` VARCHAR(16) NOT NULL;
-- Aggiunta stampa bilancio
INSERT INTO `zz_prints` (`id`, `id_module`, `is_record`, `name`, `title`, `filename`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `predefined`, `default`, `enabled`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE name='Piano dei conti'), '1', 'Bilancio', 'Bilancio', 'Bilancio', 'bilancio', '', '', 'fa fa-print', '', '', '0', '0', '1', '1');