2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../../core.php' ;
/*
GESTIONE ORDINI DI SERVIZIO
*/
2018-09-20 16:42:35 +02:00
// TODO: aggiornare con la funzione months()
2017-08-04 16:28:16 +02:00
$mesi = [
2017-09-04 12:02:29 +02:00
tr ( 'Gennaio' ),
tr ( 'Febbraio' ),
tr ( 'Marzo' ),
tr ( 'Aprile' ),
tr ( 'Maggio' ),
tr ( 'Giugno' ),
tr ( 'Luglio' ),
tr ( 'Agosto' ),
tr ( 'Settembre' ),
tr ( 'Ottobre' ),
tr ( 'Novembre' ),
tr ( 'Dicembre' ),
2017-08-04 16:28:16 +02:00
];
// Generazione ordini di servizio
2018-06-23 18:35:08 +02:00
if ( get ( 'op' ) == 'add_ordineservizio' ) {
2017-08-04 16:28:16 +02:00
$prev_data = '' ;
// Ciclo fra le voci in arrivo dal form
2018-07-19 15:33:32 +02:00
foreach ( post ( 'voce' ) as $data_scadenza => $ordiniservizio ) {
2017-09-19 16:20:44 +02:00
$data_scadenza = date_create_from_format ( 'Ym' , $data_scadenza ) -> format ( Intl\Formatter :: getStandardFormats ()[ 'date' ]);
2017-08-04 16:28:16 +02:00
// Ogni data può avere più voci di servizio da salvare
foreach ( $ordiniservizio as $n => $idvoce ) {
// Aggiunta ordine di servizio solo se la voce è spuntata
2018-07-19 15:33:32 +02:00
if ( in_array ( $idvoce , post ( 'idvoce' ))) {
2017-08-04 16:28:16 +02:00
// Creazione ordine di servizio per data di scadenza
if ( $prev_data != $data_scadenza ) {
2018-07-19 15:33:32 +02:00
$dbo -> query ( 'INSERT INTO co_ordiniservizio(idcontratto, data_scadenza, idimpianto, stato) VALUES(' . prepare ( $id_record ) . ', ' . prepare ( $data_scadenza ) . ', ' . prepare ( post ( 'matricola' )) . " , 'aperto') " );
2017-08-04 16:28:16 +02:00
$idordineservizio = $dbo -> lastInsertedID ();
}
$dbo -> query ( 'INSERT INTO co_ordiniservizio_vociservizio(idordineservizio, voce, categoria, eseguito) VALUES(' . prepare ( $idordineservizio ) . ', (SELECT descrizione FROM in_vociservizio WHERE id=' . prepare ( $idvoce ) . '), (SELECT categoria FROM in_vociservizio WHERE id=' . prepare ( $idvoce ) . '), 0 )' );
}
$prev_data = $data_scadenza ;
}
}
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Ordini di servizio generati correttamente!' ));
2017-08-04 16:28:16 +02:00
}
// Eliminazione pianificazione specifica
2018-06-23 18:35:08 +02:00
elseif ( get ( 'op' ) == 'del_ordineservizio' ) {
2018-07-19 15:33:32 +02:00
$idordineservizio = get ( 'idordineservizio' );
2017-08-04 16:28:16 +02:00
$n = $dbo -> fetchNum ( 'SELECT id FROM co_ordiniservizio WHERE id=' . prepare ( $idordineservizio ) . " AND stato='aperto' " );
if ( $n == 1 ) {
// Eliminazione ordine di servizio
if ( $dbo -> query ( 'DELETE FROM co_ordiniservizio WHERE id=' . prepare ( $idordineservizio ))) {
// Eliminazione voci di servizio collegate
$dbo -> query ( 'DELETE FROM co_ordiniservizio_vociservizio WHERE idordineservizio=' . prepare ( $idordineservizio ));
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Ordine di servizio eliminato correttamente!' ));
2017-08-04 16:28:16 +02:00
}
}
// Non si può eliminare l'ordine di servizio perché è chiuso
else {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'Ordine di servizio già chiuso, impossibile eliminarlo!' ));
2017-08-04 16:28:16 +02:00
}
}
echo '
< div class = " box " >
< div class = " box-header with-border " >
2017-09-04 12:02:29 +02:00
< h3 class = " box-title " > '.tr(' Pianificazione ordini di servizio ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " box-body " > ' ;
echo '
2017-09-04 12:02:29 +02:00
< p > '.tr(' Qui puoi programmare gli ordini di servizio del contratto ').' .</ p > ' ;
2017-08-04 16:28:16 +02:00
/*
Ordini di servizio pianificati
*/
// (SELECT idsede FROM my_impianti WHERE idimpianto=co_ordiniservizio.idimpianto)
$rs = $dbo -> fetchArray ( " SELECT *, (SELECT CONCAT_WS(' ', nomesede, citta) FROM an_sedi WHERE id=(SELECT idsede FROM my_impianti WHERE idimpianto=co_ordiniservizio.idimpianto LIMIT 0,1)) AS sede, (SELECT CONCAT_WS(' - ', matricola, nome) FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=co_ordiniservizio.idintervento) AS data_intervento FROM co_ordiniservizio WHERE idcontratto= " . prepare ( $id_record ) . ' ORDER BY data_scadenza ASC' );
if ( empty ( $rs )) {
echo '
2017-09-04 12:02:29 +02:00
< p > '.tr(' Non sono ancora stati pianificati ordini di servizio ').' ...</ p > ' ;
2017-08-04 16:28:16 +02:00
} else {
echo '
< table class = " table table-striped table-hover table-bordered table-condensed " >
< tr >
2017-09-04 12:02:29 +02:00
< th width = " 10% " > '.tr(' Entro ').' </ th >
< th > '.tr(' Sede ').' </ th >
< th width = " 20% " > '.tr(' Impianto ').' </ th >
< th width = " 10% " > '.tr(' Voci di servizio ').' </ th >
< th width = " 10% " > '.tr(' Stato ').' </ th >
2017-08-04 16:28:16 +02:00
< th width = " 3% " ></ th >
</ tr > ' ;
$prev_mese = '' ;
foreach ( $rs as $r ) {
echo '
< tr >
< td > ' ;
// Data scadenza
if ( $prev_mese != $r [ 'data_scadenza' ]) {
echo '
< b > '.$mesi[intval(date(' m ', strtotime($r[' data_scadenza ']))) - 1].' '.date(' Y ', strtotime($r[' data_scadenza '])).' </ b >
</ td > ' ;
} else {
echo '
< small >< em > '.$mesi[intval(date(' m ', strtotime($r[' data_scadenza ']))) - 1].' '.date(' Y ', strtotime($r[' data_scadenza '])).' </ em ></ small > ' ;
}
// Sede
if ( $r [ 'sede' ] == '' ) {
$sede = 'Sede legale' ;
} else {
$sede = $r [ 'sede' ];
}
echo '
< td > '.$sede.' </ td > ' ;
// Impianto
echo '
< td >
'.Modules::link(' MyImpianti ', $r[' idimpianto '], $r[' impianto ']).'
</ td > ' ;
// Voci di servizio
$rs2 = $dbo -> fetchArray ( 'SELECT * FROM co_ordiniservizio_vociservizio WHERE idordineservizio=' . prepare ( $r [ 'id' ]) . ' ORDER BY categoria ASC' );
echo '
< td class = " text-center " >
< button type = " button " class = " btn btn-primary btn-sm " onclick = " launch_modal( \ 'Pianifica intervento \ ', \ '#voci_'. $r['id'] .' \ ' ); " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-list " ></ i > '.tr(' Visualizza ').' ... ( '.sizeof($rs2).' )
2017-08-04 16:28:16 +02:00
</ button > ' ;
// Popup voci di servizio
echo '
< div class = " hide " >
< div id = " voci_'. $r['id'] .' " > ' ;
if ( empty ( $rs2 )) {
echo '
2017-09-04 12:02:29 +02:00
< p > '.tr(' Non sono state pianificate voci di servizio ').' ...</ p > ' ;
2017-08-04 16:28:16 +02:00
} else {
echo '
< table class = " table table-bordered table-condensed table-hover table-striped " >
< tr >
2017-09-04 12:02:29 +02:00
< th > '.tr(' Voci di servizio ').' </ th >
< th width = " 40% " > '.tr(' Eseguito ').' </ th >
2017-08-04 16:28:16 +02:00
</ tr > ' ;
$prev_cat = '' ;
for ( $v = 0 ; $v < sizeof ( $rs2 ); ++ $v ) {
if ( $rs2 [ $v ][ 'categoria' ] != $prev_cat ) {
echo '
< tr >
< th colspan = " 2 " > '.$rs2[$v][' categoria '].' </ th >
</ tr > ' ;
}
echo '
< tr >
< td > '.$rs2[$v][' voce '].' </ td >
< td > ' ;
// intervento non ancora eseguito
if ( empty ( $r [ 'idintervento' ])) {
echo '
< span class = " text-warning " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-clock-o " ></ i > '.tr(' non ancora eseguito ').'
2017-08-04 16:28:16 +02:00
</ span > ' ;
} else {
$res = $dbo -> fetchArray ( 'SELECT codice FROM in_interventi WHERE id=' . prepare ( $rsp [ $i ][ 'idintervento' ]));
echo '
< span class = " text-success " >
< i class = " fa fa-check " ></ i >
2017-09-14 10:27:49 +02:00
'.Modules::link(' Interventi ', $r[' idintervento '], tr(' Intervento num . _NUM_ del _DATE_ ' , [
2017-09-10 14:35:41 +02:00
'_NUM_' => $res [ 'codice' ],
'_DATE_' => Translator :: dateToLocale ( $r [ 0 ][ 'data_intervento' ]),
])) . '
2017-08-04 16:28:16 +02:00
</ span > ' ;
}
echo '
</ td >
</ tr > ' ;
$prev_cat = $rs2 [ $v ][ 'categoria' ];
}
echo '
</ table > ' ;
}
echo '
</ div >
</ div >
</ td > ' ;
// Stato
echo '
< td class = " text-center " > ' ;
if ( empty ( $r [ 'idintervento' ])) {
echo '
2017-09-04 12:02:29 +02:00
< span class = " text-warning " >< i class = " fa fa-clock-o " ></ i > '.tr(' aperto ').' </ span > ' ;
2017-08-04 16:28:16 +02:00
} else {
echo '
2017-09-04 12:02:29 +02:00
< span class = " text-success " >< i class = " fa fa-check " ></ i > '.tr(' chiuso ').' / span > ' ;
2017-08-04 16:28:16 +02:00
}
echo '
</ td > ' ;
// Funzioni
echo '
< td > ' ;
if ( empty ( $r [ 'idintervento' ])) {
echo '
2017-09-04 12:02:29 +02:00
< a class = " btn btn-danger ask " data - backto = " record-edit " data - method = " get " data - op = " del_ordineservizio " data - idordineservizio = " '. $r['id'] .' " data - msg = " '.tr('Vuoi eliminare questa pianificazione?').' " >
2017-08-04 16:28:16 +02:00
< i class = " fa fa-trash " ></ i >
</ a > ' ;
}
echo '
</ td >
</ tr > ' ;
$prev_mese = $r [ 'data_scadenza' ];
}
echo '
</ table > ' ;
}
echo '
< br >< br > ' ;
/*
Schema per aggiungere ordini di servizio
*/
$rs = $dbo -> fetchArray ( 'SELECT * FROM in_vociservizio ORDER BY categoria ASC' );
if ( empty ( $rs )) {
echo '
< p >
2017-09-04 12:02:29 +02:00
'.tr(' Non sono ancora state inserite voci di servizio ').' .
2017-09-22 15:19:59 +02:00
< a href = " '. $rootdir .'/controller.php?id_module='.Modules::get('Voci di servizio')['id'].' " > '.tr(' Inizia ora ').' ...</ a >
2017-08-04 16:28:16 +02:00
</ p > ' ;
}
// Elenco voci di servizio con mesi in cui eseguirle
else {
// Calcolo mese iniziale e finale del contratto
$rs2 = $dbo -> fetchArray ( 'SELECT data_accettazione, data_conclusione, TIMESTAMPDIFF(MONTH, data_accettazione, data_conclusione) AS mesi FROM co_contratti WHERE id=' . prepare ( $id_record ));
2017-08-29 16:34:02 +02:00
if ( ! empty ( $rs2 [ 0 ][ 'data_accettazione' ]) && ! empty ( $rs2 [ 0 ][ 'data_conclusione' ])) {
2017-08-04 16:28:16 +02:00
$n_mesi = $rs2 [ 0 ][ 'mesi' ] + 1 ;
$mese_start = date ( 'm' , strtotime ( $rs2 [ 0 ][ 'data_accettazione' ]));
echo '
< button type = " button " class = " btn btn-primary " onclick = " $ (this).next().removeClass( \ 'hide \ '); $ (this).remove(); " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-calendar " ></ i > '.tr(' Pianifica nuovi ordini di servizio ').'
2017-08-04 16:28:16 +02:00
</ button >
2017-09-22 15:19:59 +02:00
< form action = " '. $rootdir .'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='. $id_record .'&op=add_ordineservizio " id = " plan_form " method = " post " class = " no-check hide " >
2017-08-04 16:28:16 +02:00
< input type = " hidden " name = " backto " value = " record-edit " > ' ;
2017-09-10 14:35:41 +02:00
// Selezione impianto
echo '
2017-08-04 16:28:16 +02:00
< div class = " row " >
< div class = " col-md-6 " >
2018-07-18 15:20:10 +02:00
{[ " type " : " select " , " label " : " '.tr('Impianto').' " , " name " : " matricola " , " values " : " query=SELECT my_impianti.id, CONCAT(my_impianti.matricola, \" - \" , my_impianti.nome) AS descrizione, an_sedi.optgroup FROM my_impianti INNER JOIN (SELECT id, CONCAT(an_sedi.nomesede, \" ( \" , an_sedi.citta, \" ) \" ) AS optgroup FROM an_sedi WHERE idanagrafica='.prepare( $record['idanagrafica'] ).' UNION SELECT 0, \ 'Sede legale \ ') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare( $record['idanagrafica'] ).' AND my_impianti.id NOT IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare( $id_record ).') ORDER BY idsede ASC, matricola ASC " ]}
2017-08-04 16:28:16 +02:00
</ div > ' ;
2017-09-10 14:35:41 +02:00
// Indice voci di servizio
echo '
2017-08-04 16:28:16 +02:00
< div class = " col-md-6 " >
2017-09-04 12:02:29 +02:00
{[ " type " : " select " , " label " : " '.tr('Voci di servizio da pianificare').' " , " name " : " idvoce[] " , " values " : " query=SELECT id, descrizione, categoria AS optgroup FROM in_vociservizio ORDER BY categoria ASC " , " multiple " : 1 , " extra " : " onchange= \" $ (this).find( \ 'option \ ').each( function() { if( $ (this).is( \ ':selected \ ') ) { $ ( \ '#voce_ \ '+ $ (this).val()).removeClass( \ 'hide \ '); }else { $ ( \ '#voce_ \ '+ $ (this).val()).addClass( \ 'hide \ '); } }); \" " ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div > ' ;
2017-09-10 14:35:41 +02:00
// voci di servizio
foreach ( $rs as $r ) {
echo '
2017-08-04 16:28:16 +02:00
< div class = " col-md-3 hide " id = " voce_'. $r['id'] .' " >
< big >< b > '.$r[' id '].' - '.$r[' descrizione '].' </ b ></ big >
< hr > ' ;
2017-09-10 14:35:41 +02:00
for ( $j = 0 ; $j < $n_mesi ; ++ $j ) {
$id_mese = date ( 'Ym' , strtotime ( $rs2 [ 0 ][ 'data_accettazione' ] . ' +' . $j . ' month' ));
$nome_mese = $mesi [ intval ( date ( 'm' , strtotime ( $rs2 [ 0 ][ 'data_accettazione' ] . ' +' . $j . ' month' ))) - 1 ] . ' ' . date ( 'Y' , strtotime ( $rs2 [ 0 ][ 'data_accettazione' ] . ' +' . $j . ' month' ));
echo '
2017-08-04 16:28:16 +02:00
< small >
< label for = " m_'. $id_mese .'_'. $r['id'] .' " >
< input type = " checkbox " id = " m_'. $id_mese .'_'. $r['id'] .' " name = " voce['. $id_mese .'][] " value = " '. $r['id'] .' " >
'.$nome_mese.'
</ label >
</ small >< br > ' ;
2017-09-10 14:35:41 +02:00
}
2017-08-04 16:28:16 +02:00
2017-09-10 14:35:41 +02:00
echo '
2017-08-04 16:28:16 +02:00
</ div > ' ;
2017-09-10 14:35:41 +02:00
}
2017-08-04 16:28:16 +02:00
echo '
< div class = " clearfix " ></ div >< br > ' ;
echo '
< button type = " button " class = " btn btn-primary " onclick = " if( $ ( \ '#matricola \ ').val() && $ ( \ '#idvoce \ ').val() ) { if( confirm( \ 'Pianificare questo ordine di servizio? \ ') ) { $ ( \ '#plan_form \ ').submit(); } } else { if ( ! $ ( \ '#matricola \ ').val()) { alert ( \ 'Seleziona un impianto. \ '); $ ( \ '#matricola \ ').focus();}else { alert ( \ 'Seleziona le voci di servizio da pianificare. \ '); $ ( \ '#idvoce \ ').focus(); } } " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-plus " ></ i > '.tr(' Aggiungi ').'
2017-08-04 16:28:16 +02:00
</ button > ' ;
2017-09-10 14:35:41 +02:00
/*
Copia pianificazione da una già fatta per un impianto ad un ' altra
*/
// Opzione di copia pianificazione solo se ci sono ancora impianti non pianificati
2018-07-18 15:20:10 +02:00
$query2 = 'SELECT * FROM my_impianti WHERE idanagrafica=' . prepare ( $record [ 'idanagrafica' ]) . ' AND id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto=' . prepare ( $id_record ) . ')' ;
2017-08-04 16:28:16 +02:00
$cont = $dbo -> fetchNum ( $query2 );
if ( $cont > 0 ) {
// Elenco impianti già pianificati
2017-09-10 14:35:41 +02:00
echo '
2017-08-04 16:28:16 +02:00
< hr >
< div class = " row " >
< div class = " col-md-6 " >
2018-07-18 15:20:10 +02:00
{[ " type " : " select " , " label " : " '.tr('Copiare la pianificazione da un altro impianto').' " , " name " : " matricola_src " , " values " : " query=SELECT my_impianti.id, CONCAT(my_impianti.matricola, \" - \" , my_impianti.nome) AS descrizione, an_sedi.optgroup FROM my_impianti INNER JOIN (SELECT id, CONCAT(an_sedi.nomesede, \" ( \" , an_sedi.citta, \" ) \" ) AS optgroup FROM an_sedi WHERE idanagrafica='.prepare( $record['idanagrafica'] ).' UNION SELECT 0, \ 'Sede legale \ ') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare( $record['idanagrafica'] ).' AND my_impianti.id IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare( $id_record ).') ORDER BY idsede ASC, matricola ASC " ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div > ' ;
echo '
< div class = " clearfix " ></ div >< br > ' ;
echo '
< button type = " button " class = " btn btn-primary " onclick = " copia_pianificazione_os( \ ''. $id_record .' \ ', $ ( \ '#matricola_src option:selected \ ').val() ); " >
2017-09-04 12:02:29 +02:00
< i class = " fa fa-upload " ></ i > '.tr(' Carica questa pianificazione ').'
2017-08-04 16:28:16 +02:00
</ button > ' ;
}
echo '
</ form > ' ;
} else {
echo '
2017-09-04 12:02:29 +02:00
< p > '.tr(' Le date di accettazione e conclusione del contratto non sono ancora state impostate ').' </ p > ' ;
2017-08-04 16:28:16 +02:00
}
}
echo '
</ div >
</ div > ' ;