1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-01-01 10:37:31 +01:00
openstamanager/modules/contratti/plugins/contratti.ordiniservizio.php
Thomas Zilio 9c5625c3bb Completo utilizzo delle funzionalità di Symfony Translator
Miglioramento nella gestione delle sostituzioni inline per le traduzioni, con aggiunta di alcune opzioni integrate per modificare l'output (tutto maiuscolo o tutto minuscolo).
Aggiunta della libreria danielstjules/stringy per migliorare la gestione delle stringhe con supporto completo alla codifica UTF-8.
2017-09-10 14:35:41 +02:00

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 n<sup>o</sup> _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>';