2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2018-05-11 14:48:46 +02:00
?> <form action="<?php echo ROOTDIR; ?>/editor.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>" method="post" id="add-form">
2017-08-04 16:28:16 +02:00
< input type = " hidden " name = " op " value = " add " >
< input type = " hidden " name = " backto " value = " record-edit " >
2018-02-18 19:53:23 +01:00
< input type = " hidden " name = " iddocumento " value = " <?php echo get('iddocumento'); ?> " >
2018-05-04 17:57:46 +02:00
< input type = " hidden " name = " crea_modello " id = " crea_modello " value = " 0 " >
2017-08-04 16:28:16 +02:00
< ? php
$idconto = get ( 'idconto' );
$iddocumento = get ( 'iddocumento' );
$dir = get ( 'dir' );
2017-09-13 13:05:35 +02:00
if ( ! empty ( $iddocumento )) {
2017-08-04 16:28:16 +02:00
// Lettura numero e tipo di documento
2018-07-17 08:05:19 +02:00
$query = 'SELECT dir, numero, numero_esterno, data, co_tipidocumento.descrizione AS tdescrizione, idanagrafica AS parent_idanagrafica, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=parent_idanagrafica AND deleted_at IS NULL) AS ragione_sociale FROM co_documenti LEFT OUTER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id=' . prepare ( $iddocumento );
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( $query );
$dir = $rs [ 0 ][ 'dir' ];
2017-09-13 13:05:35 +02:00
$numero_doc = ! empty ( $rs [ 0 ][ 'numero_esterno' ]) ? $rs [ 0 ][ 'numero_esterno' ] : $rs [ 0 ][ 'numero' ];
2017-08-04 16:28:16 +02:00
$tipo_doc = $rs [ 0 ][ 'tdescrizione' ];
2018-06-23 18:35:08 +02:00
2018-07-05 17:56:38 +02:00
$nota_credito = false ;
2018-06-23 18:35:08 +02:00
2018-07-05 17:56:38 +02:00
if ( $tipo_doc == 'Nota di credito' ) {
$nota_credito = true ;
2018-06-23 18:35:08 +02:00
}
2017-09-13 13:05:35 +02:00
$descrizione = tr ( '_DOC_ numero _NUM_ del _DATE_ (_NAME_)' , [
'_DOC_' => $tipo_doc ,
'_NUM_' => $numero_doc ,
'_DATE_' => Translator :: dateToLocale ( $rs [ 0 ][ 'data' ]),
'_NAME_' => $rs [ 0 ][ 'ragione_sociale' ],
]);
2017-08-04 16:28:16 +02:00
/*
Predisposizione prima riga
*/
2017-09-13 13:05:35 +02:00
$field = 'idconto_' . ( $dir == 'entrata' ? 'vendite' : 'acquisti' );
$idconto_aziendale = $dbo -> fetchArray ( 'SELECT ' . $field . ' FROM co_pagamenti WHERE id = (SELECT idpagamento FROM co_documenti WHERE id=' . prepare ( $iddocumento ) . ') GROUP BY descrizione' )[ 0 ][ $field ];
2018-04-17 19:09:19 +02:00
// Lettura conto di default
2018-07-08 18:11:17 +02:00
$idconto_aziendale = ! empty ( $idconto_aziendale ) ? $idconto_aziendale : setting ( 'Conto aziendale predefinito' );
2017-08-04 16:28:16 +02:00
// Generazione causale (incasso fattura)
$descrizione_conto_aziendale = $descrizione ;
/*
Calcolo totale per chiudere la fattura
*/
// Lettura importo da scadenzario (seleziono l'importo di questo mese)
$query = 'SELECT *, scadenza, ABS(da_pagare-pagato) AS rata FROM co_scadenziario WHERE iddocumento=' . prepare ( $iddocumento ) . " AND ABS(da_pagare) > ABS(pagato) ORDER BY DATE_FORMAT(scadenza,'%m/%Y') ASC " ;
$rs = $dbo -> fetchArray ( $query );
$importo_conto_aziendale = $rs [ 0 ][ 'rata' ];
if ( $dir == 'entrata' ) {
$totale_dare = abs ( $importo_conto_aziendale );
} else {
$totale_dare = abs ( $importo_conto_aziendale );
}
// Può essere che voglia inserire un movimento in un mese diverso da quello previsto per l'incasso, perciò devo
// leggere solo il totale rimanente della fattura rispetto a quello pagato invece di leggere quello da pagare
// per il mese corrente (viene calcolato sopra)
if ( $totale_dare == 0 ) {
// Lettura totale finora pagato
$query = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento=' . prepare ( $iddocumento );
$rs = $dbo -> fetchArray ( $query );
$importo_conto_aziendale = abs ( $rs [ 0 ][ 'tot_da_pagare' ]) - abs ( $rs [ 0 ][ 'tot_pagato' ]);
$totale_dare = $importo_conto_aziendale ;
}
/*
Predisposizione seconda riga
*/
// conto crediti clienti
if ( $dir == 'entrata' ) {
// Se è la prima nota di una fattura leggo il conto del cliente
if ( $iddocumento != '' ) {
$query = 'SELECT idconto_cliente FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id=' . prepare ( $iddocumento );
$rs = $dbo -> fetchArray ( $query );
$idconto_controparte = $rs [ 0 ][ 'idconto_cliente' ];
} else {
$query = " SELECT id FROM co_pianodeiconti3 WHERE descrizione='Riepilogativo clienti' " ;
$rs = $dbo -> fetchArray ( $query );
$idconto_controparte = $rs [ 0 ][ 'id' ];
}
}
// conto debiti fornitori
else {
// Se è la prima nota di una fattura leggo il conto del fornitore
if ( $iddocumento != '' ) {
$query = 'SELECT idconto_fornitore FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id=' . prepare ( $iddocumento );
$rs = $dbo -> fetchArray ( $query );
$idconto_controparte = $rs [ 0 ][ 'idconto_fornitore' ];
} else {
$query = " SELECT id FROM co_pianodeiconti3 WHERE descrizione='Riepilogativo fornitori' " ;
$rs = $dbo -> fetchArray ( $query );
$idconto_controparte = $rs [ 0 ][ 'id' ];
}
}
$_SESSION [ 'superselect' ][ 'idconto_controparte' ] = $idconto_controparte ;
// Lettura causale movimento (documento e ragione sociale)
$descrizione_conto_controparte = $descrizione ;
$importo_conto_controparte = $importo_conto_aziendale ;
if ( $dir == 'entrata' ) {
$totale_avere = $importo_conto_controparte ;
} else {
$totale_avere = $importo_conto_controparte ;
}
}
?>
2018-05-11 14:48:46 +02:00
2018-05-04 17:57:46 +02:00
< div class = " row " >
< div class = " col-md-12 " >
2018-08-03 09:34:06 +02:00
{[ " type " : " select " , " label " : " <?php echo tr('Modello primanota'); ?> " , " id " : " modello_primanota " , " values " : " query=SELECT idmastrino AS id, descrizione FROM co_movimenti_modelli GROUP BY idmastrino " ]}
2018-05-04 17:57:46 +02:00
</ div >
</ div >
2017-08-04 16:28:16 +02:00
< div class = " row " >
< div class = " col-md-4 " >
2017-09-04 12:02:29 +02:00
{[ " type " : " date " , " label " : " <?php echo tr('Data movimento'); ?> " , " name " : " data " , " required " : 1 , " value " : " -now- " ]}
2017-08-04 16:28:16 +02:00
</ div >
< div class = " col-md-8 " >
2018-05-04 17:57:46 +02:00
{[ " type " : " text " , " label " : " <?php echo tr('Causale'); ?> " , " name " : " descrizione " , " id " : " desc " , " required " : 1 , " value " : " <?php echo $descrizione ; ?> " ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div >
< ? php
$totale_dare = 0.00 ;
$totale_avere = 0.00 ;
2018-07-18 15:20:10 +02:00
$idmastrino = $record [ 'idmastrino' ];
2017-08-04 16:28:16 +02:00
// Salvo l'elenco conti in un array (per non fare il ciclo ad ogni riga)
/*
Form di aggiunta riga movimento
*/
echo '
< table class = " table table-striped table-condensed table-hover table-bordered "
< tr >
2017-09-04 12:02:29 +02:00
< th > '.tr(' Conto ').' </ th >
< th width = " 20% " > '.tr(' Dare ').' </ th >
< th width = " 20% " > '.tr(' Avere ').' </ th >
2017-08-04 16:28:16 +02:00
</ tr > ' ;
for ( $i = 0 ; $i < 10 ; ++ $i ) {
2018-05-11 14:48:46 +02:00
( $i <= 1 ) ? $required = 1 : $required = 0 ;
// Conto
2017-08-04 16:28:16 +02:00
echo '
< tr >
< td >
2018-05-04 17:57:46 +02:00
{[ " type " : " select " , " name " : " idconto['. $i .'] " , " id " : " conto'. $i .' " , " value " : " ';
2017-08-04 16:28:16 +02:00
if ( $i == 0 ) {
echo $idconto_controparte ;
} elseif ( $i == 1 ) {
echo $idconto_aziendale ;
}
2018-04-17 19:09:19 +02:00
echo '", "ajax-source": "conti", "required": "' . $required . ' " ]}
2017-08-04 16:28:16 +02:00
</ td > ' ;
// Importo dare e avere
if ( $i == 0 ) {
if ( $dir == 'entrata' ) {
$value_dare = '' ;
$value_avere = $importo_conto_aziendale ;
} else {
$value_dare = $importo_conto_aziendale ;
$value_avere = '' ;
}
} elseif ( $i == 1 ) {
if ( $dir == 'entrata' ) {
$value_dare = $importo_conto_controparte ;
$value_avere = '' ;
} else {
$value_dare = '' ;
$value_avere = $importo_conto_controparte ;
}
} else {
$value_dare = '' ;
$value_avere = '' ;
}
2018-06-23 18:35:08 +02:00
2018-07-05 17:56:38 +02:00
// Se è una nota di credito, inverto i valori
if ( $nota_credito ) {
2018-06-23 18:35:08 +02:00
$tmp = $value_dare ;
$value_dare = $value_avere ;
$value_avere = $tmp ;
}
2017-08-04 16:28:16 +02:00
// Dare
echo '
< td >
{[ " type " : " number " , " name " : " dare['. $i .'] " , " value " : " '. $value_dare .' " , " disabled " : 1 ]}
</ td > ' ;
// Avere
echo '
< td >
{[ " type " : " number " , " name " : " avere['. $i .'] " , " value " : " '. $value_avere .' " , " disabled " : 1 ]}
</ td >
</ tr > ' ;
}
// Totale per controllare sbilancio
echo '
< tr >
2017-09-04 12:02:29 +02:00
< td align = " right " >< b > '.tr(' Totale ').' :</ b ></ td > ' ;
2017-08-04 16:28:16 +02:00
// Totale dare
echo '
< td align = " right " >
< span >< span id = " totale_dare " ></ span > & euro ; </ span >
</ td > ' ;
// Totale avere
echo '
< td align = " right " >
< span >< span id = " totale_avere " ></ span > & euro ; </ span >
</ td >
</ tr > ' ;
// Verifica sbilancio
echo '
< tr >
< td align = " right " ></ td >
< td colspan = " 2 " align = " center " >
< span id = " testo_aggiuntivo " ></ span >
</ td >
</ tr >
</ table > ' ;
?>
<!-- PULSANTI -->
< div class = " row " >
< div class = " col-md-12 text-right " >
2018-05-04 17:57:46 +02:00
< button type = 'button' class = " btn btn-primary " id = 'btn_crea_modello' >< i class = " fa fa-plus " ></ i > < ? php echo tr ( 'Aggiungi e crea modello' ); ?> </button>
< button type = " submit " class = " btn btn-primary " id = 'btn_submit' >< i class = " fa fa-plus " ></ i > < ? php echo tr ( 'Aggiungi' ); ?> </button>
2017-08-04 16:28:16 +02:00
</ div >
</ div >
< script type = " text/javascript " >
$ ( document ) . ready ( function (){
$ ( 'input[id*=dare], input[id*=avere]' ) . each ( function (){
2018-02-18 19:53:23 +01:00
if ( $ ( this ) . val () != " <?php echo Translator::numberToLocale(0); ?> " ) $ ( this ) . prop ( " disabled " , false );
2017-08-04 16:28:16 +02:00
});
$ ( 'select' ) . on ( 'change' , function (){
if ( $ ( this ) . parent () . parent () . find ( 'input[disabled]' ) . length != 1 ){
if ( $ ( this ) . val ()) {
$ ( this ) . parent () . parent () . find ( 'input' ) . prop ( " disabled " , false );
}
else {
$ ( this ) . parent () . parent () . find ( 'input' ) . prop ( " disabled " , true );
2018-05-04 17:57:46 +02:00
$ ( this ) . parent () . parent () . find ( 'input' ) . val ( " 0.00 " );
2017-08-04 16:28:16 +02:00
}
}
});
$ ( 'input[id*=dare]' ) . on ( 'keyup change' , function (){
if ( ! $ ( this ) . prop ( 'disabled' )){
if ( $ ( this ) . val ()) {
$ ( this ) . parent () . parent () . find ( 'input[id*=avere]' ) . prop ( " disabled " , true );
}
else {
$ ( this ) . parent () . parent () . find ( 'input[id*=avere]' ) . prop ( " disabled " , false );
}
calcolaBilancio ();
}
});
$ ( 'input[id*=avere]' ) . on ( 'keyup change' , function (){
if ( ! $ ( this ) . prop ( 'disabled' )){
if ( $ ( this ) . val ()) {
$ ( this ) . parent () . parent () . find ( 'input[id*=dare]' ) . prop ( " disabled " , true );
}
else {
$ ( this ) . parent () . parent () . find ( 'input[id*=dare]' ) . prop ( " disabled " , false );
}
calcolaBilancio ();
}
});
// Ad ogni modifica dell'importo verifica che siano stati selezionati: il conto, la causale, la data. Inoltre aggiorna lo sbilancio
function calcolaBilancio (){
bilancio = 0.00 ;
totale_dare = 0.00 ;
totale_avere = 0.00 ;
// Calcolo il totale dare e totale avere
$ ( 'input[id*=dare]' ) . each ( function (){
if ( $ ( this ) . val () == '' ) valore = 0 ;
2017-08-11 12:11:57 +02:00
else valore = $ ( this ) . val () . toEnglish ();
2018-03-21 17:07:39 +01:00
totale_dare += Math . round ( valore * 100 ) / 100 ;
2017-08-04 16:28:16 +02:00
});
$ ( 'input[id*=avere]' ) . each ( function (){
if ( $ ( this ) . val () == '' ) valore = 0 ;
2017-08-11 12:11:57 +02:00
else valore = $ ( this ) . val () . toEnglish ();
2018-03-21 17:07:39 +01:00
totale_avere += Math . round ( valore * 100 ) / 100 ;
2017-08-04 16:28:16 +02:00
});
2017-09-19 16:50:01 +02:00
$ ( '#totale_dare' ) . text ( totale_dare . toLocale ());
$ ( '#totale_avere' ) . text ( totale_avere . toLocale ());
2017-08-04 16:28:16 +02:00
2018-03-21 17:07:39 +01:00
bilancio = Math . round ( totale_dare * 100 ) / 100 - Math . round ( totale_avere * 100 ) / 100 ;
2017-08-04 16:28:16 +02:00
2017-08-11 12:11:57 +02:00
if ( bilancio == 0 ){
2017-08-04 16:28:16 +02:00
$ ( " #testo_aggiuntivo " ) . removeClass ( 'text-danger' ) . html ( " " );
2018-05-04 17:57:46 +02:00
$ ( " #btn_submit " ) . removeClass ( 'hide' );
2017-08-04 16:28:16 +02:00
}
else {
2017-09-19 16:50:01 +02:00
$ ( " #testo_aggiuntivo " ) . addClass ( 'text-danger' ) . html ( " sbilancio di " + bilancio . toLocale () + " € " );
2018-05-04 17:57:46 +02:00
$ ( " #btn_submit " ) . addClass ( 'hide' );
2017-08-04 16:28:16 +02:00
}
}
// Trigger dell'evento keyup() per la prima volta, per eseguire i dovuti controlli nel caso siano predisposte delle righe in prima nota
$ ( " input[id*=dare][value!=''], input[id*=avere][value!=''] " ) . keyup ();
$ ( " select[id*=idconto] " ) . click ( function (){
$ ( " input[id*=dare][value!=''], input[id*=avere][value!=''] " ) . keyup ();
});
2018-05-11 14:48:46 +02:00
2018-05-04 17:57:46 +02:00
$ ( '#modello_primanota' ) . change ( function (){
var idmastrino = $ ( this ) . val ();
2018-05-11 14:48:46 +02:00
2018-05-04 17:57:46 +02:00
if ( idmastrino != '' ){
$ ( '#btn_crea_modello' ) . hide ();
var causale = $ ( this ) . find ( 'option:selected' ) . text ();
$ ( '#desc' ) . val ( causale );
2018-05-11 14:48:46 +02:00
$ . get ( '<?php echo $rootdir; ?>/ajax_complete.php?op=get_conti&idmastrino=' + idmastrino , function ( data ){
2018-05-04 17:57:46 +02:00
var conti = data . split ( ',' );
for ( i = 0 ; i < conti . length ; i ++ ){
var conto = conti [ i ] . split ( ';' );
var option = $ ( " <option selected></option> " ) . val ( conto [ 0 ]) . text ( conto [ 1 ]);
$ ( '#conto' + i ) . selectReset ();
$ ( '#conto' + i ) . append ( option ) . trigger ( 'change' );
}
});
} else {
$ ( '#btn_crea_modello' ) . show ();
}
});
2018-05-11 14:48:46 +02:00
2018-05-04 17:57:46 +02:00
$ ( '#btn_crea_modello' ) . click ( function (){
$ ( " #crea_modello " ) . val ( " 1 " );
$ ( " #add-form " ) . submit ();
});
2018-05-11 14:48:46 +02:00
2017-08-04 16:28:16 +02:00
});
</ script >
</ form >