2017-08-04 16:28:16 +02:00
< ? php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager : il software gestionale open source per l ' assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright ( C ) DevCode s . r . l .
2020-09-07 15:04:06 +02:00
*
* 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 />.
*/
2017-08-04 16:28:16 +02:00
include_once __DIR__ . '/../../core.php' ;
2019-12-21 19:07:02 +01:00
use Modules\PrimaNota\Mastrino ;
use Modules\PrimaNota\Movimento ;
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
// Aggiunta nuovo conto nel partitario
case 'add' :
2021-07-02 10:20:07 +02:00
$id_conto = post ( 'id_conto' );
2017-08-04 16:28:16 +02:00
$numero = post ( 'numero' );
$descrizione = post ( 'descrizione' );
2021-07-02 10:20:07 +02:00
$lvl = post ( 'lvl' );
2017-08-04 16:28:16 +02:00
2021-07-02 10:20:07 +02:00
if ( post ( 'id_conto' ) !== null ) {
2021-07-07 07:57:10 +02:00
if ( $lvl == '2' ) {
2021-07-02 10:20:07 +02:00
// Controllo che non sia stato usato un numero non valido del conto
$query = 'SELECT idpianodeiconti1, numero FROM co_pianodeiconti2 WHERE numero=' . prepare ( $numero ) . ' AND idpianodeiconti1=' . prepare ( $id_conto );
$rs = $dbo -> fetchArray ( $query );
2017-08-04 16:28:16 +02:00
2021-07-02 10:20:07 +02:00
if ( sizeof ( $rs ) == 0 ) {
$query = 'INSERT INTO co_pianodeiconti2(numero, descrizione, idpianodeiconti1) VALUES(' . prepare ( $numero ) . ', ' . prepare ( $descrizione ) . ', ' . prepare ( $id_conto ) . ')' ;
}
2021-07-07 07:57:10 +02:00
} else {
2021-07-02 10:20:07 +02:00
// Controllo che non sia stato usato un numero non valido del conto
$query = 'SELECT idpianodeiconti2, numero FROM co_pianodeiconti3 WHERE numero=' . prepare ( $numero ) . ' AND idpianodeiconti2=' . prepare ( $id_conto );
$rs = $dbo -> fetchArray ( $query );
2017-08-04 16:28:16 +02:00
2021-07-02 10:20:07 +02:00
if ( sizeof ( $rs ) == 0 ) {
$query = 'INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, dir) VALUES(' . prepare ( $numero ) . ', ' . prepare ( $descrizione ) . ', ' . prepare ( $id_conto ) . ', (SELECT dir FROM co_pianodeiconti2 WHERE id=' . prepare ( $id_conto ) . '))' ;
2017-08-04 16:28:16 +02:00
}
2021-07-02 10:20:07 +02:00
}
if ( $dbo -> query ( $query )) {
flash () -> info ( tr ( 'Nuovo conto aggiunto!' ));
2017-08-04 16:28:16 +02:00
} else {
2021-07-07 07:57:10 +02:00
flash () -> error ( tr ( 'Il numero scelto è già esistente!' ));
2017-08-04 16:28:16 +02:00
}
}
2019-03-01 13:11:08 +01:00
2017-08-04 16:28:16 +02:00
break ;
2019-12-27 10:28:53 +01:00
// Modifica conto di livello 2 e 3 nel partitario
2017-08-04 16:28:16 +02:00
case 'edit' :
$idconto = post ( 'idconto' );
2019-12-27 10:28:53 +01:00
$idpianodeiconti = post ( 'idpianodeiconti' );
2017-08-04 16:28:16 +02:00
$numero = post ( 'numero' );
$descrizione = post ( 'descrizione' );
2020-08-11 17:41:16 +02:00
$dir = post ( 'dir' );
2017-08-04 16:28:16 +02:00
2019-12-27 10:28:53 +01:00
$lvl = post ( 'lvl' );
2020-01-03 17:11:15 +01:00
if ( $lvl == 2 ) {
2019-12-27 10:28:53 +01:00
$duplicate_query = 'SELECT numero FROM co_pianodeiconti2 WHERE numero=' . prepare ( $numero ) . ' AND NOT id=' . prepare ( $idconto ) . ' AND idpianodeiconti1=' . prepare ( $idpianodeiconti );
2017-08-04 16:28:16 +02:00
2020-08-11 17:41:16 +02:00
$update_query = 'UPDATE co_pianodeiconti2 SET numero=' . prepare ( $numero ) . ', descrizione=' . prepare ( $descrizione ) . ', dir=' . prepare ( $dir ) . ' WHERE id=' . prepare ( $idconto );
2019-12-27 10:28:53 +01:00
} else {
$duplicate_query = 'SELECT idpianodeiconti2, numero FROM co_pianodeiconti3 WHERE numero=' . prepare ( $numero ) . ' AND NOT id=' . prepare ( $idconto ) . ' AND idpianodeiconti2=' . prepare ( $idpianodeiconti );
2017-08-04 16:28:16 +02:00
2020-08-05 17:58:54 +02:00
$update_query = 'UPDATE co_pianodeiconti3 SET numero=' . prepare ( $numero ) . ', descrizione=' . prepare ( $descrizione ) . ', percentuale_deducibile=' . prepare ( post ( 'percentuale_deducibile' )) . ' WHERE id=' . prepare ( $idconto );
2019-12-27 10:28:53 +01:00
}
// Controllo che non sia stato usato un numero non valido del conto
if ( $dbo -> fetchNum ( $duplicate_query ) == 0 ) {
if ( $dbo -> query ( $update_query )) {
flash () -> info ( tr ( 'Descrizione conto modificata!' ));
2017-08-04 16:28:16 +02:00
}
2019-12-27 10:28:53 +01:00
} else {
flash () -> error ( tr ( 'Il numero scelto è già esistente!' ));
2017-08-04 16:28:16 +02:00
}
break ;
// Eliminazione conto dal partitario
case 'del' :
$idconto = post ( 'idconto' );
2020-02-27 16:19:07 +01:00
2020-02-25 16:12:06 +01:00
//Controllo che non esistano movimenti associati al conto
$movimenti = $dbo -> fetchNum ( 'SELECT id FROM co_movimenti WHERE idconto = ' . prepare ( $idconto ));
if ( $idconto != '' and empty ( $movimenti )) {
//Se elimino il conto lo scollego anche da eventuali anagrafiche (cliente e fornitore)
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_cliente = NULL WHERE idconto_cliente = ' . prepare ( $idconto ));
$dbo -> query ( 'UPDATE an_anagrafiche SET idconto_fornitore = NULL WHERE idconto_fornitore = ' . prepare ( $idconto ));
2017-08-04 16:28:16 +02:00
$query = 'DELETE FROM co_pianodeiconti3 WHERE id=' . prepare ( $idconto );
if ( $dbo -> query ( $query )) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Conto eliminato!' ));
2017-08-04 16:28:16 +02:00
}
}
break ;
2019-12-21 19:07:02 +01:00
// Apertura bilancio
case 'apri-bilancio' :
// Eliminazione eventuali movimenti di apertura fatti finora
$dbo -> query ( 'DELETE FROM co_movimenti WHERE is_apertura=1 AND data=' . prepare ( $_SESSION [ 'period_start' ]));
2019-12-27 10:28:53 +01:00
$idconto_apertura = setting ( 'Conto per Apertura conti patrimoniali' );
$idconto_chiusura = setting ( 'Conto per Chiusura conti patrimoniali' );
2021-09-08 09:18:36 +02:00
$data_inizio = date ( 'Ymd' , strtotime ( $_SESSION [ 'period_start' ] . ' -1 year' ));
$data_fine = $_SESSION [ 'period_start' ];
2019-12-21 19:07:02 +01:00
// Lettura di tutti i conti dello stato patrimoniale con saldo != 0
2021-09-08 09:18:36 +02:00
$conti = $dbo -> fetchArray ( 'SELECT co_pianodeiconti3.id, SUM(co_movimenti.totale) AS totale FROM ((co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id) INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) INNER JOIN co_movimenti ON co_pianodeiconti3.id=co_movimenti.idconto WHERE co_pianodeiconti1.descrizione="Patrimoniale" AND data >= ' . prepare ( $data_inizio ) . ' AND data < ' . prepare ( $data_fine ) . ' AND co_pianodeiconti3.id NOT IN(' . prepare ( $idconto_apertura ) . ', ' . prepare ( $idconto_chiusura ) . ') AND is_apertura=0 AND is_chiusura=0 GROUP BY co_pianodeiconti3.id HAVING totale != 0' );
2019-12-21 19:07:02 +01:00
$mastrino = Mastrino :: build ( tr ( 'Apertura conto' ), $_SESSION [ 'period_start' ], 0 , true );
$totale = 0 ;
2019-12-24 12:36:35 +01:00
foreach ( $conti as $conto ) {
if ( $conto [ 'totale' ] >= 0 ) {
2019-12-21 19:07:02 +01:00
$dare = abs ( $conto [ 'totale' ]);
$avere = 0 ;
} else {
$dare = 0 ;
$avere = abs ( $conto [ 'totale' ]);
}
$movimento = Movimento :: build ( $mastrino , $conto [ 'id' ]);
$movimento -> setTotale ( $avere , $dare );
$movimento -> is_apertura = true ;
$movimento -> save ();
$totale += $conto [ 'totale' ];
}
// Movimento sul conto di apertura
$totale = - $totale ;
2019-12-24 12:36:35 +01:00
if ( $totale >= 0 ) {
2019-12-21 19:07:02 +01:00
$dare = abs ( $totale );
$avere = 0 ;
} else {
$dare = 0 ;
$avere = abs ( $totale );
}
$movimento = Movimento :: build ( $mastrino , $idconto_apertura );
$movimento -> setTotale ( $avere , $dare );
$movimento -> is_apertura = true ;
$movimento -> save ();
flash () -> info ( tr ( 'Apertura bilancio completata!' ));
2019-12-24 12:36:35 +01:00
2019-12-21 19:07:02 +01:00
break ;
// Chiusura bilancio
case 'chiudi-bilancio' :
// Eliminazione eventuali movimenti di chiusura fatti finora
$dbo -> query ( 'DELETE FROM co_movimenti WHERE is_chiusura=1 AND data=' . prepare ( $_SESSION [ 'period_end' ]));
2019-12-27 10:28:53 +01:00
$idconto_apertura = setting ( 'Conto per Apertura conti patrimoniali' );
$idconto_chiusura = setting ( 'Conto per Chiusura conti patrimoniali' );
2019-12-21 19:07:02 +01:00
// Lettura di tutti i conti dello stato patrimoniale con saldo != 0
2020-01-07 10:52:43 +01:00
$conti = $dbo -> fetchArray ( 'SELECT co_pianodeiconti3.id, SUM(co_movimenti.totale) AS totale FROM ((co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id) INNER JOIN co_pianodeiconti1 ON co_pianodeiconti2.idpianodeiconti1=co_pianodeiconti1.id) INNER JOIN co_movimenti ON co_pianodeiconti3.id=co_movimenti.idconto WHERE co_pianodeiconti1.descrizione="Patrimoniale" AND data <= ' . prepare ( $_SESSION [ 'period_end' ]) . ' AND co_pianodeiconti3.id NOT IN(' . prepare ( $idconto_apertura ) . ', ' . prepare ( $idconto_chiusura ) . ') AND is_apertura=0 AND is_chiusura=0 GROUP BY co_pianodeiconti3.id HAVING totale != 0' );
2019-12-21 19:07:02 +01:00
$mastrino = Mastrino :: build ( tr ( 'Chiusura conto' ), $_SESSION [ 'period_end' ], 0 , true );
$totale = 0 ;
2019-12-24 12:36:35 +01:00
foreach ( $conti as $conto ) {
if ( $conto [ 'totale' ] < 0 ) {
2019-12-21 19:07:02 +01:00
$dare = abs ( $conto [ 'totale' ]);
$avere = 0 ;
} else {
$dare = 0 ;
$avere = abs ( $conto [ 'totale' ]);
}
$movimento = Movimento :: build ( $mastrino , $conto [ 'id' ]);
$movimento -> setTotale ( $avere , $dare );
$movimento -> is_chiusura = true ;
$movimento -> save ();
$totale += $conto [ 'totale' ];
}
// Movimento sul conto di chiusura
//$totale = -$totale;
2019-12-24 12:36:35 +01:00
if ( $totale >= 0 ) {
2019-12-21 19:07:02 +01:00
$dare = abs ( $totale );
$avere = 0 ;
} else {
$dare = 0 ;
$avere = abs ( $totale );
}
$movimento = Movimento :: build ( $mastrino , $idconto_chiusura );
$movimento -> setTotale ( $avere , $dare );
$movimento -> is_chiusura = true ;
$movimento -> save ();
flash () -> info ( tr ( 'Chiusura bilancio completata!' ));
2019-12-24 12:36:35 +01:00
2019-12-21 19:07:02 +01:00
break ;
2020-08-06 10:41:21 +02:00
case 'aggiorna_reddito' :
$start = post ( 'start' );
$end = post ( 'end' );
$id_conto = post ( 'id_conto' );
$dbo -> query ( ' UPDATE co_movimenti
INNER JOIN co_pianodeiconti3 ON co_pianodeiconti3 . id = co_movimenti . idconto
SET co_movimenti . totale_reddito = ( co_movimenti . totale * co_pianodeiconti3 . percentuale_deducibile / 100 )
WHERE co_pianodeiconti3 . id = '.prepare($id_conto).' AND
co_movimenti . data BETWEEN '.prepare($start).' AND ' . prepare ( $end ));
break ;
2017-08-04 16:28:16 +02:00
}