mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-25 23:33:02 +01:00
361 lines
14 KiB
PHP
361 lines
14 KiB
PHP
<?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>';
|