2019-07-25 15:06:07 +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 />.
*/
2019-07-25 15:06:07 +02:00
include_once __DIR__ . '/../../core.php' ;
2024-03-22 15:52:24 +01:00
use Models\Module ;
2022-11-15 17:38:42 +01:00
use Models\OperationLog ;
2024-05-09 10:29:53 +02:00
use Models\PrintTemplate ;
2021-12-10 12:45:44 +01:00
use Modules\Anagrafiche\Anagrafica ;
2022-11-15 17:38:42 +01:00
use Modules\Emails\Mail ;
use Modules\Emails\Template ;
2021-12-10 12:45:44 +01:00
use Modules\Fatture\Fattura ;
use Modules\Scadenzario\Scadenza ;
$anagrafica_azienda = Anagrafica :: find ( setting ( 'Azienda predefinita' ));
2021-12-07 13:05:41 +01:00
switch ( post ( 'op' )) {
case 'change_distinta' :
$distinta = post ( 'distinta' );
$n_scadenze = 0 ;
foreach ( $id_records as $id ) {
$database -> update ( 'co_scadenziario' , [
'distinta' => $distinta ,
], [ 'id' => $id ]);
++ $n_scadenze ;
}
if ( $n_scadenze > 0 ) {
2022-03-10 11:34:01 +01:00
flash () -> info ( tr ( 'Info distinta aggiornata a _NUM_ scadenze!' , [
2021-12-07 13:05:41 +01:00
'_NUM_' => $n_scadenze ,
]));
} else {
flash () -> warning ( tr ( 'Nessuna scadenza modificata!' ));
}
2021-12-10 12:45:44 +01:00
break ;
case 'change-bank' :
$list = [];
foreach ( $id_records as $id ) {
$scadenza = Scadenza :: find ( $id );
2023-08-04 14:54:28 +02:00
if ( $scadenza -> iddocumento ) {
2021-12-10 12:45:44 +01:00
$documento = Fattura :: find ( $scadenza -> iddocumento );
$documento -> id_banca_azienda = post ( 'id_banca' );
$documento -> save ();
array_push ( $list , $documento -> numero_esterno );
}
}
2023-08-04 14:54:28 +02:00
if ( $list ) {
2021-12-10 12:45:44 +01:00
flash () -> info ( tr ( 'Banca aggiornata per le Fatture _LIST_ !' , [
'_LIST_' => implode ( ',' , $list ),
]));
}
2022-11-15 17:38:42 +01:00
break ;
case 'send-sollecito' :
2024-06-11 16:58:27 +02:00
$template = Template :: where ( 'name' , 'Sollecito di pagamento raggruppato per anagrafica' ) -> first () -> id ;
2023-08-04 14:54:28 +02:00
2022-11-15 17:38:42 +01:00
$list = [];
2023-07-07 15:17:40 +02:00
$anagrafiche = [];
2023-10-27 10:35:05 +02:00
$id_anagrafica = 0 ;
2023-10-18 12:00:34 +02:00
foreach ( $id_records as $id ) {
2023-10-18 12:34:17 +02:00
$scadenze = $database -> FetchArray ( 'SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id = ' . $id . ' AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento' );
2023-10-18 12:00:34 +02:00
foreach ( $scadenze as $key => $scadenza ) {
$scadenza = Scadenza :: find ( $scadenza [ 'id' ]);
$documento = Fattura :: find ( $scadenza [ 'iddocumento' ]);
// Controllo se è una fattura di vendita
if ( $documento -> direzione == 'entrata' && $scadenza -> scadenza <= date ( 'Y-m-d' )) {
$id_documento = $documento -> id ;
$id_anagrafica = $documento -> idanagrafica ;
2022-11-15 17:38:42 +01:00
2023-07-07 15:23:52 +02:00
$fattura_allegata = $dbo -> selectOne ( 'zz_files' , 'id' , [ 'id_module' => $id_module , 'id_record' => $scadenza -> id , 'original' => $scadenza -> descrizione . '.pdf' ])[ 'id' ];
2023-07-07 15:17:40 +02:00
2023-10-18 12:00:34 +02:00
// Allego stampa della fattura se non presente
if ( empty ( $fattura_allegata )) {
2024-06-11 16:58:27 +02:00
$print_predefined = PrintTemplate :: where ( 'predefined' , 1 ) -> where ( 'id_module' , Module :: where ( 'name' , 'Fatture di vendita' ) -> first () -> id ) -> first ();
2023-10-18 12:00:34 +02:00
2024-03-12 12:31:49 +01:00
$print = Prints :: render ( $print_predefined -> id , $id_documento , null , true );
2023-10-18 12:00:34 +02:00
$upload = Uploads :: upload ( $print [ 'pdf' ], [
'name' => $scadenza -> descrizione ,
'original_name' => $scadenza -> descrizione . '.pdf' ,
'category' => 'Generale' ,
'id_module' => $id_module ,
'id_record' => $scadenza -> id ,
]);
$fattura_allegata = $dbo -> selectOne ( 'zz_files' , 'id' , [ 'id_module' => $id_module , 'id_record' => $scadenza -> id , 'original' => $scadenza -> descrizione . '.pdf' ])[ 'id' ];
}
// Selezione destinatari e invio mail
if ( ! empty ( $template )) {
// Invio unico per scadenze della stessa anagrafica
if ( ! in_array ( $documento -> idanagrafica , $anagrafiche )) {
$creata_mail = false ;
$emails = [];
// Aggiungo email anagrafica
if ( ! empty ( $documento -> anagrafica -> email )) {
$emails [] = $documento -> anagrafica -> email ;
$mail = Mail :: build ( auth () -> getUser (), $template , $scadenza -> id );
$mail -> addReceiver ( $documento -> anagrafica -> email );
2023-07-07 15:17:40 +02:00
$creata_mail = true ;
}
2023-08-04 14:54:28 +02:00
2023-10-18 12:00:34 +02:00
// Aggiungo email referenti in base alla mansione impostata nel template
$mansioni = $dbo -> select ( 'em_mansioni_template' , 'idmansione' , [], [ 'id_template' => $template -> id ]);
foreach ( $mansioni as $mansione ) {
$referenti = $dbo -> table ( 'an_referenti' ) -> where ( 'idmansione' , $mansione [ 'idmansione' ]) -> where ( 'idanagrafica' , $id_anagrafica ) -> where ( 'email' , '!=' , '' ) -> get ();
if ( ! $referenti -> isEmpty () && $creata_mail == false ) {
$mail = Mail :: build ( auth () -> getUser (), $template , $id );
$creata_mail = true ;
}
foreach ( $referenti as $referente ) {
if ( ! in_array ( $referente -> email , $emails )) {
$emails [] = $referente -> email ;
$mail -> addReceiver ( $referente -> email );
}
2023-08-04 14:54:28 +02:00
}
2023-07-07 15:17:40 +02:00
}
2022-11-15 17:38:42 +01:00
}
}
2023-07-07 15:17:40 +02:00
2023-02-17 16:31:07 +01:00
if ( ! empty ( $emails )) {
2022-11-15 17:38:42 +01:00
OperationLog :: setInfo ( 'id_email' , $mail -> id );
OperationLog :: setInfo ( 'id_module' , $id_module );
2023-07-07 15:17:40 +02:00
OperationLog :: setInfo ( 'id_record' , $scadenza -> id );
2022-11-15 17:38:42 +01:00
OperationLog :: build ( 'send-email' );
array_push ( $list , $documento -> numero_esterno );
2023-07-07 15:17:40 +02:00
array_push ( $anagrafiche , $scadenza -> idanagrafica );
$next_scadenza = $scadenze [ $key + 1 ];
// Allego unica fattura per più scadenze collegate
if ( ! empty ( $fattura_allegata ) && $scadenza -> iddocumento != $next_scadenza -> iddocumento ) {
$mail -> addUpload ( $fattura_allegata );
}
// Invio unico per scadenze della stessa anagrafica
if ( $scadenza -> idanagrafica != $next_scadenza -> idanagrafica ) {
$mail -> save ();
}
2022-11-15 17:38:42 +01:00
}
}
}
}
2023-08-04 14:54:28 +02:00
if ( $list ) {
2022-11-15 17:38:42 +01:00
flash () -> info ( tr ( 'Mail inviata per le Fatture _LIST_ !' , [
'_LIST_' => implode ( ',' , $list ),
]));
}
2021-12-10 12:45:44 +01:00
break ;
2021-12-07 13:05:41 +01:00
}
2019-07-25 15:06:07 +02:00
$operations [ 'registrazione-contabile' ] = [
'text' => '<span><i class="fa fa-calculator"></i> ' . tr ( 'Registrazione contabile' ) . '</span>' ,
'data' => [
'title' => tr ( 'Registrazione contabile' ),
'type' => 'modal' ,
'origine' => 'scadenzario' ,
2024-06-11 16:58:27 +02:00
'url' => base_path () . '/add.php?id_module=' . Module :: where ( 'name' , 'Prima nota' ) -> first () -> id ,
2019-07-25 15:06:07 +02:00
],
];
2021-12-07 13:05:41 +01:00
$operations [ 'change_distinta' ] = [
2022-03-10 11:34:01 +01:00
'text' => '<span><i class="fa fa-edit"></i> ' . tr ( 'Info distinta' ),
2021-12-07 13:05:41 +01:00
'data' => [
2022-03-10 11:34:01 +01:00
'title' => tr ( 'Modificare le informazioni della distinta?' ),
'msg' => tr ( 'Per ciascuna scadenza selezionata verrà modificata l\'informazione della distinta associata' ) . ' .< br >
< br > {[ " type " : " text " , " label " : " '.tr('Info distinta').' " , " name " : " distinta " , " required " : 1 ]} ' ,
2021-12-07 13:05:41 +01:00
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
'blank' => false ,
],
];
2021-12-10 12:45:44 +01:00
$operations [ 'change-bank' ] = [
'text' => '<span><i class="fa fa-refresh"></i> ' . tr ( 'Aggiorna banca' ) . '</span>' ,
'data' => [
'title' => tr ( 'Aggiornare la banca?' ),
'msg' => tr ( 'Per ciascuna scadenza selezionata, verrà aggiornata la banca della fattura di riferimento e quindi di conseguenza di tutte le scadenze collegate' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Banca').' " , " name " : " id_banca " , " required " : 1 , " values " : " query=SELECT id, CONCAT (nome, \ ' - \ ' , iban) AS descrizione FROM co_banche WHERE id_anagrafica='.prepare( $anagrafica_azienda->idanagrafica ).' " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2022-11-15 17:38:42 +01:00
$operations [ 'send-sollecito' ] = [
'text' => '<span><i class="fa fa-envelope"></i> ' . tr ( 'Invia mail sollecito' ) . '</span>' ,
'data' => [
'title' => tr ( 'Inviare mail sollecito?' ),
2023-07-07 15:17:40 +02:00
'msg' => tr ( 'Per ciascuna scadenza selezionata collegata ad una fattura di vendita, verrà inviata una mail con allegata la fattura di vendita corrispondente.<br>(Template utilizzato: Sollecito di pagamento raggruppato per anagrafica)' ),
2022-11-15 17:38:42 +01:00
'button' => tr ( 'Invia' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2019-07-25 15:06:07 +02:00
return $operations ;