2021-12-01 12:27:56 +01:00
< ? php
2024-03-22 15:52:24 +01:00
use Models\Module ;
2021-12-01 12:27:56 +01:00
use Modules\Anagrafiche\Anagrafica ;
use Modules\Banche\Banca ;
use Modules\Scadenzario\Scadenza ;
2023-08-04 14:54:28 +02:00
use Plugins\PresentazioniBancarie\Gestore ;
2021-12-01 12:27:56 +01:00
include_once __DIR__ . '/init.php' ;
echo '
< style >
. select2 - selection__rendered {
line - height : 21 px ! important ;
}
. select2 - container . select2 - selection -- single {
height : 25 px ! important ;
}
. select2 - selection__arrow {
height : 24 px ! important ;
position : absolute ! important ;
top : - 1 px ! important ;
}
</ style >
< script >
$ ( document ) . ready ( function () {
$ ( " #pulsanti .pull-right " ) . hide ();
})
</ script >
2022-02-21 09:32:56 +01:00
< p > '.tr(' Riepilogo di esportazione dei pagamenti ').' .</ p > ' ;
2021-12-01 12:27:56 +01:00
// Azienda predefinita
$azienda = Anagrafica :: find ( setting ( 'Azienda predefinita' ));
$banca_azienda = Gestore :: getBancaPredefinitaAzienda ();
if ( empty ( $banca_azienda )) {
echo '
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i >
2022-02-21 09:32:56 +01:00
'.tr("La banca dell' azienda non è definita o non ha impostati i campi Codice IBAN e BIC " ).'.
'.Modules::link(' Banche ', $azienda->id, tr(' Imposta '), null, null).'
2021-12-01 12:27:56 +01:00
</ div > ' ;
}
$scadenze = Scadenza :: with ( 'documento' ) -> whereIn ( 'id' , $records );
// Filtro per scadenze pagate
$esporta_pagati = get ( 'pagati' );
if ( ! $esporta_pagati ) {
$scadenze = $scadenze -> whereRaw ( 'ABS(pagato) < ABS(da_pagare)' );
}
// Filtro per scadenze esportate in precedenza
$esporta_processati = get ( 'processati' );
if ( ! $esporta_processati ) {
$scadenze = $scadenze -> whereNull ( 'presentazioni_exported_at' );
}
// Lettura delle informazioni
$scadenze = $scadenze -> get ();
$id_scadenze = $scadenze -> pluck ( 'id' );
2022-09-01 12:52:33 +02:00
$raggruppamento = $scadenze -> groupBy ( 'idanagrafica' );
2021-12-01 12:27:56 +01:00
if ( $raggruppamento -> isEmpty ()) {
echo '
< p > '.tr(' Nessun pagamento disponibile secondo la selezione effettuata ').' .</ p > ' ;
return ;
}
foreach ( $raggruppamento as $id_anagrafica => $scadenze_anagrafica ) {
2022-09-01 12:52:33 +02:00
$anagrafica = $scadenze_anagrafica -> first () -> anagrafica ;
2021-12-01 12:27:56 +01:00
echo '
< h3 >
' . $anagrafica -> ragione_sociale ;
$banca_controparte = Banca :: where ( 'id_anagrafica' , $anagrafica -> id )
-> where ( 'predefined' , 1 )
-> first ();
if ( empty ( $banca_controparte )) {
echo '
</ h3 >
< p > '.tr(' Banca predefinita non impostata ').' .</ p > ' ;
continue ;
}
echo '
</ h3 >
< table class = " table table-condensed table-striped " >
< thead >
< tr >
< th > '.tr(' Causale ').' </ th >
< th class = " text-center " > '.tr(' Data ').' </ th >
< th class = " text-center " > '.tr(' Totale ').' </ th >
</ tr >
</ thead >
< tbody > ' ;
$scadenze = $scadenze_anagrafica -> sortBy ( 'scadenza' );
foreach ( $scadenze as $scadenza ) {
$totale = abs ( $scadenza -> da_pagare ) - abs ( $scadenza -> pagato );
echo '
< tr >
< td >
< span >
'.$scadenza->descrizione.'
</ span > ' ;
$data_esportazione = $scadenza -> presentazioni_exported_at ;
if ( ! empty ( $data_esportazione )) {
echo '
< span class = " badge pull-right " > '.tr(' Esportato in data : _DATE_ ' , [
2024-03-22 15:52:24 +01:00
'_DATE_' => timestampFormat ( $data_esportazione ),
]) . '</span>' ;
2021-12-01 12:27:56 +01:00
}
$banca_controparte = Gestore :: getBancaControparte ( $scadenza );
if ( $database -> tableExists ( 'co_mandati_sepa' )) {
$rs_mandato = $dbo -> fetchArray ( 'SELECT * FROM co_mandati_sepa WHERE id_banca = ' . prepare ( $banca_controparte -> id ));
2023-08-04 14:54:28 +02:00
} else {
2021-12-01 12:27:56 +01:00
$rs_mandato = false ;
}
2023-08-04 14:54:28 +02:00
$is_rid = in_array ( $scadenza -> documento -> pagamento [ 'codice_modalita_pagamento_fe' ], [ 'MP09' , 'MP10' , 'MP11' ]);
$is_riba = in_array ( $scadenza -> documento -> pagamento [ 'codice_modalita_pagamento_fe' ], [ 'MP12' ]);
$is_sepa = in_array ( $scadenza -> documento -> pagamento [ 'codice_modalita_pagamento_fe' ], [ 'MP19' , 'MP20' , 'MP21' ]);
$is_bonifico = in_array ( $scadenza -> documento -> pagamento [ 'codice_modalita_pagamento_fe' ], [ 'MP05' ]);
2021-12-01 12:27:56 +01:00
$documento = $scadenza -> documento ;
$pagamento = $documento -> pagamento ;
if ( $is_rid ) {
2023-08-04 14:54:28 +02:00
if ( ! $rs_mandato ) {
2021-12-01 12:27:56 +01:00
echo '
2024-05-16 18:02:50 +02:00
< span class = " badge badge-danger " > '.tr(' Id mandato mancante ').' </ span > ' ;
2021-12-01 12:27:56 +01:00
}
2023-08-04 14:54:28 +02:00
if ( ! $banca_azienda -> creditor_id ) {
2021-12-01 12:27:56 +01:00
echo '
2024-05-16 18:02:50 +02:00
< span class = " badge badge-danger " > '.tr(' Id creditore mancante ').' </ span > ' ;
2021-12-01 12:27:56 +01:00
}
2023-08-04 14:54:28 +02:00
} elseif (( $is_riba && empty ( $banca_azienda -> codice_sia )) || ( $is_bonifico && empty ( $banca_azienda -> codice_sia ))) {
2021-12-01 12:27:56 +01:00
echo '
2024-05-16 18:02:50 +02:00
< span class = " badge badge-danger " > '.tr(' Codice SIA banca emittente mancante ').' </ span > ' ;
2023-08-04 14:54:28 +02:00
}
2021-12-01 12:27:56 +01:00
2023-08-04 14:54:28 +02:00
if ( $is_sepa ) {
2024-01-15 15:30:45 +01:00
// Prima, successiva, singola
2021-12-01 12:27:56 +01:00
2024-03-22 15:52:24 +01:00
$scadenze_antecedenti = $dbo -> fetchArray ( 'SELECT * FROM `co_scadenziario` INNER JOIN `co_documenti` ON `co_scadenziario`.`iddocumento`=`co_documenti`.`id` INNER JOIN `co_pagamenti` ON `co_documenti`.`idpagamento`=`co_pagamenti`.`id` LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id` = `co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang` = ' . prepare ( Models\Locale :: getDefault () -> id ) . ') WHERE `co_documenti`.`idanagrafica`=' . prepare ( $id_anagrafica ) . " AND `codice_modalita_pagamento_fe` IN('MP19','MP20','MP21') AND `data_emissione`< " . prepare ( $scadenza -> data_emissione ));
2021-12-01 12:27:56 +01:00
$check_successiva = '' ;
$check_prima = '' ;
$check_singola = '' ;
2023-08-04 14:54:28 +02:00
if ( sizeof ( $scadenze_antecedenti ) > 0 ) {
2021-12-01 12:27:56 +01:00
$check_successiva = 'selected' ;
2023-08-04 14:54:28 +02:00
} else {
2021-12-01 12:27:56 +01:00
$check_prima = 'selected' ;
}
2023-08-04 14:54:28 +02:00
if ( sizeof ( $rs_mandato ) > 0 ) {
if ( $rs_mandato [ 0 ][ 'singola_disposizione' ] == '1' ) {
2021-12-01 12:27:56 +01:00
$check_singola = 'selected' ;
$check_successiva = '' ;
$check_prima = '' ;
}
}
echo '
< span class = " pull-right " style = " margin-right:15px; " >
< select class = " sequenza " name = " sequenza[] " data - idscadenza = " '. $scadenza->id .' " style = " width:300px; " >
< option value = " " >- Seleziona una sequenza -</ option >
< option value = " FRST " '.$check_prima.' > Prima di una serie di disposizioni </ option >
< option value = " RCUR " '.$check_successiva.' > Successiva di una serie di disposizioni di incasso </ option >
< option value = " FNAL " > Ultima di una serie di disposizioni </ option >
< option value = " OOFF " '.$check_singola.' > Singola diposizione non ripetuta </ option >
</ select >
</ span > ' ;
}
echo '
</ td >
< td class = " text-center " >
'.dateFormat($scadenza->scadenza).'
</ td >
< td class = " text-right " >
'.moneyFormat($totale).'
</ td >
</ tr > ' ;
}
echo '
</ tbody >
</ table > ' ;
}
echo '
< div class = " row " >
< div class = " col-md-12 text-right " >
< button type = " button " class = " btn btn-primary '.(!empty( $banca_azienda ) ? '' : 'disabled').' " onclick = " esporta(this) " >
< i class = " fa fa-download " ></ i > '.tr(' Esporta ').'
</ button >
</ div >
</ div >
< div class = " row hidden " id = " info " >
< div class = " col-md-12 " >
< p > '.tr(' Le scadenze selezionate sono state esportate nei seguenti file ').' :</ p >
< ul id = " files " ></ ul >
</ div >
< div class = " col-md-12 text-right " >
< button type = " button " id = " registrazione_contabile " class = " btn btn-primary " onclick = " registraPagamenti(this) " >
< i class = " fa fa-save " ></ i > '.tr(' Registrazione contabile ').'
</ button >
</ div >
</ div > ' ;
2024-04-18 17:44:05 +02:00
$modulo_prima_nota = ( new Module ()) -> getByField ( 'title' , 'Prima nota' , Models\Locale :: getPredefined () -> id );
2021-12-01 12:27:56 +01:00
echo '
< script >
$ ( " .sequenza " ) . select2 ();
function esporta ( button ) {
let restore = buttonLoading ( button );
//Creo un array con i valori di sequenza
var inputs = $ ( " .sequenza " );
var sequenze = new Array ();
for ( var i = 0 ; i < inputs . length ; i ++ ){
if ( $ ( inputs [ i ]) . val ()){
sequenze [ i ] = $ ( inputs [ i ]) . data ( " idscadenza " ) + " - " + $ ( inputs [ i ]) . val ();
}
}
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
cache : false ,
type : " POST " ,
dataType : " json " ,
data : {
id_module : globals . id_module ,
id_plugin : " '. $id_plugin .' " ,
scadenze : [ '.implode(' , ', $id_scadenze->toArray()).' ],
sequenze : sequenze ,
op : " generate " ,
},
}) . then ( function ( response ) {
buttonRestore ( button , restore );
if ( response . scadenze . length ) {
$ ( button ) . addClass ( " hidden " );
$ ( " #info " ) . removeClass ( " hidden " );
// Salvataggio delle scadenze esportate correttamente
$ ( " #registrazione_contabile " ) . data ( " scadenze " , response . scadenze );
// Creazione dei link per il download dei file
let fileList = $ ( " #files " );
for ( const file of response . files ){
fileList . append ( ` < li >
< a href = " ` + file + ` " target = " _blank " > ` + file + ` </ a >
< button type = " button " class = " btn btn-xs btn-info " onclick = " scaricaFile( \ '` + file + ` \ ') " >
< i class = " fa fa-download " ></ i >
</ button >
</ li > ` )
}
} else {
swal ({
title : " '.tr('Impossibile esportare le scadenze indicate!').' " ,
type : " error " ,
})
}
});
}
function scaricaFile ( file ) {
fetch ( file )
. then ( resp => resp . blob ())
. then ( blob => {
const url = window . URL . createObjectURL ( blob );
const a = document . createElement ( " a " );
a . style . display = " none " ;
a . href = url ;
// the filename you want
a . download = file . split ( " / " ) . pop ();
document . body . appendChild ( a );
a . click ();
window . URL . revokeObjectURL ( url );
})
. catch (() => swal ( " '.tr('Errore').' " , " '.tr('Errore durante il download').' " , " error " ));
}
function registraPagamenti ( button ) {
let scadenze = $ ( button ) . data ( " scadenze " );
openModal ( " '.tr('Registrazione contabile pagamento').' " , globals . rootdir + " /add.php?id_module='. $modulo_prima_nota['id'] .'&id_records= " + scadenze . join ( " ; " ));
}
</ script > ' ;