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' ;
2024-03-22 15:52:24 +01:00
use Models\Module ;
2019-11-15 12:41:52 +01:00
use Modules\Anagrafiche\Anagrafica ;
2021-09-28 10:48:18 +02:00
use Modules\Banche\Banca ;
2019-11-15 15:11:20 +01:00
use Modules\Fatture\Fattura ;
2017-08-04 16:28:16 +02:00
2020-10-13 14:53:01 +02:00
/**
* Questo file gestisce la lettura delle informazioni di Scadenze e Fatture indicate per la generazione della Prima Nota . Per maggiori informazioni sulla grafica inerente alla visualizzazione delle diverse righe , consulare il file `movimenti.php` .
*
* Questo file prevede diverse operazioni per la generazione di un singolo array `$movimenti` contenente tutti i movimenti da presentare nella Prima Nota . In particolare :
* - Individua Scadenze e Fatture per ID da URL
* - Legge le informazioni relative alle Scadenze per presentare i movimenti in Dare e Avere
* - Legge le informazioni relative alla Scadenze le Fatture indicate ( sola della prima Scadenza insoluta se `is_insoluto` impostato ) :
* - Per Fatture di vendita , il totale è Avere ( a meno di Note di credito oppure insoluto )
* - Per Fatture di acquisto , il totale è Dare ( a meno di Note di credito oppure insoluto )
* - Inverte Dare e Avere se l ' importo indicato è negativo [ TODO : documentare la casistica ]
* - Genera la causale predefinita per la Prima Nota sulla base delle Scadenze indicate
*
* Nel caso in cui sia indicato una singola Scadenza ( con o senza Fattura associata ) viene permessa la gestione attraverso un Modello di Prima Nota , che prevede una compilazione di base per alcuni movimenti specificati nel relativo modulo .
* Nota : questo comportamento viene abilitato dalla variabile `$permetti_modelli` .
*/
2024-03-27 16:59:46 +01:00
$id_module = ( new Module ()) -> getByField ( 'name' , 'Prima nota' , Models\Locale :: getPredefined () -> id );
2019-12-11 16:49:37 +01:00
$movimenti = [];
2019-07-25 12:54:28 +02:00
// Registrazione da remoto
$id_records = get ( 'id_records' );
if ( ! empty ( $id_records )) {
$id_records = str_replace ( ';' , ',' , $id_records );
if ( get ( 'origine' ) == 'fatture' ) {
$id_documenti = $id_records ;
} else {
$id_scadenze = $id_records ;
2019-04-11 16:04:08 +02:00
}
2019-07-25 12:54:28 +02:00
}
2019-04-11 16:04:08 +02:00
2019-07-25 15:06:07 +02:00
// ID predefiniti
$singola_scadenza = get ( 'single' ) != null ;
2019-07-31 18:22:35 +02:00
$is_insoluto = get ( 'is_insoluto' ) != null ;
2019-07-25 15:06:07 +02:00
2019-07-25 12:54:28 +02:00
$id_documenti = $id_documenti ? : get ( 'id_documenti' );
$id_documenti = $id_documenti ? explode ( ',' , $id_documenti ) : [];
2019-07-25 15:06:07 +02:00
$id_scadenze = $id_scadenze ? : get ( 'id_scadenze' );
$id_scadenze = $id_scadenze ? explode ( ',' , $id_scadenze ) : [];
2020-10-13 14:53:01 +02:00
// Controllo per l'utilizzo dei modelli di Prima Nota (per singolo documento o singola scadenza)
$permetti_modelli = ( count ( $id_documenti ) + count ( $id_scadenze )) <= 1 ;
2019-07-25 15:06:07 +02:00
// Scadenze
foreach ( $id_scadenze as $id_scadenza ) {
2020-10-13 14:53:01 +02:00
$scadenza = $database -> fetchOne ( 'SELECT *, SUM(da_pagare - pagato) AS rata FROM co_scadenziario WHERE id=' . prepare ( $id_scadenza ));
2019-07-25 15:48:28 +02:00
if ( ! empty ( $scadenza [ 'iddocumento' ])) {
2019-07-25 15:06:07 +02:00
$id_documenti [] = $scadenza [ 'iddocumento' ];
continue ;
}
2021-02-26 11:04:06 +01:00
$dir = $scadenza [ 'rata' ] > 0 ? 'entrata' : 'uscita' ;
2019-07-31 18:22:35 +02:00
$scadenza [ 'rata' ] = abs ( $scadenza [ 'rata' ]);
2019-07-25 15:06:07 +02:00
$descrizione_conto = ( $dir == 'entrata' ) ? 'Riepilogativo clienti' : 'Riepilogativo fornitori' ;
2020-10-13 14:53:01 +02:00
$conto = $database -> fetchOne ( 'SELECT id FROM co_pianodeiconti3 WHERE descrizione = ' . prepare ( $descrizione_conto ));
2019-07-25 15:06:07 +02:00
$id_conto_controparte = $conto [ 'id' ];
$righe_documento = [];
$righe_documento [] = [
2019-11-22 17:15:17 +01:00
'iddocumento' => null ,
2019-07-25 15:06:07 +02:00
'id_scadenza' => $scadenza [ 'id' ],
2019-07-31 18:22:35 +02:00
'id_conto' => null ,
2022-02-16 10:54:21 +01:00
'dare' => ( $dir == 'uscita' ) ? 0 : $scadenza [ 'rata' ],
'avere' => ( $dir == 'uscita' ) ? $scadenza [ 'rata' ] : 0 ,
2019-07-25 15:06:07 +02:00
];
$righe_documento [] = [
2019-11-22 17:15:17 +01:00
'iddocumento' => null ,
2019-07-25 15:06:07 +02:00
'id_scadenza' => $scadenza [ 'id' ],
2019-07-31 18:22:35 +02:00
'id_conto' => $id_conto_controparte ,
2022-02-16 10:54:21 +01:00
'dare' => ( $dir == 'uscita' ) ? $scadenza [ 'rata' ] : 0 ,
'avere' => ( $dir == 'uscita' ) ? 0 : $scadenza [ 'rata' ],
2019-07-25 15:06:07 +02:00
];
2019-07-31 18:22:35 +02:00
// Se è un insoluto, inverto i valori
if ( $is_insoluto ) {
foreach ( $righe_documento as $key => $value ) {
$tmp = $value [ 'avere' ];
$righe_documento [ $key ][ 'avere' ] = $righe_documento [ $key ][ 'dare' ];
$righe_documento [ $key ][ 'dare' ] = $tmp ;
}
}
2019-12-11 16:49:37 +01:00
$movimenti = array_merge ( $movimenti , $righe_documento );
2019-07-25 15:06:07 +02:00
}
// Fatture
2021-03-01 16:01:19 +01:00
$numeri_fatture = [];
2019-07-25 15:06:07 +02:00
$counter = 0 ;
2020-10-13 14:53:01 +02:00
$is_ultimo_importo_avere = false ;
2019-07-25 15:06:07 +02:00
2019-10-30 17:10:04 +01:00
$id_documenti = array_unique ( $id_documenti );
2019-11-22 17:15:17 +01:00
$id_anagrafica_movimenti = null ;
2019-07-25 12:54:28 +02:00
foreach ( $id_documenti as $id_documento ) {
$fattura = Fattura :: find ( $id_documento );
2019-11-15 12:41:52 +01:00
$tipo = $fattura -> tipo ;
2019-07-25 12:54:28 +02:00
$dir = $fattura -> direzione ;
2019-02-14 01:40:54 +01:00
2019-07-25 15:06:07 +02:00
// Inclusione delle sole fatture in stato Emessa, Parzialmente pagato o Pagato
2024-03-20 11:13:28 +01:00
if ( ! in_array ( $fattura -> stato -> getTranslation ( 'name' ), [ 'Emessa' , 'Parzialmente pagato' , 'Pagato' ])) {
2019-07-25 15:06:07 +02:00
++ $counter ;
continue ;
}
2019-11-15 15:11:20 +01:00
2022-02-17 16:22:27 +01:00
if ( $id_anagrafica_movimenti == null ) {
2019-11-22 17:15:17 +01:00
$id_anagrafica_movimenti = $fattura -> idanagrafica ;
2019-11-22 17:33:30 +01:00
} elseif ( $fattura -> idanagrafica != $id_anagrafica_movimenti ) {
2022-02-17 16:22:27 +01:00
$id_anagrafica_movimenti = 0 ;
2019-11-15 12:41:52 +01:00
}
2019-07-25 15:06:07 +02:00
2021-03-01 16:01:19 +01:00
$numeri_fatture [] = ! empty ( $fattura [ 'numero_esterno' ]) ? $fattura [ 'numero_esterno' ] : $fattura [ 'numero' ];
2019-04-11 16:04:08 +02:00
2020-10-13 14:53:01 +02:00
$is_nota_credito = $tipo -> reversed ;
$is_importo_avere = ( $dir == 'entrata' && ! $is_nota_credito && ! $is_insoluto ) || ( $dir == 'uscita' && ( $is_nota_credito || $is_insoluto ));
2017-08-04 16:28:16 +02:00
2019-07-25 12:54:28 +02:00
// Predisposizione prima riga
2021-09-28 10:48:18 +02:00
$banca = Banca :: find ( $fattura -> id_banca_azienda );
2019-07-25 12:54:28 +02:00
$conto_field = 'idconto_' . ( $dir == 'entrata' ? 'vendite' : 'acquisti' );
2021-09-28 10:48:18 +02:00
$id_conto_aziendale = $banca -> id_pianodeiconti3 ? : ( $fattura -> pagamento [ $conto_field ] ? : setting ( 'Conto aziendale predefinito' ));
2017-08-04 16:28:16 +02:00
2020-09-03 13:16:12 +02:00
// Se sto registrando un insoluto, leggo l'ultima scadenza pagata altrimenti leggo la scadenza della fattura
if ( $is_insoluto ) {
2022-03-17 16:18:17 +01:00
$scadenze = $database -> fetchArray ( 'SELECT id, ABS(da_pagare) AS rata, iddocumento, tipo FROM co_scadenziario WHERE iddocumento=' . prepare ( $id_documento ) . ' AND ABS(da_pagare) = ABS(pagato) ORDER BY updated_at DESC LIMIT 0, 1' );
2020-09-03 13:16:12 +02:00
} else {
2022-03-17 16:18:17 +01:00
$scadenze = $database -> fetchArray ( 'SELECT id, ABS(da_pagare - pagato) AS rata, iddocumento, tipo FROM co_scadenziario WHERE iddocumento=' . prepare ( $id_documento ) . ' AND ABS(da_pagare) > ABS(pagato)' . ( ! empty ( $id_scadenze ) ? 'AND id IN(' . implode ( ',' , $id_scadenze ) . ')' : '' ) . ' ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC' );
2020-09-03 13:16:12 +02:00
}
2017-08-04 16:28:16 +02:00
2019-07-25 12:54:28 +02:00
// Selezione prima scadenza
if ( $singola_scadenza && ! empty ( $scadenze )) {
$scadenze = [ $scadenze [ 0 ]];
}
2017-08-04 16:28:16 +02:00
2019-07-25 12:54:28 +02:00
$righe_documento = [];
2019-11-22 17:15:17 +01:00
// Riga controparte
foreach ( $scadenze as $scadenza ) {
2022-03-17 16:18:17 +01:00
// Predisposizione conto
if ( $scadenza [ 'tipo' ] == 'ritenutaacconto' ) {
$id_conto_controparte = setting ( " Conto per Erario c/ritenute d'acconto " );
} else {
$conto_field = 'idconto_' . ( $dir == 'entrata' ? 'cliente' : 'fornitore' );
$id_conto_controparte = $fattura -> anagrafica [ $conto_field ];
}
2019-11-22 17:15:17 +01:00
$righe_documento [] = [
'iddocumento' => $scadenza [ 'iddocumento' ],
'id_scadenza' => $scadenza [ 'id' ],
'id_conto' => $id_conto_controparte ,
2020-10-13 14:53:01 +02:00
'dare' => $is_importo_avere ? 0 : $scadenza [ 'rata' ],
'avere' => $is_importo_avere ? $scadenza [ 'rata' ] : 0 ,
2019-11-22 17:15:17 +01:00
];
}
2019-07-25 12:54:28 +02:00
// Riga aziendale
$totale = sum ( array_column ( $scadenze , 'rata' ));
2019-11-15 18:05:48 +01:00
2020-09-03 13:16:12 +02:00
$righe_documento [] = [
'iddocumento' => $scadenze [ 0 ][ 'iddocumento' ],
'id_scadenza' => $scadenze [ 0 ][ 'id' ],
'id_conto' => $id_conto_aziendale ,
2020-10-13 14:53:01 +02:00
'dare' => $is_importo_avere ? $totale : 0 ,
'avere' => $is_importo_avere ? 0 : $totale ,
2020-09-03 13:16:12 +02:00
];
2019-07-25 12:54:28 +02:00
2020-10-13 14:53:01 +02:00
$is_ultimo_importo_avere = $is_importo_avere ;
2019-12-11 16:49:37 +01:00
$movimenti = array_merge ( $movimenti , $righe_documento );
2019-07-25 12:54:28 +02:00
}
2019-11-22 17:15:17 +01:00
// Inverto dare e avere per importi negativi
2019-12-11 16:49:37 +01:00
foreach ( $movimenti as $key => $value ) {
if ( $movimenti [ $key ][ 'dare' ] < 0 || $movimenti [ $key ][ 'avere' ] < 0 ) {
$tmp = abs ( $movimenti [ $key ][ 'dare' ]);
$movimenti [ $key ][ 'dare' ] = abs ( $movimenti [ $key ][ 'avere' ]);
$movimenti [ $key ][ 'avere' ] = $tmp ;
2019-11-15 18:05:48 +01:00
}
}
2019-07-25 12:54:28 +02:00
// Descrizione
$numero_scadenze = count ( $id_scadenze );
$numero_documenti = count ( $id_documenti );
if ( $numero_documenti + $numero_scadenze > 1 ) {
2019-11-22 17:15:17 +01:00
if ( ! empty ( $id_anagrafica_movimenti )) {
2020-10-13 14:53:01 +02:00
$anagrafica_movimenti = Anagrafica :: find ( $id_anagrafica_movimenti );
2019-11-15 12:41:52 +01:00
2020-10-13 14:53:01 +02:00
$descrizione = $is_ultimo_importo_avere ? tr ( 'Inc. fatture _NAME_ num. _LIST_' ) : tr ( 'Pag. fatture _NAME_ num. _LIST_' );
$descrizione = replace ( $descrizione , [
2022-02-17 16:22:27 +01:00
'_NAME_' => $anagrafica_movimenti -> ragione_sociale ? : '' ,
2021-03-01 16:01:19 +01:00
'_LIST_' => implode ( ', ' , $numeri_fatture ),
2020-10-13 14:53:01 +02:00
]);
2019-11-15 15:11:20 +01:00
} else {
2020-10-13 14:53:01 +02:00
$descrizione = $is_ultimo_importo_avere ? tr ( 'Inc. fatture num. _LIST_' ) : tr ( 'Pag. fatture _NAME_ num. _LIST_' );
$descrizione = replace ( $descrizione , [
2021-03-01 16:01:19 +01:00
'_LIST_' => implode ( ', ' , $numeri_fatture ),
2020-10-13 14:53:01 +02:00
]);
2019-11-15 12:41:52 +01:00
}
2019-07-25 12:54:28 +02:00
} elseif ( $numero_documenti == 1 ) {
$numero_fattura = ! empty ( $fattura [ 'numero_esterno' ]) ? $fattura [ 'numero_esterno' ] : $fattura [ 'numero' ];
2024-03-20 11:13:28 +01:00
$tipo_fattura = $fattura -> isNota () ? $tipo -> getTranslation ( 'name' ) : tr ( 'Fattura' );
2019-07-04 09:20:02 +02:00
2019-07-25 12:54:28 +02:00
if ( ! empty ( $is_insoluto )) {
$operation = tr ( 'Registrazione insoluto' );
} else {
2020-10-13 14:53:01 +02:00
$operation = $is_ultimo_importo_avere ? tr ( 'Inc.' ) : tr ( 'Pag.' );
2017-08-04 16:28:16 +02:00
}
2018-05-11 14:48:46 +02:00
2019-07-25 12:54:28 +02:00
$descrizione = tr ( '_OP_ _DOC_ num. _NUM_ del _DATE_ (_NAME_)' , [
'_OP_' => $operation ,
'_DOC_' => strtolower ( $tipo_fattura ),
'_NUM_' => $numero_fattura ,
'_DATE_' => Translator :: dateToLocale ( $fattura [ 'data' ]),
'_NAME_' => $fattura -> anagrafica [ 'ragione_sociale' ],
]);
} elseif ( $numero_scadenze == 1 ) {
$descrizione = tr ( 'Pag. _OP_ del _DATE_' , [
'_OP_' => $scadenza [ 'descrizione' ],
'_DATE_' => Translator :: dateToLocale ( $scadenza [ 'scadenza' ]),
]);
}
2019-07-25 15:06:07 +02:00
if ( ! empty ( $id_records ) && get ( 'origine' ) == 'fatture' && ! empty ( $counter )) {
$descrizione_stati = [];
2024-03-22 15:52:24 +01:00
$stati = $database -> fetchArray ( " SELECT * FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento`.`id` = `co_statidocumento_lang`.`id_record` AND `co_statidocumento_lang`.`id_lang` = ' " . prepare ( Models\Locale :: getDefault () -> id ) . " ') WHERE `name` IN ('Emessa', 'Parzialmente pagato', 'Pagato') ORDER BY `name` " );
2019-07-25 15:06:07 +02:00
foreach ( $stati as $stato ) {
2024-02-13 15:49:40 +01:00
$descrizione_stati [] = '<i class="' . $stato [ 'icona' ] . '"></i> <small>' . $stato [ 'name' ] . '</small>' ;
2019-07-25 15:06:07 +02:00
}
echo '
< div class = " alert alert-info " >
< p > '.tr(' Solo le fatture in stato _STATE_ possono essere registrate contabilmente ignorate ' , [
2024-03-22 15:52:24 +01:00
'_STATE_' => implode ( ', ' , $descrizione_stati ),
]) . ' .</ p >
2019-07-25 15:06:07 +02:00
< p >< b > '.tr(' Sono state ignorate _NUM_ fatture ' , [
2024-03-22 15:52:24 +01:00
'_NUM_' => $counter ,
]) . ' .</ b ></ p >
2019-07-25 15:06:07 +02:00
</ div > ' ;
}
2020-11-06 10:46:42 +01:00
if ( ! empty ( get ( 'id_anagrafica' ))) {
2020-11-02 17:00:36 +01:00
$id_anagrafica = get ( 'id_anagrafica' );
2023-08-04 14:54:28 +02:00
}
2022-09-13 17:28:03 +02:00
if ( empty ( $id_anagrafica )) {
2023-08-04 14:54:28 +02:00
$id_anagrafica = $dbo -> fetchOne ( 'SELECT idanagrafica FROM co_documenti WHERE id IN(' . ( $id_documenti ? implode ( ',' , $id_documenti ) : 0 ) . ')' )[ 'idanagrafica' ];
2022-09-13 17:28:03 +02:00
}
if ( empty ( $id_anagrafica )) {
2023-08-04 14:54:28 +02:00
$id_anagrafica = $dbo -> fetchOne ( 'SELECT idanagrafica FROM co_scadenziario WHERE id IN(' . ( $id_scadenze ? implode ( ',' , $id_scadenze ) : 0 ) . ')' )[ 'idanagrafica' ];
2020-11-02 14:36:53 +01:00
}
2019-07-25 12:54:28 +02:00
echo '
2024-03-05 16:01:45 +01:00
< form action = " '.base_path().'/controller.php?id_module='. $id_module .' " method = " post " id = " add-form " >
2019-07-25 12:54:28 +02:00
< input type = " hidden " name = " op " value = " add " >
< input type = " hidden " name = " backto " value = " record-edit " >
< input type = " hidden " name = " crea_modello " id = " crea_modello " value = " 0 " >
2019-07-31 18:22:35 +02:00
< input type = " hidden " name = " idmastrino " id = " idmastrino " value = " 0 " >
2020-11-02 14:36:53 +01:00
< input type = " hidden " name = " is_insoluto " value = " '. $is_insoluto .' " >
< input type = " hidden " name = " id_anagrafica " id = " id_anagrafica " value = " '. $id_anagrafica .' " > ' ;
2019-07-25 12:54:28 +02:00
2020-10-13 14:53:01 +02:00
if ( $permetti_modelli ) {
2019-07-25 12:54:28 +02:00
echo '
2018-05-04 17:57:46 +02:00
< div class = " row " >
< div class = " col-md-12 " >
2020-10-13 14:53:01 +02:00
{[ " type " : " select " , " label " : " '.tr('Modello prima nota').' " , " name " : " modello_primanota " , " values " : " query=SELECT idmastrino AS id, nome AS descrizione, descrizione as causale FROM co_movimenti_modelli GROUP BY idmastrino " ]}
2018-05-04 17:57:46 +02:00
</ div >
2020-10-13 14:53:01 +02:00
</ div > ' ;
}
2017-08-04 16:28:16 +02:00
2020-11-02 14:36:53 +01:00
echo '
2017-08-04 16:28:16 +02:00
< div class = " row " >
< div class = " col-md-4 " >
2019-07-25 12:54:28 +02:00
{[ " type " : " date " , " label " : " '.tr('Data movimento').' " , " name " : " data " , " required " : 1 , " value " : " -now- " ]}
2017-08-04 16:28:16 +02:00
</ div >
< div class = " col-md-8 " >
2019-07-25 12:54:28 +02:00
{[ " type " : " text " , " label " : " '.tr('Causale').' " , " name " : " descrizione " , " id " : " desc " , " required " : 1 , " value " : '.json_encode($descrizione).' ]}
2017-08-04 16:28:16 +02:00
</ div >
2020-11-02 14:36:53 +01:00
</ div > ' ;
2020-11-06 10:46:42 +01:00
if ( ! empty ( $id_anagrafica )) {
2020-11-02 14:36:53 +01:00
$id_conto_anticipo_fornitori = setting ( 'Conto anticipo fornitori' );
$id_conto_anticipo_clienti = setting ( 'Conto anticipo clienti' );
2020-11-02 17:00:36 +01:00
$anticipo_cliente = $dbo -> fetchOne ( 'SELECT ABS(SUM(totale)) AS totale FROM co_movimenti WHERE co_movimenti.id_anagrafica=' . prepare ( $id_anagrafica ) . ' AND co_movimenti.idconto=' . prepare ( $id_conto_anticipo_clienti ));
2020-11-02 14:36:53 +01:00
2020-11-02 17:00:36 +01:00
$anticipo_fornitore = $dbo -> fetchOne ( 'SELECT ABS(SUM(totale)) AS totale FROM co_movimenti WHERE co_movimenti.id_anagrafica=' . prepare ( $id_anagrafica ) . ' AND co_movimenti.idconto=' . prepare ( $id_conto_anticipo_fornitori ));
2020-11-02 14:36:53 +01:00
2020-11-06 10:46:42 +01:00
if ( $anticipo_fornitore [ 'totale' ] != 0 ) {
2020-11-02 14:36:53 +01:00
echo '
< div class = " alert alert-warning " >
'.tr(' Attenzione : è stato anticipato al fornitore un importo di _TOTALE_ ' ,
2024-01-15 15:30:45 +01:00
[
'_TOTALE_' => moneyFormat ( $anticipo_fornitore [ 'totale' ]),
]
) . '
2020-11-02 14:36:53 +01:00
</ div > ' ;
}
2020-11-06 10:46:42 +01:00
if ( $anticipo_cliente [ 'totale' ] != 0 ) {
2020-11-02 14:36:53 +01:00
echo '
< div class = " alert alert-warning " >
'.tr(' Attenzione : è stato ricevuto un anticipo dal cliente di _TOTALE_ ' ,
2024-01-15 15:30:45 +01:00
[
'_TOTALE_' => moneyFormat ( $anticipo_cliente [ 'totale' ]),
]
) . '
2020-11-02 14:36:53 +01:00
</ div > ' ;
}
}
2017-08-04 16:28:16 +02:00
2019-07-31 18:22:35 +02:00
include $structure -> filepath ( 'movimenti.php' );
2017-08-04 16:28:16 +02:00
2022-06-14 16:56:08 +02:00
// Possibilità di forzare la chiusura della scadenza per le scadenze generiche
if ( empty ( $id_documenti ) && ! empty ( $id_scadenze )) {
echo '
< div class = " row " >
< div class = " col-md-offset-9 col-md-3 " >
{[ " type " : " checkbox " , " label " : " '.tr('Forza chiusura scadenza').' " , " name " : " chiudi_scadenza " ]}
</ div >
</ div > ' ;
}
2020-11-02 14:36:53 +01:00
echo '
2017-08-04 16:28:16 +02:00
<!-- PULSANTI -->
< div class = " row " >
< div class = " col-md-12 text-right " >
2020-10-14 11:58:52 +02:00
< button type = " button " class = " btn btn-info " disabled id = " modello-button " >
2019-07-25 12:54:28 +02:00
< i class = " fa fa-plus " ></ i > '.tr(' Aggiungi e crea modello ').'
</ button >
2020-10-13 14:53:01 +02:00
2020-10-14 11:58:52 +02:00
< button type = " submit " class = " btn btn-primary " disabled id = " add-submit " >
2019-07-25 12:54:28 +02:00
< i class = " fa fa-plus " ></ i > '.tr(' Aggiungi ').'
</ button >
2017-08-04 16:28:16 +02:00
</ div >
</ div >
2019-07-25 12:54:28 +02:00
</ form > ' ;
2020-10-13 14:53:01 +02:00
echo '
< script type = " text/javascript " >
$ ( " #modals > div #add-form " ) . on ( " submit " , function ( e ) {
return controllaConti ();
});
</ script > ' ;
if ( $permetti_modelli ) {
2024-03-27 16:59:46 +01:00
$variables = Module :: find (( new Module ()) -> getByField ( 'name' , 'Anagrafiche' , Models\Locale :: getPredefined () -> id )) -> getPlaceholders ( $id_anagrafica );
2020-10-13 14:53:01 +02:00
echo '
2019-07-25 12:54:28 +02:00
< script type = " text/javascript " >
2020-10-13 14:53:01 +02:00
globals . prima_nota = {
variables : '.json_encode($variables).' ,
id_documento : " '. $id_documenti[0] .' " ,
translations : {
nuovoModello : " '.tr('Aggiungi e crea modello').' " ,
modificaModello : " '.tr('Aggiungi e modifica modello').' " ,
},
id_mastrino_input : input ( " idmastrino " ),
modello_input : input ( " modello_primanota " ),
modello_button : $ ( " #modello-button " ),
};
var modello_input = globals . prima_nota . modello_input ;
var id_mastrino_input = globals . prima_nota . id_mastrino_input ;
var modello_button = globals . prima_nota . modello_button ;
2020-10-14 11:58:52 +02:00
modello_button . prop ( " disabled " , false );
2020-10-13 14:53:01 +02:00
modello_input . change ( function () {
let id_mastrino = modello_input . get ();
if ( id_mastrino ) {
$ ( " #modello-button " ) . html ( `<i class="fa fa-edit"></i> ` + globals . prima_nota . translations . modificaModello );
id_mastrino_input . set ( id_mastrino );
} else {
$ ( " #modello-button " ) . html ( `<i class="fa fa-plus"></i> ` + globals . prima_nota . translations . nuovoModello );
id_mastrino_input . set ( 0 );
return ;
}
2017-08-04 16:28:16 +02:00
2020-10-13 14:53:01 +02:00
// Aggiornamento della causale nel caso di Fattura
let causale = modello_input . getData () . causale ;
if ( globals . prima_nota . id_documento !== " " ) {
2020-10-16 18:20:30 +02:00
for ([ key , value ] of Object . entries ( globals . prima_nota . variables )) {
causale = causale . replace ( key , value );
2020-10-13 14:53:01 +02:00
}
2019-07-25 12:54:28 +02:00
2020-10-13 14:53:01 +02:00
$ ( " #modals > div #desc " ) . val ( causale );
}
2021-01-12 14:43:38 +01:00
if ( $ ( " #modals > div #desc " ) . val () == " " ) {
$ ( " #modals > div #desc " ) . val ( causale );
}
2020-10-13 14:53:01 +02:00
$ . get ( globals . rootdir + " /ajax_complete.php?op=get_conti&idmastrino= " + id_mastrino , function ( data ) {
let conti = data . split ( " , " );
2021-01-29 17:04:21 +01:00
let table = $ ( " #modals table.scadenze " ) . first ();
2020-10-13 14:53:01 +02:00
let button = table . parent () . find ( " button " ) . first ();
// Creazione delle eventuali righe aggiuntive
let row_needed = conti . length ;
let row_count = table . find ( " tr " ) . length - 2 ;
while ( row_count < row_needed ) {
button . click ();
row_count = table . find ( " tr " ) . length - 2 ;
2019-07-25 12:54:28 +02:00
}
2017-08-04 16:28:16 +02:00
2020-10-13 14:53:01 +02:00
// Iterazione su tutti i conti del Modello
let righe = table . find ( " tr " );
for ( let i = 0 ; i < conti . length ; i ++ ) {
const dati_conto = conti [ i ] . split ( " ; " );
2017-08-04 16:28:16 +02:00
2020-10-13 14:53:01 +02:00
let id_conto = parseInt ( dati_conto [ 0 ]);
let descrizione_conto = dati_conto [ 1 ];
2021-01-29 17:04:21 +01:00
let totale = dati_conto [ 2 ];
2020-10-13 14:53:01 +02:00
// Sostituzione del conto dell\'Anagrafica
2022-09-13 17:28:03 +02:00
if ( id_conto === - 1 ){
id_conto = parseInt ( globals . prima_nota . variables [ " { conto} " ]);
descrizione_conto = globals . prima_nota . variables [ " { conto_descrizione} " ];
2017-08-04 16:28:16 +02:00
}
2019-07-25 12:54:28 +02:00
2020-10-13 14:53:01 +02:00
// Selezione del conto
let select = $ ( righe [ i + 1 ]) . find ( " select " );
input ( select ) . getElement ()
. selectSetNew ( id_conto , descrizione_conto );
2021-01-29 17:04:21 +01:00
if ( totale > 0 ){
input_field = $ ( righe [ i + 1 ]) . find ( " input[id*=dare] " );
} else {
input_field = $ ( righe [ i + 1 ]) . find ( " input[id*=avere] " );
totale = - totale ;
}
input ( input_field ) . getElement ()
. val ( totale ) . trigger ( " change " );
2019-07-25 12:54:28 +02:00
}
});
});
2020-10-13 14:53:01 +02:00
$ ( " #modals > div #modello-button " ) . click ( function () {
$ ( " #modals > div #crea_modello " ) . val ( " 1 " );
$ ( " #modals > div #add-form " ) . submit ();
});
</ script > ' ;
}