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-06-26 09:41:43 +02:00
include_once Modules :: filepath ( 'Fatture di vendita' , 'modutil.php' );
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 );
}
// Selezione delle fatture da stampare
$records = $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 ) . ')' );
if ( ! empty ( $records )) {
foreach ( $records 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-06-29 15:57:12 +02:00
$print = Prints :: getModuleMainPrint ( $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' )) {
create_zip ( $dir . 'tmp/' , $file );
// 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-08-31 12:33:48 +02:00
$tipo_documento = $dbo -> selectOne ( 'co_tipidocumento' , 'id' , [ 'descrizione' => 'Fattura immediata di vendita' ])[ 'id' ];
2018-03-08 17:29:32 +01:00
2018-08-31 12:33:48 +02:00
$id_iva = get_var ( 'Iva predefinita' );
$id_conto = get_var ( 'Conto predefinito fatture di vendita' );
2018-07-23 13:47:09 +02:00
2018-08-31 12:33:48 +02:00
$accodare = post ( 'accodare' );
2018-03-08 17:29:32 +01:00
2018-08-31 12:33:48 +02:00
$module_name = 'Fatture di vendita' ;
2018-03-08 17:29:32 +01:00
2018-08-31 12:33:48 +02:00
// Segmenti
$id_fatture = Modules :: get ( $module_name )[ 'id' ];
if ( ! isset ( $_SESSION [ 'm' . $id_fatture ][ 'id_segment' ])) {
$segments = Modules :: getSegments ( $id_fatture );
$_SESSION [ 'm' . $id_fatture ][ 'id_segment' ] = isset ( $segments [ 0 ][ 'id' ]) ? $segments [ 0 ][ 'id' ] : null ;
2018-03-08 17:29:32 +01:00
}
2018-08-31 12:33:48 +02:00
$id_segment = $_SESSION [ 'm' . $id_fatture ][ 'id_segment' ];
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +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 NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND in_interventi.id NOT IN (SELECT idintervento FROM co_contratti_promemoria WHERE idintervento IS NOT NULL) AND in_interventi.id IN (' . implode ( ',' , $id_records ) . ')' );
2018-03-22 15:40:20 +01: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 )) {
$numero = get_new_numerofattura ( $data );
$numero_esterno = get_new_numerosecondariofattura ( $data );
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
$campo = ( $dir == 'entrata' ) ? 'idpagamento_vendite' : 'idpagamento_acquisti' ;
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
// Tipo di pagamento predefinito dall'anagrafica
$query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT ' . $campo . ' AS pagamento FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $id_anagrafica ) . ')' ;
$rs = $dbo -> fetchArray ( $query );
$idpagamento = $rs [ 0 ][ 'id' ];
2018-03-22 15:40:20 +01:00
2018-08-31 12:33:48 +02:00
// Se alla non è stato associato un pagamento predefinito al cliente, leggo il pagamento dalle impostazioni
if ( empty ( $idpagamento )) {
$idpagamento = get_var ( 'Tipo di pagamento predefinito' );
2018-03-22 15:40:20 +01:00
}
2018-08-31 12:33:48 +02:00
// Creazione nuova fattura
$dbo -> insert ( 'co_documenti' , [
'numero' => $numero ,
'numero_esterno' => $numero_esterno ,
'idanagrafica' => $id_anagrafica ,
'idconto' => $id_conto ,
'idtipodocumento' => $tipo_documento ,
'idpagamento' => $idpagamento ,
'data' => $data ,
'id_segment' => $id_segment ,
'#idstatodocumento' => " (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza') " ,
'#idsede' => 'IFNULL((SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica=' . prepare ( $id_anagrafica ) . '), 0)' ,
]);
$id_documento = $dbo -> lastInsertedID ();
$id_documento_cliente [ $id_anagrafica ] = $id_documento ;
++ $totale_n_ddt ;
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 );
$n_interventi ++ ;
2018-03-22 15:40:20 +01:00
}
if ( $n_interventi > 0 ) {
2018-07-23 12:57:46 +02:00
$_SESSION [ 'infos' ][] = tr ( '_NUM_ interventi fatturati.' , [
2018-03-22 15:40:20 +01:00
'_NUM_' => $n_interventi ,
]);
} else {
2018-07-23 12:57:46 +02:00
$_SESSION [ 'warnings' ][] = tr ( 'Nessuna attività fatturata.' );
2018-03-08 17:29:32 +01:00
}
2018-07-23 13:47:09 +02: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?' ),
'msg' => '<br>{[ "type": "checkbox", "placeholder": "' . tr ( 'Aggiungere alle fatture esistenti non ancora emesse?' ) . '", "name": "accodare" ]}' ,
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
];