<?php include_once __DIR__.'/../../../core.php'; /* GESTIONE ORDINI DI SERVIZIO */ $mesi = [ tr('Gennaio'), tr('Febbraio'), tr('Marzo'), tr('Aprile'), tr('Maggio'), tr('Giugno'), tr('Luglio'), tr('Agosto'), tr('Settembre'), tr('Ottobre'), tr('Novembre'), tr('Dicembre'), ]; // Generazione ordini di servizio if ($get['op'] == 'add_ordineservizio') { $prev_data = ''; // Ciclo fra le voci in arrivo dal form foreach ($post['voce'] as $data_scadenza => $ordiniservizio) { $data_scadenza = date_create_from_format('Ym', $data_scadenza)->format(Intl\Formatter::getStandardFormats()['date']); // Ogni data può avere più voci di servizio da salvare foreach ($ordiniservizio as $n => $idvoce) { // Aggiunta ordine di servizio solo se la voce è spuntata if (in_array($idvoce, $post['idvoce'])) { // Creazione ordine di servizio per data di scadenza if ($prev_data != $data_scadenza) { $dbo->query('INSERT INTO co_ordiniservizio(idcontratto, data_scadenza, idimpianto, stato) VALUES('.prepare($id_record).', '.prepare($data_scadenza).', '.prepare($post['matricola']).", 'aperto')"); $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; } } $_SESSION['infos'][] = tr('Ordini di servizio generati correttamente!'); } // Eliminazione pianificazione specifica elseif ($get['op'] == 'del_ordineservizio') { $idordineservizio = $get['idordineservizio']; $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)); $_SESSION['infos'][] = tr('Ordine di servizio eliminato correttamente!'); } } // Non si può eliminare l'ordine di servizio perché è chiuso else { $_SESSION['infos'][] = tr('Ordine di servizio già chiuso, impossibile eliminarlo!'); } } echo ' <div class="box"> <div class="box-header with-border"> <h3 class="box-title">'.tr('Pianificazione ordini di servizio').'</h3> </div> <div class="box-body">'; echo ' <p>'.tr('Qui puoi programmare gli ordini di servizio del contratto').'.</p>'; /* 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 ' <p>'.tr('Non sono ancora stati pianificati ordini di servizio').'...</p>'; } else { echo ' <table class="table table-striped table-hover table-bordered table-condensed"> <tr> <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> <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'].'\' );"> <i class="fa fa-list"></i> '.tr('Visualizza').'... ('.sizeof($rs2).') </button>'; // Popup voci di servizio echo ' <div class="hide"> <div id="voci_'.$r['id'].'">'; if (empty($rs2)) { echo ' <p>'.tr('Non sono state pianificate voci di servizio').'...</p>'; } else { echo ' <table class="table table-bordered table-condensed table-hover table-striped"> <tr> <th>'.tr('Voci di servizio').'</th> <th width="40%">'.tr('Eseguito').'</th> </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"> <i class="fa fa-clock-o"></i> '.tr('non ancora eseguito').' </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> '.Modules::link('Interventi', $r['idintervento'], tr('Intervento num. _NUM_ del _DATE_', [ '_NUM_' => $res['codice'], '_DATE_' => Translator::dateToLocale($r[0]['data_intervento']), ])).' </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 ' <span class="text-warning"><i class="fa fa-clock-o"></i> '.tr('aperto').'</span>'; } else { echo ' <span class="text-success"><i class="fa fa-check"></i> '.tr('chiuso').'/span>'; } echo ' </td>'; // Funzioni echo ' <td>'; if (empty($r['idintervento'])) { echo ' <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?').'"> <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> '.tr('Non sono ancora state inserite voci di servizio').'. <a href="'.$rootdir.'/controller.php?id_module='.Modules::get('Voci di servizio')['id'].'">'.tr('Inizia ora').'...</a> </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)); if (!empty($rs2[0]['data_accettazione']) && !empty($rs2[0]['data_conclusione'])) { $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();"> <i class="fa fa-calendar"></i> '.tr('Pianifica nuovi ordini di servizio').' </button> <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"> <input type="hidden" name="backto" value="record-edit">'; // Selezione impianto echo ' <div class="row"> <div class="col-md-6"> {[ "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($records[0]['idanagrafica']).' UNION SELECT 0, \'Sede legale\') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare($records[0]['idanagrafica']).' AND my_impianti.id NOT IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') ORDER BY idsede ASC, matricola ASC" ]} </div>'; // Indice voci di servizio echo ' <div class="col-md-6"> {[ "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\'); } });\"" ]} </div> </div>'; // voci di servizio foreach ($rs as $r) { echo ' <div class="col-md-3 hide" id="voce_'.$r['id'].'"> <big><b>'.$r['id'].' - '.$r['descrizione'].'</b></big> <hr>'; 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 ' <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>'; } echo ' </div>'; } 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(); } }"> <i class="fa fa-plus"></i> '.tr('Aggiungi').' </button>'; /* Copia pianificazione da una già fatta per un impianto ad un'altra */ // Opzione di copia pianificazione solo se ci sono ancora impianti non pianificati $query2 = 'SELECT * FROM my_impianti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).')'; $cont = $dbo->fetchNum($query2); if ($cont > 0) { // Elenco impianti già pianificati echo ' <hr> <div class="row"> <div class="col-md-6"> {[ "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($records[0]['idanagrafica']).' UNION SELECT 0, \'Sede legale\') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare($records[0]['idanagrafica']).' AND my_impianti.id IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') ORDER BY idsede ASC, matricola ASC" ]} </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() );"> <i class="fa fa-upload"></i>'.tr('Carica questa pianificazione').' </button>'; } echo ' </form>'; } else { echo ' <p>'.tr('Le date di accettazione e conclusione del contratto non sono ancora state impostate').'</p>'; } } echo ' </div> </div>';