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
2018-06-25 20:50:40 +02:00
include_once __DIR__ . '/../../core.php' ;
2019-01-11 08:32:08 +01:00
use Modules\Anagrafiche\Anagrafica ;
2018-09-25 16:47:44 +02:00
use Modules\Articoli\Articolo as ArticoloOriginale ;
2019-08-29 10:25:14 +02:00
use Modules\Emails\Mail ;
use Modules\Emails\Template ;
2021-08-05 18:17:26 +02:00
use Modules\Impianti\Impianto ;
2018-12-25 11:32:19 +01:00
use Modules\Interventi\Components\Articolo ;
2019-03-29 12:46:17 +01:00
use Modules\Interventi\Components\Riga ;
2019-05-16 04:52:16 +02:00
use Modules\Interventi\Components\Sconto ;
2019-07-15 12:27:12 +02:00
use Modules\Interventi\Components\Sessione ;
2018-12-29 12:03:22 +01:00
use Modules\Interventi\Intervento ;
2019-01-11 08:32:08 +01:00
use Modules\Interventi\Stato ;
2019-07-08 12:24:59 +02:00
use Modules\TipiIntervento\Tipo as TipoSessione ;
2021-08-05 18:17:26 +02:00
use Plugins\ComponentiImpianti\Componente ;
2020-02-17 15:09:07 +01:00
use Plugins\PianificazioneInterventi\Promemoria ;
2018-08-29 18:06:51 +02:00
2017-08-04 16:28:16 +02:00
switch ( post ( 'op' )) {
case 'update' :
$idcontratto = post ( 'idcontratto' );
2020-02-17 15:09:07 +01:00
$id_promemoria = post ( 'idcontratto_riga' );
2017-08-04 16:28:16 +02:00
2019-02-14 09:52:42 +01:00
// Rimozione del collegamento al promemoria
2020-02-17 15:09:07 +01:00
if ( ! empty ( $id_promemoria ) && $intervento -> id_contratto != $idcontratto ) {
2018-08-31 11:39:38 +02:00
$dbo -> update ( 'co_promemoria' , [ 'idintervento' => null ], [ 'idintervento' => $id_record ]);
2017-08-04 16:28:16 +02:00
}
// Salvataggio modifiche intervento
2021-02-25 15:16:05 +01:00
$intervento -> codice = post ( 'codice' );
2019-02-14 09:52:42 +01:00
$intervento -> data_richiesta = post ( 'data_richiesta' );
2019-12-09 16:44:07 +01:00
$intervento -> data_scadenza = post ( 'data_scadenza' ) ? : null ;
2019-02-14 09:52:42 +01:00
$intervento -> richiesta = post ( 'richiesta' );
$intervento -> descrizione = post ( 'descrizione' );
$intervento -> informazioniaggiuntive = post ( 'informazioniaggiuntive' );
$intervento -> idanagrafica = post ( 'idanagrafica' );
$intervento -> idclientefinale = post ( 'idclientefinale' );
$intervento -> idreferente = post ( 'idreferente' );
$intervento -> idtipointervento = post ( 'idtipointervento' );
$intervento -> idstatointervento = post ( 'idstatointervento' );
2019-05-29 19:17:57 +02:00
$intervento -> idsede_partenza = post ( 'idsede_partenza' );
$intervento -> idsede_destinazione = post ( 'idsede_destinazione' );
2019-02-14 09:52:42 +01:00
$intervento -> id_preventivo = post ( 'idpreventivo' );
$intervento -> id_contratto = $idcontratto ;
2021-03-01 15:01:02 +01:00
$intervento -> id_ordine = post ( 'idordine' );
2019-02-14 09:52:42 +01:00
$intervento -> id_documento_fe = post ( 'id_documento_fe' );
2019-02-26 21:38:26 +01:00
$intervento -> num_item = post ( 'num_item' );
2019-02-14 09:52:42 +01:00
$intervento -> codice_cup = post ( 'codice_cup' );
$intervento -> codice_cig = post ( 'codice_cig' );
$intervento -> save ();
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
$tecnici_assegnati = ( array ) post ( 'tecnici_assegnati' );
2021-11-23 12:04:44 +01:00
$tecnici_presenti_array = $dbo -> select ( 'in_interventi_tecnici_assegnati' , 'id_tecnico' , [ 'id_intervento' => $intervento -> id ]);
foreach ( $tecnici_presenti_array as $tecnico_presente ) {
$tecnici_presenti [] = $tecnico_presente [ 'id_tecnico' ];
// Notifica rimozione tecnico assegnato
if ( setting ( 'Notifica al tecnico la rimozione dell\'assegnazione dall\'attività' )) {
if ( ! in_array ( $tecnico_presente [ 'id_tecnico' ], $tecnici_assegnati )){
$tecnico = Anagrafica :: find ( $tecnico_presente [ 'id_tecnico' ]);
if ( ! empty ( $tecnico [ 'email' ])) {
$template = Template :: pool ( 'Notifica rimozione intervento' );
if ( ! empty ( $template )) {
$mail = Mail :: build ( auth () -> getUser (), $template , $intervento -> id );
$mail -> addReceiver ( $tecnico [ 'email' ]);
$mail -> save ();
}
}
}
}
}
foreach ( $tecnici_assegnati as $tecnico_assegnato ){
// Notifica aggiunta tecnico assegnato
if ( setting ( 'Notifica al tecnico l\'assegnazione all\'attività' )) {
if ( ! in_array ( $tecnico_assegnato , $tecnici_presenti )){
$tecnico = Anagrafica :: find ( $tecnico_assegnato );
if ( ! empty ( $tecnico [ 'email' ])) {
$template = Template :: pool ( 'Notifica intervento' );
if ( ! empty ( $template )) {
$mail = Mail :: build ( auth () -> getUser (), $template , $intervento -> id );
$mail -> addReceiver ( $tecnico [ 'email' ]);
$mail -> save ();
}
}
}
}
}
// Assegnazione dei tecnici all'intervento
2020-08-04 18:33:28 +02:00
$dbo -> sync ( 'in_interventi_tecnici_assegnati' , [
'id_intervento' => $id_record ,
], [
'id_tecnico' => $tecnici_assegnati ,
]);
2021-11-23 12:04:44 +01:00
// Notifica cambio stato intervento
2019-02-14 09:52:42 +01:00
$stato = $dbo -> selectOne ( 'in_statiintervento' , '*' , [ 'idstatointervento' => post ( 'idstatointervento' )]);
2021-02-02 13:01:27 +01:00
if ( ! empty ( $stato [ 'notifica' ]) && $stato [ 'idstatointervento' ] != $record [ 'idstatointervento' ]) {
2019-08-29 10:25:14 +02:00
$template = Template :: find ( $stato [ 'id_email' ]);
2018-09-20 11:39:03 +02:00
2021-02-18 18:48:44 +01:00
if ( ! empty ( $stato [ 'destinatari' ])) {
2021-02-02 13:01:27 +01:00
$mail = Mail :: build ( auth () -> getUser (), $template , $id_record );
$mail -> addReceiver ( $stato [ 'destinatari' ]);
$mail -> save ();
}
2021-02-18 18:48:44 +01:00
if ( ! empty ( $stato [ 'notifica_cliente' ])) {
2021-02-02 13:01:27 +01:00
$mail_cliente = $dbo -> selectOne ( 'an_anagrafiche' , '*' , [ 'idanagrafica' => post ( 'idanagrafica' )]);
2021-02-18 18:48:44 +01:00
if ( ! empty ( $mail_cliente [ 'email' ])) {
2021-02-02 13:01:27 +01:00
$mail = Mail :: build ( auth () -> getUser (), $template , $id_record );
$mail -> addReceiver ( $mail_cliente [ 'email' ]);
$mail -> save ();
}
}
2021-11-23 12:04:44 +01:00
if ( ! empty ( $stato [ 'notifica_tecnico_sessione' ])) {
2021-02-02 13:01:27 +01:00
$tecnici_intervento = $dbo -> select ( 'in_interventi_tecnici' , 'idtecnico' , [ 'idintervento' => $id_record ]);
2021-11-23 12:04:44 +01:00
}
if ( ! empty ( $stato [ 'notifica_tecnico_assegnato' ])) {
2021-02-02 13:01:27 +01:00
$tecnici_assegnati = $dbo -> select ( 'in_interventi_tecnici_assegnati' , 'id_tecnico AS idtecnico' , [ 'id_intervento' => $id_record ]);
2021-11-23 12:04:44 +01:00
}
$tecnici = array_unique ( array_merge ( $tecnici_intervento , $tecnici_assegnati ), SORT_REGULAR );
2021-02-02 13:01:27 +01:00
2021-11-23 12:04:44 +01:00
foreach ( $tecnici as $tecnico ) {
$mail_tecnico = $dbo -> selectOne ( 'an_anagrafiche' , '*' , [ 'idanagrafica' => $tecnico ]);
if ( ! empty ( $mail_tecnico [ 'email' ])) {
$mail = Mail :: build ( auth () -> getUser (), $template , $id_record );
$mail -> addReceiver ( $mail_tecnico [ 'email' ]);
$mail -> save ();
2021-02-02 13:01:27 +01:00
}
}
2018-09-20 11:39:03 +02:00
}
2021-06-16 18:54:09 +02:00
2020-08-03 12:43:30 +02:00
flash () -> info ( tr ( 'Attività modificata correttamente!' ));
2017-08-04 16:28:16 +02:00
break ;
case 'add' :
2018-09-20 09:21:34 +02:00
if ( post ( 'id_intervento' ) == null ) {
2019-01-11 08:32:08 +01:00
$idanagrafica = post ( 'idanagrafica' );
$idtipointervento = post ( 'idtipointervento' );
$idstatointervento = post ( 'idstatointervento' );
$data_richiesta = post ( 'data_richiesta' );
2019-12-09 17:47:07 +01:00
$data_scadenza = post ( 'data_scadenza' ) ? : null ;
2017-08-04 16:28:16 +02:00
2019-01-11 08:32:08 +01:00
$anagrafica = Anagrafica :: find ( $idanagrafica );
$tipo = TipoSessione :: find ( $idtipointervento );
$stato = Stato :: find ( $idstatointervento );
2017-08-04 16:28:16 +02:00
2019-01-11 08:32:08 +01:00
$intervento = Intervento :: build ( $anagrafica , $tipo , $stato , $data_richiesta );
$id_record = $intervento -> id ;
flash () -> info ( tr ( 'Aggiunto nuovo intervento!' ));
2018-01-08 17:14:59 +01:00
2018-09-20 09:21:34 +02:00
// Informazioni di base
$idpreventivo = post ( 'idpreventivo' );
$idcontratto = post ( 'idcontratto' );
2020-02-17 15:09:07 +01:00
$id_promemoria = post ( 'idcontratto_riga' );
2018-09-20 09:21:34 +02:00
$idtipointervento = post ( 'idtipointervento' );
2019-05-29 19:17:57 +02:00
$idsede_partenza = post ( 'idsede_partenza' );
2022-01-28 12:33:29 +01:00
$idsede_destinazione = post ( 'idsede_destinazione' ) ? : 0 ;
2018-09-20 09:21:34 +02:00
2019-01-11 08:32:08 +01:00
if ( post ( 'idclientefinale' )) {
$intervento -> idclientefinale = post ( 'idclientefinale' );
}
2019-02-14 09:52:42 +01:00
$intervento -> id_preventivo = post ( 'idpreventivo' );
$intervento -> id_contratto = post ( 'idcontratto' );
2021-03-01 15:01:02 +01:00
$intervento -> id_ordine = post ( 'idordine' );
2022-02-16 17:47:19 +01:00
$intervento -> idreferente = post ( 'idreferente' );
2021-03-29 18:31:23 +02:00
$intervento -> richiesta = post ( 'richiesta' );
2019-10-29 17:23:52 +01:00
$intervento -> idsede_destinazione = $idsede_destinazione ;
2019-02-27 13:17:47 +01:00
$intervento -> data_scadenza = $data_scadenza ;
2019-01-16 16:26:19 +01:00
$intervento -> save ();
2019-01-11 08:32:08 +01:00
2020-02-17 15:09:07 +01:00
// Sincronizzazione con il promemoria indicato
if ( ! empty ( $id_promemoria )) {
$promemoria = Promemoria :: find ( $id_promemoria );
2020-09-25 11:40:52 +02:00
$promemoria -> pianifica ( $intervento , false );
2017-08-04 16:28:16 +02:00
}
2018-09-20 09:21:34 +02:00
// Collegamenti intervento/impianti
$impianti = ( array ) post ( 'idimpianti' );
if ( ! empty ( $impianti )) {
2020-09-25 11:40:52 +02:00
$impianti = array_unique ( $impianti );
2018-09-20 09:21:34 +02:00
foreach ( $impianti as $impianto ) {
$dbo -> insert ( 'my_impianti_interventi' , [
'idintervento' => $id_record ,
'idimpianto' => $impianto ,
]);
}
// Collegamenti intervento/componenti
$componenti = ( array ) post ( 'componenti' );
foreach ( $componenti as $componente ) {
$dbo -> insert ( 'my_componenti_interventi' , [
'id_intervento' => $id_record ,
'id_componente' => $componente ,
]);
}
}
} else {
$id_record = post ( 'id_intervento' );
2021-05-17 17:31:03 +02:00
$intervento = Intervento :: find ( $id_record );
$intervento -> richiesta = post ( 'richiesta' );
$intervento -> save ();
2018-09-20 09:21:34 +02:00
$idcontratto = $dbo -> fetchOne ( 'SELECT idcontratto FROM co_promemoria WHERE idintervento = :id' , [
2018-09-25 16:47:44 +02:00
':id' => $id_record ,
2018-09-20 09:21:34 +02:00
])[ 'idcontratto' ];
2017-08-04 16:28:16 +02:00
}
// Collegamenti tecnici/interventi
2020-02-14 12:23:50 +01:00
if ( ! empty ( post ( 'orario_inizio' )) && ! empty ( post ( 'orario_fine' ))) {
2020-09-25 11:14:50 +02:00
$idtecnici = post ( 'idtecnico' );
2020-02-12 10:35:07 +01:00
foreach ( $idtecnici as $idtecnico ) {
add_tecnico ( $id_record , $idtecnico , post ( 'orario_inizio' ), post ( 'orario_fine' ), $idcontratto );
}
2017-08-04 16:28:16 +02:00
}
2020-08-04 18:33:28 +02:00
// Assegnazione dei tecnici all'intervento
$tecnici_assegnati = ( array ) post ( 'tecnici_assegnati' );
$dbo -> sync ( 'in_interventi_tecnici_assegnati' , [
'id_intervento' => $id_record ,
], [
'id_tecnico' => $tecnici_assegnati ,
]);
2021-11-23 12:04:44 +01:00
foreach ( $tecnici_assegnati as $tecnico_assegnato ){
$tecnico = Anagrafica :: find ( $tecnico_assegnato );
// Notifica al tecnico
if ( setting ( 'Notifica al tecnico l\'assegnazione all\'attività' )) {
if ( ! empty ( $tecnico [ 'email' ])) {
$template = Template :: pool ( 'Notifica intervento' );
if ( ! empty ( $template )) {
$mail = Mail :: build ( auth () -> getUser (), $template , $intervento -> id );
$mail -> addReceiver ( $tecnico [ 'email' ]);
$mail -> save ();
}
}
}
}
2021-09-23 10:04:44 +02:00
if ( ! empty ( post ( 'ricorsiva' ))) {
2021-09-22 11:22:03 +02:00
$periodicita = post ( 'periodicita' );
$data = post ( 'data_inizio_ricorrenza' );
2021-09-23 10:04:44 +02:00
$interval = post ( 'tipo_periodicita' ) != 'manual' ? post ( 'tipo_periodicita' ) : 'days' ;
2021-09-22 11:22:03 +02:00
$stato = Stato :: find ( post ( 'idstatoricorrenze' ));
// Estraggo le date delle ricorrenze
2021-09-23 10:04:44 +02:00
if ( post ( 'metodo_ricorrenza' ) == 'data' ) {
2021-09-22 11:22:03 +02:00
$data_fine = post ( 'data_fine_ricorrenza' );
2021-09-23 10:04:44 +02:00
while ( strtotime ( $data ) <= strtotime ( $data_fine )) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+' . $periodicita . ' ' . $interval . '' , strtotime ( $data )));
$w = date ( 'w' , strtotime ( $data ));
//Escludo sabato e domenica
2021-09-23 10:04:44 +02:00
if ( $w == '6' ) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+2 day' , strtotime ( $data )));
2021-09-23 10:04:44 +02:00
} elseif ( $w == '0' ) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+1 day' , strtotime ( $data )));
}
2021-09-23 10:04:44 +02:00
if ( $data <= $data_fine ) {
2021-09-22 11:22:03 +02:00
$date_ricorrenze [] = $data ;
}
}
} else {
$ricorrenze = post ( 'numero_ricorrenze' );
2021-09-23 10:04:44 +02:00
for ( $i = 0 ; $i < $ricorrenze ; ++ $i ) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+' . $periodicita . ' ' . $interval . '' , strtotime ( $data )));
$w = date ( 'w' , strtotime ( $data ));
//Escludo sabato e domenica
2021-09-23 10:04:44 +02:00
if ( $w == '6' ) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+2 day' , strtotime ( $data )));
2021-09-23 10:04:44 +02:00
} elseif ( $w == '0' ) {
2021-09-22 11:22:03 +02:00
$data = date ( 'Y-m-d' , strtotime ( '+1 day' , strtotime ( $data )));
}
$date_ricorrenze [] = $data ;
}
}
2021-09-23 10:04:44 +02:00
foreach ( $date_ricorrenze as $data_ricorrenza ) {
2021-09-22 11:22:03 +02:00
$intervento = Intervento :: find ( $id_record );
$new = $intervento -> replicate ();
// Calcolo il nuovo codice
$new -> codice = Intervento :: getNextCodice ( $data_ricorrenza );
$new -> data_richiesta = $data_ricorrenza ;
$new -> idstatointervento = $stato -> idstatointervento ;
$new -> save ();
$idintervento = $new -> id ;
// Inserimento sessioni
if ( ! empty ( post ( 'riporta_sessioni' ))) {
$numero_sessione = 0 ;
$sessioni = $intervento -> sessioni ;
foreach ( $sessioni as $sessione ) {
// Se è la prima sessione che copio importo la data con quella della richiesta
if ( $numero_sessione == 0 ) {
$orario_inizio = date ( 'Y-m-d' , strtotime ( $data_ricorrenza )) . ' ' . date ( 'H:i:s' , strtotime ( $sessione -> orario_inizio ));
} else {
$diff = strtotime ( $sessione -> orario_inizio ) - strtotime ( $inizio_old );
2021-11-09 11:40:07 +01:00
$orario_inizio = date ( 'Y-m-d H:i:s' , ( strtotime ( $new_sessione -> orario_inizio ) + $diff ));
2021-09-22 11:22:03 +02:00
}
2021-09-23 10:04:44 +02:00
2021-09-22 11:22:03 +02:00
$diff_fine = strtotime ( $sessione -> orario_fine ) - strtotime ( $sessione -> orario_inizio );
$orario_fine = date ( 'Y-m-d H:i:s' , ( strtotime ( $orario_inizio ) + $diff_fine ));
2021-09-23 10:04:44 +02:00
2021-09-22 11:22:03 +02:00
$new_sessione = $sessione -> replicate ();
$new_sessione -> idintervento = $new -> id ;
$new_sessione -> orario_inizio = $orario_inizio ;
$new_sessione -> orario_fine = $orario_fine ;
$new_sessione -> save ();
2021-09-23 10:04:44 +02:00
2021-09-22 11:22:03 +02:00
++ $numero_sessione ;
$inizio_old = $sessione -> orario_inizio ;
}
}
// Assegnazione dei tecnici all'intervento
$tecnici_assegnati = ( array ) post ( 'tecnici_assegnati' );
$dbo -> sync ( 'in_interventi_tecnici_assegnati' , [
'id_intervento' => $new -> id ,
], [
'id_tecnico' => $tecnici_assegnati ,
]);
2021-09-23 10:04:44 +02:00
++ $n_ricorrenze ;
2021-09-22 11:22:03 +02:00
}
flash () -> info ( tr ( 'Aggiunte _NUM_ nuove ricorrenze!' , [
2021-09-23 10:04:44 +02:00
'_NUM_' => $n_ricorrenze ,
2021-09-22 11:22:03 +02:00
]));
}
2017-08-04 16:28:16 +02:00
if ( post ( 'ref' ) == 'dashboard' ) {
2018-07-19 17:29:21 +02:00
flash () -> clearMessage ( 'info' );
flash () -> clearMessage ( 'warning' );
2017-08-04 16:28:16 +02:00
}
2019-10-01 18:01:00 +02:00
2017-08-04 16:28:16 +02:00
break ;
// Eliminazione intervento
case 'delete' :
2019-10-01 18:32:06 +02:00
try {
// Eliminazione associazioni tra interventi e contratti
$dbo -> query ( 'UPDATE co_promemoria SET idintervento = NULL WHERE idintervento=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
2020-09-25 11:40:52 +02:00
$intervento -> delete ();
2019-10-01 18:32:06 +02:00
// Elimino il collegamento al componente
2021-08-06 14:48:51 +02:00
$dbo -> query ( 'DELETE FROM my_componenti WHERE id_intervento=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
2019-10-01 18:32:06 +02:00
// Eliminazione associazione tecnici collegati all'intervento
$dbo -> query ( 'DELETE FROM in_interventi_tecnici WHERE idintervento=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
2019-10-01 18:32:06 +02:00
// Eliminazione associazione interventi e my_impianti
$dbo -> query ( 'DELETE FROM my_impianti_interventi WHERE idintervento=' . prepare ( $id_record ));
2017-08-04 16:28:16 +02:00
2019-10-01 18:32:06 +02:00
// Elimino anche eventuali file caricati
Uploads :: deleteLinked ([
'id_module' => $id_module ,
'id_record' => $id_record ,
]);
2017-08-04 16:28:16 +02:00
2019-10-01 18:32:06 +02:00
flash () -> info ( tr ( 'Intervento eliminato!' ));
} catch ( InvalidArgumentException $e ) {
flash () -> error ( tr ( 'Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!' ));
}
2017-08-04 16:28:16 +02:00
break ;
2019-10-01 18:32:06 +02:00
case 'delete_riga' :
2020-08-03 12:43:30 +02:00
$id_riga = post ( 'riga_id' );
$type = post ( 'riga_type' );
$riga = $intervento -> getRiga ( $type , $id_riga );
2019-10-01 18:01:00 +02:00
2020-01-17 17:31:07 +01:00
if ( ! empty ( $riga )) {
2019-10-01 18:01:00 +02:00
try {
$riga -> delete ();
flash () -> info ( tr ( 'Riga rimossa!' ));
} catch ( InvalidArgumentException $e ) {
flash () -> error ( tr ( 'Alcuni serial number sono già stati utilizzati!' ));
}
}
2017-08-04 16:28:16 +02:00
break ;
2020-07-20 14:40:11 +02:00
case 'manage_barcode' :
foreach ( post ( 'qta' ) as $id_articolo => $qta ) {
if ( $id_articolo == '-id-' ) {
continue ;
}
// Dati di input
$sconto = post ( 'sconto' )[ $id_articolo ];
$tipo_sconto = post ( 'tipo_sconto' )[ $id_articolo ];
$prezzo_unitario = post ( 'prezzo_unitario' )[ $id_articolo ];
$id_dettaglio_fornitore = post ( 'id_dettaglio_fornitore' )[ $id_articolo ];
$id_iva = $originale -> idiva_vendita ? $originale -> idiva_vendita : setting ( 'Iva predefinita' );
// Creazione articolo
$originale = ArticoloOriginale :: find ( $id_articolo );
$articolo = Articolo :: build ( $intervento , $originale );
$articolo -> id_dettaglio_fornitore = $id_dettaglio_fornitore ? : null ;
$articolo -> setPrezzoUnitario ( $prezzo_unitario , $id_iva );
if ( $dir == 'entrata' ) {
$articolo -> costo_unitario = $originale -> prezzo_acquisto ;
}
$articolo -> setSconto ( $sconto , $tipo_sconto );
$articolo -> qta = $qta ;
$articolo -> save ();
}
flash () -> info ( tr ( 'Articoli aggiunti!' ));
break ;
2020-02-14 17:02:16 +01:00
case 'manage_articolo' :
if ( post ( 'idriga' ) != null ) {
$articolo = Articolo :: find ( post ( 'idriga' ));
} else {
$originale = ArticoloOriginale :: find ( post ( 'idarticolo' ));
$articolo = Articolo :: build ( $intervento , $originale );
2020-07-06 13:32:43 +02:00
$articolo -> id_dettaglio_fornitore = post ( 'id_dettaglio_fornitore' ) ? : null ;
2020-02-14 17:02:16 +01:00
}
$qta = post ( 'qta' );
2021-07-07 07:57:10 +02:00
2021-06-16 18:54:09 +02:00
$articolo -> idsede_partenza = post ( 'idsede_partenza' );
2020-02-14 17:02:16 +01:00
$articolo -> descrizione = post ( 'descrizione' );
$articolo -> um = post ( 'um' ) ? : null ;
2022-01-21 13:30:24 +01:00
$articolo -> idimpianto = post ( 'id_impianto' ) ? : null ;
2020-02-14 17:02:16 +01:00
2020-02-14 18:31:07 +01:00
$articolo -> costo_unitario = post ( 'costo_unitario' ) ? : 0 ;
2020-02-17 19:11:40 +01:00
$articolo -> setPrezzoUnitario ( post ( 'prezzo_unitario' ), post ( 'idiva' ));
2020-02-14 18:31:07 +01:00
$articolo -> setSconto ( post ( 'sconto' ), post ( 'tipo_sconto' ));
2020-02-14 17:02:16 +01:00
try {
$articolo -> qta = $qta ;
} catch ( UnexpectedValueException $e ) {
flash () -> error ( tr ( 'Alcuni serial number sono già stati utilizzati!' ));
}
$articolo -> save ();
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Articolo modificato!' ));
} else {
flash () -> info ( tr ( 'Articolo aggiunto!' ));
}
2021-08-05 18:17:26 +02:00
// Collegamento all'Impianto tramite generazione Componente
$id_impianto = post ( 'id_impianto' );
$impianto = Impianto :: find ( $id_impianto );
2021-08-06 11:06:47 +02:00
if ( ! empty ( $impianto )) {
2021-08-05 18:17:26 +02:00
// Data di inizio dell'intervento (data_richiesta in caso di assenza di sessioni)
$data_registrazione = $intervento -> inizio ? : $intervento -> data_richiesta ;
// Creazione in base alla quantità
for ( $q = 0 ; $q < $articolo -> qta ; ++ $q ) {
$componente = Componente :: build ( $impianto , $articolo -> articolo , $data_registrazione );
}
}
2020-02-14 17:02:16 +01:00
break ;
2019-03-29 12:46:17 +01:00
case 'manage_sconto' :
if ( post ( 'idriga' ) != null ) {
2019-05-12 04:37:14 +02:00
$sconto = Sconto :: find ( post ( 'idriga' ));
2019-03-29 12:46:17 +01:00
} else {
2019-05-12 04:37:14 +02:00
$sconto = Sconto :: build ( $intervento );
2019-03-29 12:46:17 +01:00
}
$sconto -> descrizione = post ( 'descrizione' );
2020-09-29 15:27:00 +02:00
$sconto -> setScontoUnitario ( post ( 'sconto_unitario' ), post ( 'idiva' ));
2019-03-29 12:46:17 +01:00
$sconto -> save ();
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Sconto/maggiorazione modificato!' ));
} else {
2019-07-11 17:20:58 +02:00
flash () -> info ( tr ( 'Sconto/maggiorazione aggiunto!' ));
2019-03-29 12:46:17 +01:00
}
break ;
2020-02-14 17:02:16 +01:00
case 'manage_riga' :
if ( post ( 'idriga' ) != null ) {
$riga = Riga :: find ( post ( 'idriga' ));
} else {
$riga = Riga :: build ( $intervento );
}
2019-06-04 20:45:40 +02:00
2020-02-14 17:02:16 +01:00
$qta = post ( 'qta' );
2018-09-25 16:47:44 +02:00
2020-02-14 17:02:16 +01:00
$riga -> descrizione = post ( 'descrizione' );
$riga -> um = post ( 'um' ) ? : null ;
2018-09-25 16:47:44 +02:00
2020-02-14 18:31:07 +01:00
$riga -> costo_unitario = post ( 'costo_unitario' ) ? : 0 ;
2020-02-17 19:11:40 +01:00
$riga -> setPrezzoUnitario ( post ( 'prezzo_unitario' ), post ( 'idiva' ));
2020-02-14 18:31:07 +01:00
$riga -> setSconto ( post ( 'sconto' ), post ( 'tipo_sconto' ));
2018-09-25 11:55:52 +02:00
2020-02-14 17:02:16 +01:00
$riga -> qta = $qta ;
2019-06-04 20:45:40 +02:00
2020-02-14 17:02:16 +01:00
$riga -> save ();
2017-09-05 18:20:02 +02:00
2020-02-14 17:02:16 +01:00
if ( post ( 'idriga' ) != null ) {
flash () -> info ( tr ( 'Riga modificata!' ));
} else {
flash () -> info ( tr ( 'Riga aggiunta!' ));
2017-08-04 16:28:16 +02:00
}
break ;
case 'add_serial' :
2020-07-06 17:01:43 +02:00
$articolo = Articolo :: find ( post ( 'idriga' ));
2017-08-04 16:28:16 +02:00
2020-08-10 09:54:01 +02:00
$serials = ( array ) post ( 'serial' );
$articolo -> serials = $serials ;
2017-08-04 16:28:16 +02:00
break ;
2020-07-31 10:30:38 +02:00
// Aggiunta di un documento in ordine
2021-05-11 11:50:44 +02:00
case 'add_intervento' :
2020-07-31 10:30:38 +02:00
case 'add_documento' :
$class = post ( 'class' );
$id_documento = post ( 'id_documento' );
// Individuazione del documento originale
if ( ! is_subclass_of ( $class , \Common\Document :: class )) {
return ;
}
$documento = $class :: find ( $id_documento );
// Individuazione sede
$id_sede = ( $documento -> direzione == 'entrata' ) ? $documento -> idsede_destinazione : $documento -> idsede_partenza ;
$id_sede = $id_sede ? : $documento -> idsede ;
$id_sede = $id_sede ? : 0 ;
// Creazione dell' ordine al volo
if ( post ( 'create_document' ) == 'on' ) {
$stato = Stato :: find ( post ( 'id_stato_intervento' ));
$tipo = TipoSessione :: find ( post ( 'id_tipo_intervento' ));
2021-07-07 07:57:10 +02:00
2021-05-11 11:50:44 +02:00
$anagrafica = post ( 'idanagrafica' ) ? Anagrafica :: find ( post ( 'idanagrafica' )) : $documento -> anagrafica ;
2020-07-31 10:30:38 +02:00
2021-05-11 11:50:44 +02:00
$intervento = Intervento :: build ( $anagrafica , $tipo , $stato , post ( 'data' ));
2020-07-31 10:30:38 +02:00
$intervento -> idsede_destinazione = $id_sede ;
$intervento -> id_documento_fe = $documento -> id_documento_fe ;
$intervento -> codice_cup = $documento -> codice_cup ;
$intervento -> codice_cig = $documento -> codice_cig ;
$intervento -> num_item = $documento -> num_item ;
2021-04-20 17:12:04 +02:00
$intervento -> idreferente = $documento -> idreferente ;
2020-07-31 10:30:38 +02:00
$intervento -> save ();
$id_record = $intervento -> id ;
}
$righe = $documento -> getRighe ();
foreach ( $righe as $riga ) {
if ( post ( 'evadere' )[ $riga -> id ] == 'on' and ! empty ( post ( 'qta_da_evadere' )[ $riga -> id ])) {
$qta = post ( 'qta_da_evadere' )[ $riga -> id ];
$copia = $riga -> copiaIn ( $intervento , $qta );
2021-06-10 15:21:49 +02:00
2021-07-07 07:57:10 +02:00
// Aggiornamento seriali
if ( $copia -> isArticolo ()) {
$serials = is_array ( post ( 'serial' )[ $riga -> id ]) ? post ( 'serial' )[ $riga -> id ] : [];
2021-06-10 15:21:49 +02:00
2021-07-07 07:57:10 +02:00
$copia -> serials = $serials ;
}
2021-06-10 15:21:49 +02:00
2020-07-31 10:30:38 +02:00
$copia -> save ();
}
}
2020-09-25 11:14:50 +02:00
// Modifica finale dello stato
/*
if ( post ( 'create_document' ) == 'on' ) {
$intervento -> idstatointervento = post ( 'id_stato_intervento' );
$intervento -> save ();
} */
2020-07-31 10:30:38 +02:00
// Messaggio informativo
$message = tr ( '_DOC_ aggiunto!' , [
'_DOC_' => $documento -> getReference (),
]);
flash () -> info ( $message );
break ;
2017-08-04 16:28:16 +02:00
case 'firma' :
2020-09-23 13:36:37 +02:00
if ( directory ( base_dir () . '/files/interventi' )) {
2017-08-04 16:28:16 +02:00
if ( post ( 'firma_base64' ) != '' ) {
// Salvataggio firma
2018-02-10 11:16:35 +01:00
$firma_file = 'firma_' . time () . '.jpg' ;
2017-08-04 16:28:16 +02:00
$firma_nome = post ( 'firma_nome' );
$data = explode ( ',' , post ( 'firma_base64' ));
2019-01-12 13:09:10 +01:00
$img = Intervention\Image\ImageManagerStatic :: make ( base64_decode ( $data [ 1 ]));
2017-08-04 16:28:16 +02:00
$img -> resize ( 680 , 202 , function ( $constraint ) {
$constraint -> aspectRatio ();
});
2020-09-23 13:36:37 +02:00
if ( ! $img -> save ( base_dir () . '/files/interventi/' . $firma_file )) {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( 'Impossibile creare il file!' ));
2021-01-21 13:08:31 +01:00
} elseif ( $dbo -> query ( 'UPDATE in_interventi SET firma_file=' . prepare ( $firma_file ) . ', firma_data=NOW(), firma_nome = ' . prepare ( $firma_nome ) . ' WHERE id=' . prepare ( $id_record ))) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Firma salvata correttamente!' ));
flash () -> info ( tr ( 'Attività completata!' ));
2018-09-20 11:39:03 +02:00
2020-08-04 09:44:37 +02:00
$id_stato = setting ( " Stato dell'attività dopo la firma " );
$stato = $dbo -> selectOne ( 'in_statiintervento' , '*' , [ 'idstatointervento' => $id_stato ]);
2021-01-20 10:58:00 +01:00
$intervento = Intervento :: find ( $id_record );
$intervento -> idstatointervento = $stato [ 'idstatointervento' ];
$intervento -> save ();
2018-09-20 11:39:03 +02:00
// Notifica chiusura intervento
if ( ! empty ( $stato [ 'notifica' ]) && ! empty ( $stato [ 'destinatari' ])) {
2019-08-29 10:25:14 +02:00
$template = Template :: find ( $stato [ 'id_email' ]);
2018-09-20 11:39:03 +02:00
2019-08-27 15:42:13 +02:00
$mail = Mail :: build ( auth () -> getUser (), $template , $id_record );
$mail -> addReceiver ( $stato [ 'destinatari' ]);
$mail -> save ();
2018-09-20 11:39:03 +02:00
}
2017-08-04 16:28:16 +02:00
} else {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( 'Errore durante il salvataggio della firma nel database!' ));
2017-08-04 16:28:16 +02:00
}
} else {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( 'Errore durante il salvataggio della firma!' ) . tr ( 'La firma risulta vuota' ) . '...' );
2017-08-04 16:28:16 +02:00
}
} else {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( " Non è stato possibile creare la cartella _DIRECTORY_ per salvare l'immagine della firma! " , [
2017-09-10 14:35:41 +02:00
'_DIRECTORY_' => '<b>/files/interventi</b>' ,
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
}
2018-10-30 11:39:45 +01:00
break ;
2018-11-01 12:39:54 +01:00
// OPERAZIONI PER AGGIUNTA NUOVA SESSIONE DI LAVORO
case 'add_sessione' :
$id_tecnico = post ( 'id_tecnico' );
2019-05-17 19:24:04 +02:00
$idcontratto = $intervento [ 'id_contratto' ];
2018-11-01 12:39:54 +01:00
$ore = 1 ;
2021-04-07 17:47:48 +02:00
$inizio = post ( 'orario_inizio' ) ? : date ( 'Y-m-d H:\0\0' );
2022-02-15 16:56:20 +01:00
$fine = null ;
2018-11-01 12:39:54 +01:00
add_tecnico ( $id_record , $id_tecnico , $inizio , $fine , $idcontratto );
break ;
// RIMOZIONE SESSIONE DI LAVORO
case 'delete_sessione' :
$id_sessione = post ( 'id_sessione' );
$tecnico = $dbo -> fetchOne ( 'SELECT an_anagrafiche.email FROM an_anagrafiche INNER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica WHERE in_interventi_tecnici.id = ' . prepare ( $id_sessione ));
$dbo -> query ( 'DELETE FROM in_interventi_tecnici WHERE id=' . prepare ( $id_sessione ));
2019-02-07 18:27:15 +01:00
// Notifica rimozione dell' intervento al tecnico
2021-11-23 12:04:44 +01:00
if ( setting ( 'Notifica al tecnico la rimozione della sessione dall\'attività' )) {
2020-06-22 17:45:10 +02:00
if ( ! empty ( $tecnico [ 'email' ])) {
2020-09-23 13:36:37 +02:00
$template = Template :: pool ( 'Notifica rimozione intervento' );
2020-06-22 17:45:10 +02:00
2020-06-30 13:26:15 +02:00
if ( ! empty ( $template )) {
2020-06-22 17:45:10 +02:00
$mail = Mail :: build ( auth () -> getUser (), $template , $id_record );
$mail -> addReceiver ( $tecnico [ 'email' ]);
$mail -> save ();
}
}
2018-11-01 12:39:54 +01:00
}
break ;
2018-10-30 11:39:45 +01:00
case 'edit_sessione' :
$id_sessione = post ( 'id_sessione' );
2019-07-15 12:27:12 +02:00
$sessione = Sessione :: find ( $id_sessione );
2018-11-01 12:39:54 +01:00
2019-07-15 12:27:12 +02:00
$sessione -> orario_inizio = post ( 'orario_inizio' );
$sessione -> orario_fine = post ( 'orario_fine' );
$sessione -> km = post ( 'km' );
2018-10-30 11:39:45 +01:00
2019-07-15 12:27:12 +02:00
$id_tipo = post ( 'idtipointerventot' );
$sessione -> setTipo ( $id_tipo );
2018-10-30 11:39:45 +01:00
2019-07-15 12:27:12 +02:00
// Prezzi
$sessione -> prezzo_ore_unitario = post ( 'prezzo_ore_unitario' );
$sessione -> prezzo_km_unitario = post ( 'prezzo_km_unitario' );
$sessione -> prezzo_dirittochiamata = post ( 'prezzo_dirittochiamata' );
2018-10-30 11:39:45 +01:00
2019-07-15 12:27:12 +02:00
// Sconto orario
$sessione -> sconto_unitario = post ( 'sconto' );
$sessione -> tipo_sconto = post ( 'tipo_sconto' );
2018-10-30 11:39:45 +01:00
2019-07-15 12:27:12 +02:00
// Sconto chilometrico
$sessione -> scontokm_unitario = post ( 'sconto_km' );
$sessione -> tipo_scontokm = post ( 'tipo_sconto_km' );
2018-10-30 11:39:45 +01:00
2019-07-15 12:27:12 +02:00
$sessione -> save ();
2018-11-01 12:39:54 +01:00
2017-08-04 16:28:16 +02:00
break ;
2020-06-08 11:59:40 +02:00
// Duplica intervento
case 'copy' :
2020-09-22 13:59:50 +02:00
$id_stato = post ( 'id_stato' );
2020-06-08 11:59:40 +02:00
$data_richiesta = post ( 'data_richiesta' );
2020-09-22 13:59:50 +02:00
$copia_sessioni = post ( 'copia_sessioni' );
$copia_righe = post ( 'copia_righe' );
2020-06-08 11:59:40 +02:00
$new = $intervento -> replicate ();
2020-09-22 13:59:50 +02:00
$new -> idstatointervento = $id_stato ;
2020-06-09 16:59:26 +02:00
2020-09-22 13:59:50 +02:00
// Calcolo del nuovo codice sulla base della data di richiesta
2020-06-09 12:36:35 +02:00
$new -> codice = Intervento :: getNextCodice ( $data_richiesta );
2020-09-22 13:59:50 +02:00
$new -> data_richiesta = $data_richiesta ;
$new -> data_scadenza = post ( 'data_scadenza' );
2022-02-06 00:15:35 +01:00
$new -> firma_file = '' ;
$new -> firma_data = null ;
$new -> firma_nome = '' ;
2020-06-09 16:59:26 +02:00
2020-06-08 11:59:40 +02:00
$new -> save ();
$id_record = $new -> id ;
2020-09-22 13:59:50 +02:00
// Copio le righe
if ( ! empty ( $copia_righe )) {
$righe = $intervento -> getRighe ();
foreach ( $righe as $riga ) {
$new_riga = $riga -> replicate ();
2020-09-22 20:28:37 +02:00
$new_riga -> setDocument ( $new );
2020-09-22 13:59:50 +02:00
$new_riga -> qta_evasa = 0 ;
$new_riga -> save ();
2020-06-08 11:59:40 +02:00
}
}
2020-09-22 13:59:50 +02:00
// Copia delle sessioni
$numero_sessione = 0 ;
if ( ! empty ( $copia_sessioni )) {
2020-06-08 11:59:40 +02:00
$sessioni = $intervento -> sessioni ;
foreach ( $sessioni as $sessione ) {
2020-09-22 13:59:50 +02:00
// Se è la prima sessione che copio importo la data con quella della richiesta
if ( $numero_sessione == 0 ) {
2020-06-09 16:59:26 +02:00
$orario_inizio = date ( 'Y-m-d' , strtotime ( $data_richiesta )) . ' ' . date ( 'H:i:s' , strtotime ( $sessione -> orario_inizio ));
} else {
2020-06-08 11:59:40 +02:00
$diff = strtotime ( $sessione -> orario_inizio ) - strtotime ( $inizio_old );
2021-11-09 11:40:07 +01:00
$orario_inizio = date ( 'Y-m-d H:i:s' , ( strtotime ( $new_sessione -> orario_inizio ) + $diff ));
2020-06-08 11:59:40 +02:00
}
$diff_fine = strtotime ( $sessione -> orario_fine ) - strtotime ( $sessione -> orario_inizio );
2020-06-09 16:59:26 +02:00
$orario_fine = date ( 'Y-m-d H:i:s' , ( strtotime ( $orario_inizio ) + $diff_fine ));
2020-06-08 11:59:40 +02:00
$new_sessione = $sessione -> replicate ();
$new_sessione -> idintervento = $new -> id ;
2020-06-09 16:59:26 +02:00
2020-06-08 11:59:40 +02:00
$new_sessione -> orario_inizio = $orario_inizio ;
$new_sessione -> orario_fine = $orario_fine ;
$new_sessione -> save ();
2020-09-22 13:59:50 +02:00
++ $numero_sessione ;
2020-06-08 11:59:40 +02:00
$inizio_old = $sessione -> orario_inizio ;
}
}
flash () -> info ( tr ( 'Attività duplicata correttamente!' ));
2021-10-04 11:27:05 +02:00
break ;
case 'update_position' :
$order = explode ( ',' , post ( 'order' , true ));
foreach ( $order as $i => $id_riga ) {
$dbo -> query ( 'UPDATE `in_righe_interventi` SET `order` = ' . prepare ( $i + 1 ) . ' WHERE id=' . prepare ( $id_riga ));
}
2020-06-08 11:59:40 +02:00
break ;
2017-08-04 16:28:16 +02:00
}