mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-29 17:21:54 +01:00
6510807bdd
Miglioramento della presentazione del progetto e delle informazioni relative. Aggiunti messaggi per segnalare il collegamento dei documenti tra di loro ed evitare cancellazioni involontarie. Unificato il sistema di identificazione dei numeri (ora abbreviati in "num.").
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(Translator::getEnglishFormatter()->getTimestampPattern());
|
|
|
|
// 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::getModule('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::getModule('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>';
|