2018-02-09 15:43:51 +01:00
< ? php
2018-06-26 14:30:26 +02:00
if ( file_exists ( __DIR__ . '/../../../core.php' )) {
include_once __DIR__ . '/../../../core.php' ;
} else {
include_once __DIR__ . '/../../core.php' ;
2018-06-18 15:56:00 +02:00
}
2018-09-19 16:51:37 +02:00
use Util\Zip ;
2018-09-27 17:27:39 +02:00
use Modules\Fatture\Fattura ;
use Modules\Fatture\Tipo ;
use Modules\Anagrafiche\Anagrafica ;
2018-09-19 16:51:37 +02:00
2018-09-27 17:27:39 +02:00
// Segmenti
$id_fatture = Modules :: get ( 'Fatture di vendita' )[ 'id' ];
if ( ! isset ( $_SESSION [ 'module_' . $id_fatture ][ 'id_segment' ])) {
$segments = Modules :: getSegments ( $id_fatture );
$_SESSION [ 'module_' . $id_fatture ][ 'id_segment' ] = isset ( $segments [ 0 ][ 'id' ]) ? $segments [ 0 ][ 'id' ] : null ;
}
$id_segment = $_SESSION [ 'module_' . $id_fatture ][ 'id_segment' ];
2018-02-09 15:43:51 +01:00
switch ( post ( 'op' )) {
case 'export-bulk' :
2018-03-22 15:40:20 +01:00
2018-02-09 15:43:51 +01:00
$dir = DOCROOT . '/files/export_interventi/' ;
directory ( $dir . 'tmp/' );
// Rimozione dei contenuti precedenti
$files = glob ( $dir . '/*.zip' );
foreach ( $files as $file ) {
delete ( $file );
}
2018-07-18 15:20:10 +02:00
// Selezione degli interventi da stampare
$interventi = $dbo -> fetchArray ( 'SELECT in_interventi.id, in_interventi.codice, data_richiesta, ragione_sociale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id IN(' . implode ( ',' , $id_records ) . ')' );
2018-02-09 15:43:51 +01:00
2018-07-18 15:20:10 +02:00
if ( ! empty ( $interventi )) {
foreach ( $interventi as $r ) {
2018-02-18 19:53:23 +01:00
$numero = $r [ 'codice' ];
$numero = str_replace ([ '/' , '\\' ], '-' , $numero );
2018-02-09 15:43:51 +01:00
// Gestione della stampa
$rapportino_nome = sanitizeFilename ( $numero . ' ' . date ( 'Y_m_d' , strtotime ( $r [ 'data_richiesta' ])) . ' ' . $r [ 'ragione_sociale' ] . '.pdf' );
$filename = slashes ( $dir . 'tmp/' . $rapportino_nome );
2018-09-26 10:49:38 +02:00
$print = Prints :: getModulePredefinedPrint ( $id_module );
2018-02-18 19:53:23 +01:00
2018-06-29 15:57:12 +02:00
Prints :: render ( $print [ 'id' ], $r [ 'id' ], $filename );
2018-02-09 15:43:51 +01:00
}
$dir = slashes ( $dir );
$file = slashes ( $dir . 'interventi_' . time () . '.zip' );
// Creazione zip
if ( extension_loaded ( 'zip' )) {
2018-09-19 16:51:37 +02:00
Zip :: create ( $dir . 'tmp/' , $file );
2018-02-09 15:43:51 +01:00
// Invio al browser dello zip
download ( $file );
// Rimozione dei contenuti
delete ( $dir . 'tmp/' );
}
}
2018-03-22 15:40:20 +01:00
break ;
2018-08-31 12:33:48 +02:00
case 'crea_fattura' :
$id_documento_cliente = [];
$n_interventi = 0 ;
2018-03-22 15:40:20 +01:00
2018-03-08 17:29:32 +01:00
$data = date ( 'Y-m-d' );
$dir = 'entrata' ;
2018-09-27 17:27:39 +02:00
$tipo_documento = Tipo :: where ( 'descrizione' , 'Fattura immediata di vendita' ) -> first ();
2018-03-08 17:29:32 +01:00
2018-09-03 16:01:05 +02:00
$id_iva = setting ( 'Iva predefinita' );
$id_conto = setting ( 'Conto predefinito fatture di vendita' );
2018-03-08 17:29:32 +01:00
2018-08-31 12:33:48 +02:00
$accodare = post ( 'accodare' );
2018-09-27 17:27:39 +02:00
$id_segment = post ( 'id_segment' );
2018-03-08 17:29:32 +01:00
2018-09-27 17:27:39 +02:00
$interventi = $dbo -> fetchArray ( 'SELECT *, IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id), in_interventi.data_richiesta) AS data, in_statiintervento.descrizione AS stato FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id_preventivo IS NULL AND in_interventi.id NOT IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL) AND in_interventi.id IN (' . implode ( ',' , $id_records ) . ')' );
2018-09-24 10:51:48 +02:00
2018-08-31 12:33:48 +02:00
// Lettura righe selezionate
foreach ( $interventi as $intervento ) {
$id_anagrafica = $intervento [ 'idanagrafica' ];
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
$id_documento = $id_documento_cliente [ $id_anagrafica ];
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
// Se non c'è già una fattura appena creata per questo cliente, creo una fattura nuova
if ( empty ( $id_documento )) {
if ( ! empty ( $accodare )) {
$documento = $dbo -> fetchOne ( 'SELECT co_documenti.id FROM co_documenti INNER JOIN co_statidocumento ON co_documenti.idstatodocumento = co_statidocumento.id WHERE co_statidocumento.descrizione = \'Bozza\' AND idanagrafica = ' . prepare ( $id_anagrafica ));
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
$id_documento = $documento [ 'id' ];
$id_documento_cliente [ $id_anagrafica ] = $id_documento ;
2018-03-22 15:40:20 +01:00
}
2018-08-31 12:33:48 +02:00
if ( empty ( $id_documento )) {
2018-09-27 17:27:39 +02:00
$anagrafica = Anagrafica :: find ( $id_anagrafica );
2018-10-02 18:25:52 +02:00
$fattura = Fattura :: make ( $anagrafica , $tipo_documento , $data , $id_segment );
2018-09-27 17:27:39 +02:00
$id_documento = $fattura -> id ;
2018-08-31 12:33:48 +02:00
$id_documento_cliente [ $id_anagrafica ] = $id_documento ;
2018-03-22 15:40:20 +01:00
}
2018-08-31 12:33:48 +02:00
}
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
$descrizione = tr ( 'Intervento numero _NUM_ del _DATE_ [_STATE_]' , [
'_NUM_' => $intervento [ 'codice' ],
'_DATE_' => Translator :: dateToLocale ( $intervento [ 'data' ]),
'_STATE_' => $intervento [ 'stato' ],
]);
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
aggiungi_intervento_in_fattura ( $intervento [ 'id' ], $id_documento , $descrizione , $id_iva , $id_conto );
2018-09-03 16:49:43 +02:00
++ $n_interventi ;
2018-03-22 15:40:20 +01:00
}
if ( $n_interventi > 0 ) {
2018-09-03 16:01:05 +02:00
flash () -> info ( tr ( '_NUM_ interventi fatturati.' , [
2018-03-22 15:40:20 +01:00
'_NUM_' => $n_interventi ,
2018-07-07 13:56:22 +02:00
]));
2018-03-22 15:40:20 +01:00
} else {
2018-07-19 17:29:21 +02:00
flash () -> warning ( tr ( 'Nessuna attività fatturata!' ));
2018-03-08 17:29:32 +01:00
}
2018-03-22 15:40:20 +01:00
break ;
2018-02-09 15:43:51 +01:00
}
return [
2018-03-22 15:40:20 +01:00
'export-bulk' => [
2018-02-09 15:43:51 +01:00
'text' => tr ( 'Esporta stampe' ),
'data' => [
2018-07-23 12:57:46 +02:00
'title' => tr ( 'Vuoi davvero esportare queste stampe in un archivio?' ),
2018-07-23 13:47:09 +02:00
'msg' => '' ,
2018-07-23 12:57:46 +02:00
'button' => tr ( 'Crea archivio' ),
2018-02-09 15:43:51 +01:00
'class' => 'btn btn-lg btn-warning' ,
'blank' => true ,
],
],
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
'crea_fattura' => [
2018-03-08 17:29:32 +01:00
'text' => tr ( 'Crea fattura' ),
'data' => [
2018-07-23 13:47:09 +02:00
'title' => tr ( 'Vuoi davvero generare le fatture per questi interventi?' ),
2018-09-28 09:30:46 +02:00
'msg' => tr ( 'Verranno fatturati gli interventi completati non inseriti in preventivi e contratti' ) . '.<br>{[ "type": "checkbox", "placeholder": "' . tr ( 'Aggiungere alle fatture esistenti non ancora emesse?' ) . ' " , " name " : " accodare " ]}
2018-09-27 17:27:39 +02:00
< br > {[ " type " : " select " , " label " : " '.tr('Sezionale').' " , " name " : " id_segment " , " required " : 1 , " values " : " query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module= \ ''. $id_fatture .' \ ' AND is_fiscale = 1 ORDER BY name " , " value " : " '. $id_segment .' " ]} ' ,
2018-07-23 12:57:46 +02:00
'button' => tr ( 'Crea fatture' ),
2018-03-08 17:29:32 +01:00
'class' => 'btn btn-lg btn-warning' ,
'blank' => false ,
],
],
2018-02-09 15:43:51 +01:00
];