1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-01-12 23:53:15 +01:00
openstamanager/modules/dashboard/edit.php
Thomas Zilio 78484220fe Bugfix generale
Risoluzione delle problematiche incontate con l'installazione del software su Aruba con versione di MySQL non aggiornata.
Aggiunto sistema automatico di completamento dei campi per l'API, con disattivazione del severzio automatica per MySQL < 5.6.5.
2017-08-31 10:09:06 +02:00

573 lines
22 KiB
PHP

<?php
include_once __DIR__.'/../../core.php';
// Impostazione filtri di default a tutte le selezioni la prima volta
if (!isset($_SESSION['dashboard']['idtecnici'])) {
$rs = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE deleted=0 AND descrizione='Tecnico'");
$_SESSION['dashboard']['idtecnici'] = ["'-1'"];
for ($i = 0; $i < count($rs); ++$i) {
$_SESSION['dashboard']['idtecnici'][] = "'".$rs[$i]['id']."'";
}
}
if (!isset($_SESSION['dashboard']['idstatiintervento'])) {
$rs = $dbo->fetchArray('SELECT idstatointervento AS id, descrizione FROM in_statiintervento');
$_SESSION['dashboard']['idstatiintervento'] = ["'-1'"];
for ($i = 0; $i < count($rs); ++$i) {
$_SESSION['dashboard']['idstatiintervento'][] = "'".$rs[$i]['id']."'";
}
}
if (!isset($_SESSION['dashboard']['idtipiintervento'])) {
$rs = $dbo->fetchArray('SELECT idtipointervento AS id, descrizione FROM in_tipiintervento');
$_SESSION['dashboard']['idtipiintervento'] = ["'-1'"];
for ($i = 0; $i < count($rs); ++$i) {
$_SESSION['dashboard']['idtipiintervento'][] = "'".$rs[$i]['id']."'";
}
}
if (!isset($_SESSION['dashboard']['idzone'])) {
$rs = $dbo->fetchArray('SELECT id, descrizione FROM an_zone');
$_SESSION['dashboard']['idzone'] = ["'-1'"];
for ($i = 0; $i < count($rs); ++$i) {
$_SESSION['dashboard']['idzone'][] = "'".$rs[$i]['id']."'";
}
}
// Stati intervento
$checks = '';
$count = 0;
$total = 0;
$rs = $dbo->fetchArray('SELECT idstatointervento AS id, descrizione, colore FROM in_statiintervento ORDER BY descrizione ASC');
$total = count($rs);
$allchecksstati = '';
for ($i = 0; $i < count($rs); ++$i) {
$attr = '';
foreach ($_SESSION['dashboard']['idstatiintervento'] as $idx => $val) {
if ($val == "'".$rs[$i]['id']."'") {
$attr = 'checked="checked"';
++$count;
}
}
$checks .= "<li><input type='checkbox' id='idstato_".$rs[$i]['id']."' value=\"".$rs[$i]['id'].'" '.$attr." onclick=\"session_set_array( 'dashboard,idstatiintervento', '".$rs[$i]['id']."' ); $('#calendar').fullCalendar('refetchEvents'); update_counter( 'idstati_count', $('#idstati_ul').find('input:checked').length );\"> <label for='idstato_".$rs[$i]['id']."'> <span class='badge' style=\"color:#333; background:".$rs[$i]['colore'].';">'.$rs[$i]['descrizione']."</span></label></li>\n";
$allchecksstati .= "session_set_array( 'dashboard,idstatiintervento', '".$rs[$i]['id']."', 0 ); ";
}
if ($count == $total) {
$class = 'btn-success';
} elseif ($count == 0) {
$class = 'btn-danger';
} else {
$class = 'btn-warning';
}
if ($total == 0) {
$class = 'btn-primary disabled';
}
?>
<!-- Filtri -->
<div class="row">
<!-- STATI INTERVENTO -->
<div class="dropdown col-md-3">
<a class="btn <?php echo $class ?> btn-block" data-toggle="dropdown" href="javascript:;" id="idstati_count"><i class="fa fa-filter"></i> <?php echo _('Stati intervento'); ?> (<?php echo $count.'/'.$total ?>) <i class="caret"></i></a>
<ul class="dropdown-menu" role="menu" id="idstati_ul">
<?php echo $checks ?>
<div class="btn-group pull-right">
<button id="selectallstati" onclick="<?php echo $allchecksstati; ?>" class="btn btn-primary btn-xs" type="button"><?php echo _('Tutti'); ?></button>
<button id="deselectallstati" class="btn btn-danger btn-xs" type="button"><i class="fa fa-times"></i></button>
</div>
</ul>
</div>
<?php
// Tipi intervento
$checks = '';
$count = 0;
$total = 0;
$rs = $dbo->fetchArray('SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC');
$total = count($rs);
$allcheckstipi = '';
for ($i = 0; $i < count($rs); ++$i) {
$attr = '';
foreach ($_SESSION['dashboard']['idtipiintervento'] as $idx => $val) {
if ($val == "'".$rs[$i]['id']."'") {
$attr = 'checked="checked"';
++$count;
}
}
$checks .= "<li><input type='checkbox' id='idtipo_".$rs[$i]['id']."' value=\"".$rs[$i]['id'].'" '.$attr." onclick=\"session_set_array( 'dashboard,idtipiintervento', '".$rs[$i]['id']."' ); $('#calendar').fullCalendar('refetchEvents'); update_counter( 'idtipi_count', $('#idtipi_ul').find('input:checked').length );\"> <label for='idtipo_".$rs[$i]['id']."'> ".$rs[$i]['descrizione']."</label></li>\n";
$allcheckstipi .= "session_set_array( 'dashboard,idtipiintervento', '".$rs[$i]['id']."', 0 ); ";
}
if ($count == $total) {
$class = 'btn-success';
} elseif ($count == 0) {
$class = 'btn-danger';
} else {
$class = 'btn-warning';
}
if ($total == 0) {
$class = 'btn-primary disabled';
}
?>
<!-- TIPI DI INTERVENTO -->
<div class="dropdown col-md-3">
<a class="btn <?php echo $class ?> btn-block" data-toggle="dropdown" href="javascript:;" id="idtipi_count"><i class="fa fa-filter"></i> <?php echo _('Tipi intervento'); ?> (<?php echo $count.'/'.$total ?>) <i class="caret"></i></a>
<ul class="dropdown-menu" role="menu" id="idtipi_ul">
<?php echo $checks ?>
<div class="btn-group pull-right">
<button id="selectalltipi" onclick="<?php echo $allcheckstipi; ?>" class="btn btn-primary btn-xs" type="button"><?php echo _('Tutti'); ?></button>
<button id="deselectalltipi" class="btn btn-danger btn-xs" type="button"><i class="fa fa-times"></i></button>
</div>
</ul>
</div>
<?php
// Tecnici
$checks = '';
$count = 0;
$total = 0;
$totale_tecnici = 0; // conteggia tecnici eliminati e non
$rs = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE deleted=0 AND descrizione='Tecnico' ORDER BY ragione_sociale ASC");
$total = count($rs);
$totale_tecnici += $total;
$allchecktecnici = '';
for ($i = 0; $i < count($rs); ++$i) {
$attr = '';
foreach ($_SESSION['dashboard']['idtecnici'] as $idx => $val) {
if ($val == "'".$rs[$i]['id']."'") {
$attr = 'checked="checked"';
++$count;
}
}
$checks .= "<li><input type='checkbox' id='tech_".$rs[$i]['id']."' value=\"".$rs[$i]['id'].'" '.$attr." onclick=\"session_set_array( 'dashboard,idtecnici', '".$rs[$i]['id']."' ); $('#calendar').fullCalendar('refetchEvents'); update_counter( 'idtecnici_count', $('#idtecnici_ul').find('input:checked').length );\"> <label for='tech_".$rs[$i]['id']."'> ".$rs[$i]['ragione_sociale']."</label></li>\n";
$allchecktecnici .= "session_set_array( 'dashboard,idtecnici', '".$rs[$i]['id']."', 0 ); ";
}
// TECNICI ELIMINATI
$rs = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE deleted=1 AND descrizione='Tecnico' ORDER BY ragione_sociale ASC");
$total = count($rs);
$totale_tecnici += $total;
if ($total > 0) {
$checks .= "<li><hr>Tecnici eliminati:</li>\n";
for ($i = 0; $i < count($rs); ++$i) {
$attr = '';
foreach ($_SESSION['dashboard']['idtecnici'] as $idx => $val) {
if ($val == "'".$rs[$i]['id']."'") {
$attr = 'checked="checked"';
++$count;
}
}
$checks .= "<li><input type='checkbox' id='tech_".$rs[$i]['id']."' value=\"".$rs[$i]['id'].'" '.$attr." onclick=\"session_set_array( 'dashboard,idtecnici', '".$rs[$i]['id']."' ); $('#calendar').fullCalendar('refetchEvents'); update_counter( 'idtecnici_count', $('#idtecnici_ul').find('input:checked').length );\"> <label for='tech_".$rs[$i]['id']."'> ".$rs[$i]['ragione_sociale']."</label></li>\n";
$allchecktecnici .= "session_set_array( 'dashboard,idtecnici', '".$rs[$i]['id']."', 0 ); ";
} // end for
} // end if
if ($count == $totale_tecnici) {
$class = 'btn-success';
} elseif ($count == 0) {
$class = 'btn-danger';
} else {
$class = 'btn-warning';
}
if ($totale_tecnici == 0) {
$class = 'btn-primary disabled';
}
?>
<!-- TECNICI -->
<div class="dropdown col-md-3">
<a class="btn <?php echo $class ?> btn-block" data-toggle="dropdown" href="javascript:;" id="idtecnici_count"><i class="fa fa-filter"></i> <?php echo _('Tecnici'); ?> (<?php echo $count.'/'.$totale_tecnici ?>) <i class="caret"></i></a>
<ul class="dropdown-menu" role="menu" id="idtecnici_ul">
<?php echo $checks ?>
<div class="btn-group pull-right">
<button id="selectalltecnici" onclick="<?php echo $allchecktecnici; ?>" class="btn btn-primary btn-xs" type="button"><?php echo _('Tutti'); ?></button>
<button id="deselectalltecnici" class="btn btn-danger btn-xs" type="button"><i class="fa fa-times"></i></button>
</div>
</ul>
</div>
<?php
// Zone
$checks = '';
$count = 0;
$total = 0;
$rs = $dbo->fetchArray('SELECT id, descrizione FROM an_zone ORDER BY descrizione ASC');
$total = count($rs);
for ($i = 0; $i < count($rs); ++$i) {
$attr = '';
foreach ($_SESSION['dashboard']['idzone'] as $idx => $val) {
if ($val == "'".$rs[$i]['id']."'") {
$attr = 'checked="checked"';
++$count;
}
}
$checks .= "<li><input type='checkbox' id='idzone_".$rs[$i]['id']."' value=\"".$rs[$i]['id'].'" '.$attr." onclick=\"session_set_array( 'dashboard,idzone', '".$rs[$i]['id']."' ); $('#calendar').fullCalendar('refetchEvents'); update_counter( 'idzone_count', $('#idzone_ul').find('input:checked').length );\"> <label for='idzone_".$rs[$i]['id']."'> ".$rs[$i]['descrizione']."</label></li>\n";
$allcheckzone .= "session_set_array( 'dashboard,idzone', '".$rs[$i]['id']."', 0 ); ";
}
if ($count == $total) {
$class = 'btn-success';
} elseif ($count == 0) {
$class = 'btn-danger';
} else {
$class = 'btn-warning';
}
if ($total == 0) {
$class = 'btn-primary disabled';
}
?>
<!-- ZONE -->
<div class="dropdown col-md-3">
<a class="btn <?php echo $class ?> btn-block" data-toggle="dropdown" href="javascript:;" id="idzone_count"><i class="fa fa-filter"></i> <?php echo _('Zone'); ?> (<?php echo $count.'/'.$total ?>) <i class="caret"></i></a>
<ul class="dropdown-menu" role="menu" id="idzone_ul">
<?php echo $checks ?>
<div class="btn-group pull-right">
<button id="selectallzone" onclick="<?php echo $allcheckzone; ?>" class="btn btn-primary btn-xs" type="button"><?php echo _('Tutti'); ?></button>
<button id="deselectallzone" class="btn btn-danger btn-xs" type="button"><i class="fa fa-times"></i></button>
</div>
</ul>
</div>
</div>
<br>
<?php
$qp = "SELECT id, idcontratto, richiesta, data_richiesta, 'intervento' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL
UNION SELECT id, idcontratto, '', data_scadenza, 'ordine', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY data_richiesta ASC";
$rsp = $dbo->fetchArray($qp);
if (!empty($rsp)) {
echo '
<div class="row">
<div class="col-xs-12 col-md-10">';
}
echo '
<div id="calendar"></div>';
if (!empty($rsp)) {
echo '
</div>
<div id="external-events" class="hidden-xs hidden-sm col-md-2">
<h4>'._('Interventi da pianificare').'</h4>';
foreach ($rsp as $r) {
echo '
<div class="fc-event " data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'">'.Translator::dateToLocale($r['data_richiesta']).' ('.$r['tipointervento'].')'.(!empty($r['richiesta']) ? ' - '.$r['richiesta'] : '').'</div>';
}
echo '
</div>
</div>';
}
$vista = get_var('Vista dashboard');
if ($vista == 'mese') {
$def = 'month';
} elseif ($vista == 'giorno') {
$def = 'agendaDay';
} else {
$def = 'agendaWeek';
}
?>
<script type="text/javascript">
$(document).ready(function() {
// Comandi seleziona tutti
$('#selectallstati').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
this.checked = true;
});
update_counter( 'idstati_count', $('#idstati_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#selectalltipi').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
this.checked = true;
});
update_counter( 'idtipi_count', $('#idtipi_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#selectalltecnici').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
this.checked = true;
});
update_counter( 'idtecnici_count', $('#idtecnici_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#selectallzone').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
this.checked = true;
});
update_counter( 'idzone_count', $('#idzone_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
// Comandi deseleziona tutti
$('#deselectallstati').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
if( this.checked == true ) session_set_array( 'dashboard,idstatiintervento', this.value, 1 );
this.checked = false;
});
update_counter( 'idstati_count', $('#idstati_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#deselectalltipi').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
if( this.checked == true ) session_set_array( 'dashboard,idtipiintervento', this.value, 1 );
this.checked = false;
});
update_counter( 'idtipi_count', $('#idtipi_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#deselectalltecnici').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
if( this.checked == true ) session_set_array( 'dashboard,idtecnici', this.value, 1 );
this.checked = false;
});
update_counter( 'idtecnici_count', $('#idtecnici_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
$('#deselectallzone').click(function(event) {
$(this).parent().parent().find('li input[type=checkbox]').each(function() { //loop through each checkbox
if( this.checked == true ) session_set_array( 'dashboard,idzone', this.value, 1 );
this.checked = false;
});
update_counter( 'idzone_count', $('#idzone_ul').find('input:checked').length );
$('#calendar').fullCalendar('refetchEvents');
});
// Creazione del calendario
create_calendar();
});
function create_calendar(){
$('#external-events .fc-event').each(function() {
// store data so the calendar knows to render an event upon drop
$(this).data('event', {
title: $.trim($(this).text()), // use the element's text as the event title
stick: false // maintain when user navigates (see docs on the renderEvent method)
});
// make the event draggable using jQuery UI
$(this).draggable({
zIndex: 999,
revert: true, // will cause the event to go back to its
revertDuration: 0 // original position after the drag
});
});
var calendar = $('#calendar').fullCalendar({
locale: globals.locale,
<?php
if (!get_var('Visualizzare la domenica sul calendario')) {
echo '
hiddenDays: [ 0 ],';
}
?>
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
timeFormat: 'H:mm',
slotLabelFormat: "H:mm",
slotDuration: '00:15:00',
defaultView: '<?php echo $def; ?>',
<?php
if (get_var('Abilitare orario lavorativo') == '1') {
echo "
minTime: '08:00:00',
maxTime: '20:00:00',";
}
?>
selectable: true,
lazyFetching: true,
selectHelper: true,
editable: true,
eventLimit: false, // allow "more" link when too many events
allDaySlot: false,
droppable: true,
loading: function(isLoading, view) {
if(isLoading) {
setTimeout("$('#mini-loader').show()", 1000);
} else {
setTimeout("$('#mini-loader').hide()", 1000);
}
},
<?php
if (Modules::getPermission($id_module) == 'rw') {
?>
drop: function(date, jsEvent, ui, resourceId) {
data = moment(date).format("YYYY-MM-DD");
ora_dal = moment(date).format("HH:mm");
ora_al = moment(date).add(1, 'hours').format("HH:mm");
var name = ($(this).data('ref') == 'ordine') ? 'idordineservizio' : 'idcontratto_riga';
launch_modal('<?php echo _('Pianifica intervento'); ?>', globals.rootdir + '/add.php?id_module=<?php echo Modules::getModule('Interventi')['id'] ?>&data='+data+'&orario_inizio='+ora_dal+'&orario_fine='+ora_al+'&ref=dashboard&idcontratto=' + $(this).data('idcontratto') + '&' + name + '=' + $(this).data('id'), 1);
$(this).remove();
$('#bs-popup').on('hidden.bs.modal', function () {
$('#calendar').fullCalendar('refetchEvents');
});
},
<?php
}
?>
select: function(start, end, allDay) {
data = moment(start).format("YYYY-MM-DD");
ora_dal = moment(start).format("HH:mm");
ora_al = moment(end).format("HH:mm");
<?php
if (Modules::getPermission($id_module) == 'rw') {
?>
launch_modal('<?php echo _('Aggiungi intervento'); ?>', globals.rootdir + '/add.php?id_module=<?php echo Modules::getModule('Interventi')['id'] ?>&ref=dashboard&data='+data+'&orario_inizio='+ora_dal+'&orario_fine='+ora_al, 1 );
<?php
}
?>
$('#calendar').fullCalendar('unselect');
},
events: {
url: globals.rootdir + "/modules/dashboard/ajaxreq.php?op=get_current_month",
type: 'GET',
error: function() {
alert('<?php echo _('Errore durante la creazione degli eventi'); ?>');
}
},
eventResize: function(event,dayDelta,minuteDelta,revertFunc) {
$.get(globals.rootdir + "/modules/dashboard/ajaxreq.php?op=update_intervento&id="+event.id+"&timeStart="+moment(event.start).format("YYYY-MM-DD HH:mm")+"&timeEnd="+moment(event.end).format("YYYY-MM-DD HH:mm"), function(data,response){
if( response=="success" ){
data = $.trim(data);
if(data != "ok"){
alert(data);
$('#calendar').fullCalendar('refetchEvents');
revertFunc();
}
else{
return false;
}
}
});
},
eventDrop: function(event,dayDelta,minuteDelta,revertFunc) {
$.get(globals.rootdir + "/modules/dashboard/ajaxreq.php?op=update_intervento&id="+event.id+"&timeStart="+moment(event.start).format("YYYY-MM-DD HH:mm")+"&timeEnd="+moment(event.end).format("YYYY-MM-DD HH:mm"), function(data,response){
if( response=="success" ){
data = $.trim(data);
if( data!="ok" ){
alert(data);
$('#calendar').fullCalendar('refetchEvents');
revertFunc();
}
else{
return false;
}
}
});
},
eventAfterRender: function(event, element) {
//alert(element.find('.fc-event-title').html();
element.find('.fc-title').html(event.title);
<?php if (get_var('Utilizzare i tooltip sul calendario') == '1') {
?>
$.get(globals.rootdir + "/modules/dashboard/ajaxreq.php?op=get_more_info&id="+event.id+"&timeStart="+moment(event.start).format("YYYY-MM-DD HH:mm")+"&timeEnd="+moment(event.end).format("YYYY-MM-DD HH:mm"), function(data,response){
if( response=="success" ){
data = $.trim(data);
if( data!="ok" ){
element.tooltipster({
content: data,
animation: 'grow',
contentAsHTML: true,
hideOnClick: true,
onlyOne: true,
speed: 200,
delay: 100,
maxWidth: 400,
theme: 'tooltipster-shadow',
touchDevices: true,
trigger: 'hover',
position: 'left'
});
}
else{
return false;
}
}
});
<?php
} ?>
}
});
}
</script>