2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2020-08-04 18:33:28 +02:00
$modulo_interventi = Modules :: get ( 'Interventi' );
2017-08-07 13:07:18 +02:00
if ( ! isset ( $user [ 'idanagrafica' ])) {
$user [ 'idanagrafica' ] = '' ;
2017-08-04 16:28:16 +02:00
}
2020-08-04 18:33:28 +02:00
switch ( filter ( 'op' )) {
2017-08-04 16:28:16 +02:00
// Lettura calendario tecnici
2020-08-04 18:33:28 +02:00
case 'interventi_periodo' :
$start = filter ( 'start' );
$end = filter ( 'end' );
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
$stati = ( array ) $_SESSION [ 'dashboard' ][ 'idstatiintervento' ];
$stati [] = prepare ( '' );
$tipi = ( array ) $_SESSION [ 'dashboard' ][ 'idtipiintervento' ];
2020-08-04 18:33:28 +02:00
$zone = ( array ) $_SESSION [ 'dashboard' ][ 'idzone' ];
$tecnici = ( array ) $_SESSION [ 'dashboard' ][ 'idtecnici' ];
$query = ' SELECT
in_interventi_tecnici . id ,
in_interventi_tecnici . idintervento ,
in_interventi . codice ,
colore ,
in_interventi_tecnici . idtecnico ,
in_interventi_tecnici . orario_inizio ,
in_interventi_tecnici . orario_fine ,
( SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = idtecnico ) AS nome_tecnico ,
( SELECT id FROM zz_files WHERE id_record = in_interventi . id AND id_module = '.prepare($modulo_interventi->id).' LIMIT 1 ) AS have_attachments ,
( SELECT colore FROM an_anagrafiche WHERE idanagrafica = idtecnico ) AS colore_tecnico , ( SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = in_interventi . idanagrafica ) AS cliente ,
( SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi . idanagrafica ) AS idzona
FROM in_interventi_tecnici
INNER JOIN in_interventi ON in_interventi_tecnici . idintervento = in_interventi . id
LEFT OUTER JOIN in_statiintervento ON in_interventi . idstatointervento = in_statiintervento . idstatointervento
WHERE
(
( in_interventi_tecnici . orario_inizio >= '.prepare($start).' AND in_interventi_tecnici . orario_fine <= '.prepare($end).' )
OR ( in_interventi_tecnici . orario_inizio >= '.prepare($start).' AND in_interventi_tecnici . orario_inizio <= '.prepare($end).' )
OR ( in_interventi_tecnici . orario_fine >= '.prepare($start).' AND in_interventi_tecnici . orario_fine <= '.prepare($end).' )
) AND idtecnico IN ( '.implode(' , ', $tecnici).' )
AND in_interventi . idstatointervento IN ( '.implode(' , ', $stati).' )
AND in_interventi_tecnici . idtipointervento IN ( '.implode(' , ', $tipi).' )
'.Modules::getAdditionalsQuery(' Interventi ').'
HAVING idzona IN ( '.implode(' , ', $zone).' ) ' ;
$sessioni = $dbo -> fetchArray ( $query );
2017-08-04 16:28:16 +02:00
$results = [];
2020-08-04 18:33:28 +02:00
foreach ( $sessioni as $sessione ) {
2017-09-12 18:18:27 +02:00
$results [] = [
2020-08-04 18:33:28 +02:00
'id' => $sessione [ 'id' ],
'idintervento' => $sessione [ 'idintervento' ],
'idtecnico' => $sessione [ 'idtecnico' ],
'title' => '<b>Int. ' . $sessione [ 'codice' ] . '</b> ' . $sessione [ 'cliente' ] . '<br><b>' . tr ( 'Tecnici' ) . ':</b> ' . $sessione [ 'nome_tecnico' ] . ' ' . (( $sessione [ 'have_attachments' ]) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : '' ),
'start' => $sessione [ 'orario_inizio' ],
'end' => $sessione [ 'orario_fine' ],
'url' => ROOTDIR . '/editor.php?id_module=' . $modulo_interventi -> id . '&id_record=' . $sessione [ 'idintervento' ],
'backgroundColor' => $sessione [ 'colore' ],
'textColor' => color_inverse ( $sessione [ 'colore' ]),
'borderColor' => ( $sessione [ 'colore_tecnico' ] == '#FFFFFF' ) ? color_darken ( $sessione [ 'colore_tecnico' ], 100 ) : $sessione [ 'colore_tecnico' ],
2017-09-12 18:18:27 +02:00
'allDay' => false ,
];
2017-08-04 16:28:16 +02:00
}
2017-09-12 18:18:27 +02:00
echo json_encode ( $results );
2017-08-04 16:28:16 +02:00
break ;
2020-08-04 18:33:28 +02:00
case 'modifica_intervento' :
$sessione = filter ( 'id' );
$idintervento = filter ( 'idintervento' );
$orario_inizio = filter ( 'timeStart' );
$orario_fine = filter ( 'timeEnd' );
2017-08-04 16:28:16 +02:00
2018-07-17 12:05:21 +02:00
// Aggiornamento prezzo totale
2020-03-12 22:15:02 +01:00
$q = 'SELECT in_interventi_tecnici.prezzo_ore_unitario, idtecnico, in_statiintervento.is_completato FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento WHERE in_interventi.id=' . prepare ( $idintervento ) . ' AND in_statiintervento.is_completato = 0 ' . Modules :: getAdditionalsQuery ( 'Interventi' );
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( $q );
$prezzo_ore = 0.00 ;
for ( $i = 0 ; $i < count ( $rs ); ++ $i ) {
$prezzo_ore_unitario = $rs [ $i ][ 'prezzo_ore_unitario' ];
2018-07-17 12:05:21 +02:00
$ore = calcola_ore_intervento ( $orario_inizio , $orario_fine );
2017-08-04 16:28:16 +02:00
2018-07-17 12:05:21 +02:00
$prezzo_ore += $ore * $prezzo_ore_unitario ;
2017-08-04 16:28:16 +02:00
}
if ( count ( $rs ) > 0 ) {
// Aggiornamento orario tecnico
2018-07-17 12:05:21 +02:00
$dbo -> query ( 'UPDATE in_interventi_tecnici SET orario_inizio = ' . prepare ( $orario_inizio ) . ', orario_fine = ' . prepare ( $orario_fine ) . ', ore=' . prepare ( $ore ) . ', prezzo_ore_consuntivo=' . prepare ( $t * $prezzo_ore_unitario ) . ' WHERE id=' . prepare ( $sessione ));
2017-08-04 16:28:16 +02:00
echo 'ok' ;
} else {
2017-09-04 12:02:29 +02:00
echo tr ( 'Attività completata, non è possibile modificarla!' );
2017-08-04 16:28:16 +02:00
}
break ;
2020-08-04 18:33:28 +02:00
case 'info_intervento' :
$id = filter ( 'id' );
$timeStart = filter ( 'timeStart' );
$timeEnd = filter ( 'timeEnd' );
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
// Lettura dati intervento di riferimento
2017-08-04 16:28:16 +02:00
$query = 'SELECT in_interventi_tecnici.idintervento, in_interventi.id, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id=' . prepare ( $id ) . ' ' . Modules :: getAdditionalsQuery ( 'Interventi' );
$rs = $dbo -> fetchArray ( $query );
2017-09-01 12:55:48 +02:00
if ( ! empty ( $rs )) {
$tecnici = [];
2020-08-04 18:33:28 +02:00
foreach ( $rs as $sessione ) {
$tecnici [] = $sessione [ 'nome_tecnico' ] . ' (' . Translator :: timestampToLocale ( $sessione [ 'orario_inizio' ]) . ' - ' . Translator :: timeToLocale ( $sessione [ 'orario_fine' ]) . ')' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
// Lettura dati intervento
2020-05-19 16:44:20 +02:00
$query = 'SELECT *, in_interventi.codice, idstatointervento AS parent_idstato, in_interventi.idtipointervento AS parent_idtipo, (SELECT GROUP_CONCAT(CONCAT(matricola, " - ", nome) SEPARATOR ", ") FROM my_impianti INNER JOIN my_impianti_interventi ON my_impianti.id=my_impianti_interventi.idimpianto WHERE my_impianti_interventi.idintervento=' . prepare ( $id ) . ' GROUP BY my_impianti_interventi.idintervento) AS impianti, (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=parent_idstato) AS stato, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=parent_idtipo) AS tipo, (SELECT nomesede FROM an_sedi WHERE id=idsede_destinazione) AS sede, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi LEFT JOIN in_interventi_tecnici ON in_interventi.id =in_interventi_tecnici.idintervento LEFT JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id=' . prepare ( $id ) . ' ' . Modules :: getAdditionalsQuery ( 'Interventi' );
2017-09-01 12:55:48 +02:00
$rs = $dbo -> fetchArray ( $query );
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
$desc_tipointervento = $rs [ 0 ][ 'tipo' ];
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
$tooltip = '<b>' . tr ( 'Numero intervento' ) . '</b>: ' . $rs [ 0 ][ 'codice' ] . '<br/>' ;
$tooltip .= '<b>' . tr ( 'Ragione sociale' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'ragione_sociale' ]) . '<br/>' ;
2017-08-04 16:28:16 +02:00
2017-12-31 16:00:23 +01:00
if ( ! empty ( $rs [ 0 ][ 'telefono' ])) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Telefono' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'telefono' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
if ( ! empty ( $rs [ 0 ][ 'cellulare' ])) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Cellulare' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'cellulare' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
if ( ! empty ( $rs [ 0 ][ 'indirizzo' ]) || ! empty ( $rs [ 0 ][ 'citta' ]) || ! empty ( $rs [ 0 ][ 'provincia' ])) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Indirizzo' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'indirizzo' ] . ' ' . $rs [ 0 ][ 'citta' ] . ' (' . $rs [ 0 ][ 'provincia' ] . ')' ) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
if ( ! empty ( $rs [ 0 ][ 'note' ])) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Note' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'note' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Data richiesta' ) . '</b>: ' . Translator :: timestampToLocale ( $rs [ 0 ][ 'data_richiesta' ]) . '<br/>' ;
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Tipo intervento' ) . '</b>: ' . nl2br ( $desc_tipointervento ) . '<br/>' ;
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Tecnici' ) . '</b>: ' . implode ( ', ' , $tecnici ) . '<br/>' ;
2017-08-04 16:28:16 +02:00
2020-05-19 16:44:20 +02:00
if ( $rs [ 0 ][ 'impianti' ] != '' ) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Impianti' ) . '</b>: ' . $rs [ 0 ][ 'impianti' ] . '<br/>' ;
2020-05-19 16:44:20 +02:00
}
2017-09-01 12:55:48 +02:00
if ( $rs [ 0 ][ 'richiesta' ] != '' ) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Richiesta' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'richiesta' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
if ( $rs [ 0 ][ 'descrizione' ] != '' ) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Descrizione' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'descrizione' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-01 12:55:48 +02:00
if ( $rs [ 0 ][ 'informazioniaggiuntive' ] != '' ) {
2020-08-04 18:33:28 +02:00
$tooltip .= '<b>' . tr ( 'Informazioni aggiuntive' ) . '</b>: ' . nl2br ( $rs [ 0 ][ 'informazioniaggiuntive' ]) . '<br/>' ;
2017-09-01 12:55:48 +02:00
}
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
echo $tooltip ;
2017-09-01 12:55:48 +02:00
}
2020-08-04 18:33:28 +02:00
break ;
2017-08-04 16:28:16 +02:00
2020-08-04 18:33:28 +02:00
case 'carica_interventi' :
$mese = filter ( 'mese' );
2018-06-26 14:30:26 +02:00
2020-08-04 19:04:53 +02:00
$solo_promemoria_assegnati = setting ( 'Mostra promemoria attività ai soli Tecnici assegnati' );
$id_tecnico = null ;
if ( $user [ 'gruppo' ] == 'Tecnici' && ! empty ( $user [ 'idanagrafica' ])) {
$id_tecnico = $user [ 'idanagrafica' ];
}
2018-09-20 09:21:34 +02:00
// Righe inserite
2020-04-20 13:09:55 +02:00
$qp = " SELECT
co_promemoria . id ,
idcontratto ,
richiesta , co_contratti . nome AS nomecontratto ,
DATE_FORMAT ( data_richiesta , '%m%Y' ) AS mese ,
data_richiesta ,
an_anagrafiche . ragione_sociale ,
'promemoria' AS ref ,
2020-08-04 18:33:28 +02:00
( SELECT descrizione FROM in_tipiintervento WHERE idtipointervento = co_promemoria . idtipointervento ) AS tipointervento
2020-04-20 13:09:55 +02:00
FROM co_promemoria
2020-08-04 18:33:28 +02:00
INNER JOIN co_contratti ON co_promemoria . idcontratto = co_contratti . id
INNER JOIN an_anagrafiche ON co_contratti . idanagrafica = an_anagrafiche . idanagrafica
WHERE idintervento IS NULL AND
idcontratto IN ( SELECT id FROM co_contratti WHERE idstato IN ( SELECT id FROM co_staticontratti WHERE is_pianificabile = 1 ))
2018-09-20 09:21:34 +02:00
ORDER BY data_richiesta ASC " ;
2020-08-04 18:33:28 +02:00
$promemoria_contratti = $dbo -> fetchArray ( $qp );
2018-09-20 09:21:34 +02:00
2020-08-04 19:04:53 +02:00
$query_interventi = " SELECT id, richiesta, id_contratto AS idcontratto, DATE_FORMAT(IF(data_scadenza IS NULL, data_richiesta, data_scadenza),'%m%Y') AS mese, IF(data_scadenza IS NULL, data_richiesta, data_scadenza)AS data_richiesta, data_scadenza, an_anagrafiche.ragione_sociale, 'intervento' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento=in_interventi.idtipointervento) AS tipointervento
FROM in_interventi
INNER JOIN an_anagrafiche ON in_interventi . idanagrafica = an_anagrafiche . idanagrafica " ;
if ( ! empty ( $id_tecnico ) && ! empty ( $solo_promemoria_assegnati )) {
$query_interventi .= '
INNER JOIN in_interventi_tecnici_assegnati ON in_interventi . id = in_interventi_tecnici_assegnati . id_intervento AND id_tecnico = ' . prepare ( $id_tecnico );
}
$query_interventi .= '
WHERE ( SELECT COUNT ( * ) FROM in_interventi_tecnici WHERE in_interventi_tecnici . idintervento = in_interventi . id ) = 0 ORDER BY data_richiesta ASC ' ;
$promemoria_interventi = $dbo -> fetchArray ( $query_interventi );
2018-09-20 09:21:34 +02:00
2020-08-04 18:33:28 +02:00
$promemoria = array_merge ( $promemoria_contratti , $promemoria_interventi );
if ( ! empty ( $promemoria )) {
2018-03-22 18:34:33 +01:00
$prev_mese = '' ;
2018-09-20 09:21:34 +02:00
// Elenco interventi da pianificare
2020-08-04 18:33:28 +02:00
foreach ( $promemoria as $sessione ) {
if ( $sessione [ 'mese' ] == $mese ) {
if ( date ( 'Ymd' , strtotime ( $sessione [ 'data_richiesta' ])) < date ( 'Ymd' )) {
2020-07-17 16:03:21 +02:00
$class = 'danger' ;
2018-06-26 14:30:26 +02:00
} else {
2020-07-17 16:03:21 +02:00
$class = 'primary' ;
2018-03-22 18:34:33 +01:00
}
2018-06-26 14:30:26 +02:00
2018-03-22 18:34:33 +01:00
echo '
2020-08-04 18:33:28 +02:00
< div class = " fc-event fc-event-'. $class .' " data - id = " '. $sessione['id'] .' " data - idcontratto = " '. $sessione['idcontratto'] .' " data - ref = " '. $sessione['ref'] .' " > '.(($sessione[' ref '] == ' intervento ') ? ' < i class = \ 'fa fa-wrench pull-right\'></i>' : '<i class=\'fa fa-file-text-o pull-right\'></i>' ) . '
< b > '.$sessione[' ragione_sociale '].' </ b >< br > '.Translator::dateToLocale($sessione[' data_richiesta ']).' ( '.$sessione[' tipointervento '].' ) < div class = " request " > '.(!empty($sessione[' richiesta ']) ? ' - '.$sessione[' richiesta '] : ' ').' </ div > '.(!empty($sessione[' nomecontratto ']) ? ' < br >< b > Contratto :</ b > '.$sessione[' nomecontratto '] : ' ' ) .
( ! empty ( $sessione [ 'data_scadenza' ] and $sessione [ 'data_scadenza' ] != '0000-00-00 00:00:00' ) ? '<br><small>' . tr ( 'entro il: ' ) . Translator :: dateToLocale ( $sessione [ 'data_scadenza' ]) . '</small>' : '' ) .
(( $sessione [ 'ref' ] == 'intervento' ) ? ( Modules :: link ( 'Interventi' , $sessione [ 'id' ], '<i class="fa fa-eye"></i>' , null , 'title="' . tr ( 'Visualizza scheda' ) . '" class="btn btn-' . $class . ' btn-xs pull-right"' )) . '<br>' : ( Modules :: link ( 'Contratti' , $sessione [ 'idcontratto' ], '<i class="fa fa-eye"></i>' , null , 'title="' . tr ( 'Visualizza scheda' ) . '" class="btn btn-' . $class . ' btn-xs pull-right"' )) . '<br>' ) .
2020-05-19 10:31:00 +02:00
'</div>' ;
2018-03-22 18:34:33 +01:00
}
2020-08-04 18:33:28 +02:00
}
echo '
2019-07-04 17:36:28 +02:00
< script type = " text/javascript " >
$ ( " .request " ) . shorten ({
2020-08-04 18:33:28 +02:00
moreText : " '.tr('Mostra tutto').' " ,
lessText : " '.tr('Comprimi').' " ,
2019-07-04 17:36:28 +02:00
showChars : 200
});
2020-08-04 18:33:28 +02:00
</ script > ' ;
2018-09-20 09:21:34 +02:00
} else {
2018-06-06 00:15:07 +02:00
echo '<br><small class="help-block">' . tr ( 'Non ci sono interventi da pianificare per questo mese' ) . '</small>' ;
2018-03-22 18:34:33 +01:00
}
2018-06-26 14:30:26 +02:00
2018-03-22 18:34:33 +01:00
break ;
2017-08-04 16:28:16 +02:00
}