Compare commits

...

6 Commits

4 changed files with 146 additions and 109 deletions

View File

@ -116,7 +116,7 @@ function orderValue($table, $field, $id)
*/ */
function reorderRows($table, $field, $id) function reorderRows($table, $field, $id)
{ {
$righe = database()->select($table, 'id', [$field => $id]); $righe = database()->select($table, 'id', [$field => $id], ['order' => 'ASC']);
$i = 1; $i = 1;
foreach ($righe as $riga) { foreach ($righe as $riga) {

View File

@ -260,14 +260,14 @@ class CSV extends CSVImporter
$dati_sede = []; $dati_sede = [];
foreach ($campi_sede as $field) { foreach ($campi_sede as $field) {
if (isset($record[$field])) { if (isset($record[$field])) {
$dati_sede[$field] = $record[$field]; $dati_sede[$field] = trim($record[$field]);
unset($record[$field]); unset($record[$field]);
} }
} }
// Ricerca di eventuale anagrafica corrispondente sulla base del campo definito come primary_key (es. codice) // Ricerca di eventuale anagrafica corrispondente sulla base del campo definito come primary_key (es. codice)
if (!empty($primary_key)) { if (!empty($primary_key)) {
$anagrafica = Anagrafica::where($primary_key, '=', $record[$primary_key])->first(); $anagrafica = Anagrafica::where($primary_key, '=', trim($record[$primary_key]))->first();
} }
// Se non trovo nessuna anagrafica corrispondente, allora la creo // Se non trovo nessuna anagrafica corrispondente, allora la creo

View File

@ -108,6 +108,7 @@ switch (filter('op')) {
]; ];
} }
## Box su allDay
$query = 'SELECT $query = 'SELECT
co_preventivi.id, co_preventivi.id,
co_preventivi.nome, co_preventivi.nome,
@ -125,38 +126,41 @@ switch (filter('op')) {
) )
AND AND
co_statipreventivi.is_pianificabile=1'; co_statipreventivi.is_pianificabile=1';
$sessioni = $dbo->fetchArray($query);
foreach ($sessioni as $sessione) { $alldays = $dbo->fetchArray($query);
if(!empty($sessione['data_accettazione']) && $sessione['data_accettazione']!='0000-00-00'){
foreach ($alldays as $preventivo) {
if(!empty($preventivo['data_accettazione']) && $preventivo['data_accettazione']!='0000-00-00'){
$results[] = [ $results[] = [
'id' => $sessione['id'], 'id' => $modulo_preventivi->id.'_'.$preventivo['id'],
'idintervento' => $sessione['id'], 'idintervento' => $preventivo['id'],
'idtecnico' => "", 'idtecnico' => "",
'title' => '<b>Prev. '.$sessione['numero'].'</b> '.$sessione['nome'].''.(($sessione['have_attachments']) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$sessione['cliente'], 'title' => '<b>Accettazione prev. '.$preventivo['numero'].'</b> '.$preventivo['nome'].''.(($preventivo['have_attachments']) ? ' <i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$preventivo['cliente'],
'start' => $sessione['data_accettazione'], 'start' => $preventivo['data_accettazione'],
'end' => $sessione['data_accettazione'], 'end' => $preventivo['data_accettazione'],
'url' => base_path().'/editor.php?id_module='.$modulo_preventivi->id.'&id_record='.$sessione['id'], 'url' => base_path().'/editor.php?id_module='.$modulo_preventivi->id.'&id_record='.$preventivo['id'],
'backgroundColor' => "#ff7f50", 'backgroundColor' => "#ff7f50",
'textColor' => color_inverse("#ff7f50"), 'textColor' => color_inverse("#ff7f50"),
'borderColor' => "#ff7f50", 'borderColor' => "#ff7f50",
'allDay' => true, 'allDay' => true,
'eventStartEditable' => false,
]; ];
} }
if($sessione['data_accettazione'] != $sessione['data_conclusione'] && $sessione['data_conclusione']!='0000-00-00' && !empty($sessione['data_conclusione']) ){ if($preventivo['data_accettazione'] != $preventivo['data_conclusione'] && $preventivo['data_conclusione']!='0000-00-00' && !empty($preventivo['data_conclusione']) ){
$results[] = [ $results[] = [
'id' => $sessione['id'], 'id' => $modulo_preventivi->id.'_'.$preventivo['id'],
'idintervento' => $sessione['id'], 'idintervento' => $preventivo['id'],
'idtecnico' => "", 'idtecnico' => "",
'title' => '<b>Prev. '.$sessione['numero'].'</b> '.$sessione['nome'].''.(($sessione['have_attachments']) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$sessione['cliente'], 'title' => '<b>Conclusione prev. '.$preventivo['numero'].'</b> '.$preventivo['nome'].''.(($preventivo['have_attachments']) ? ' <i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$preventivo['cliente'],
'start' => $sessione['data_conclusione'], 'start' => $preventivo['data_conclusione'],
'end' => $sessione['data_conclusione'], 'end' => $preventivo['data_conclusione'],
'url' => base_path().'/editor.php?id_module='.$modulo_preventivi->id.'&id_record='.$sessione['id'], 'url' => base_path().'/editor.php?id_module='.$modulo_preventivi->id.'&id_record='.$preventivo['id'],
'backgroundColor' => "#ff7f50", 'backgroundColor' => "#ff7f50",
'textColor' => color_inverse("#ff7f50"), 'textColor' => color_inverse("#ff7f50"),
'borderColor' => "#ff7f50", 'borderColor' => "#ff7f50",
'allDay' => true, 'allDay' => true,
'eventStartEditable' => false,
]; ];
} }
} }
@ -193,77 +197,102 @@ switch (filter('op')) {
break; break;
case 'info_intervento': case 'tooltip_info':
$id = filter('id'); $id = filter('id');
$allDay = filter('allDay');
$timeStart = filter('timeStart'); $timeStart = filter('timeStart');
$timeEnd = filter('timeEnd'); $timeEnd = filter('timeEnd');
// Lettura dati intervento di riferimento if (empty($allday)){
$query = 'SELECT in_interventi_tecnici.idintervento, in_interventi.id, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi'); // Lettura dati intervento di riferimento
$rs = $dbo->fetchArray($query); $query = 'SELECT in_interventi_tecnici.idintervento, in_interventi.id, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi');
if (!empty($rs)) {
$tecnici = [];
foreach ($rs as $sessione) {
$tecnici[] = $sessione['nome_tecnico'].' ('.Translator::timestampToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_fine']).')';
}
// Lettura dati intervento
$query = 'SELECT *, in_interventi.codice, idstatointervento AS parent_idstato, in_interventi.idtipointervento AS parent_idtipo, (SELECT GROUP_CONCAT(CONCAT(matricola, " - ", nome) SEPARATOR ", ") FROM my_impianti INNER JOIN my_impianti_interventi ON my_impianti.id=my_impianti_interventi.idimpianto WHERE my_impianti_interventi.idintervento='.prepare($id).' GROUP BY my_impianti_interventi.idintervento) AS impianti, (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=parent_idstato) AS stato, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=parent_idtipo) AS tipo, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi LEFT JOIN in_interventi_tecnici ON in_interventi.id =in_interventi_tecnici.idintervento LEFT JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
//correggo info indirizzo citta cap provincia con quelle della sede di destinazione if (!empty($rs)) {
if (!empty($rs[0]['idsede_destinazione'])) { $tecnici = [];
$sede = $database->fetchOne('SELECT * FROM an_sedi WHERE id = '.prepare($rs[0]['idsede_destinazione'])); foreach ($rs as $sessione) {
$rs[0]['indirizzo'] = $sede['nomesede'].'<br>'.$sede['indirizzo']; $tecnici[] = $sessione['nome_tecnico'].' ('.Translator::timestampToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_fine']).')';
$rs[0]['cap'] = $sede['cap']; }
$rs[0]['citta'] = $sede['citta'];
$rs[0]['provincia'] = $sede['provincia']; // Lettura dati intervento
} $query = 'SELECT *, in_interventi.codice, idstatointervento AS parent_idstato, in_interventi.idtipointervento AS parent_idtipo, (SELECT GROUP_CONCAT(CONCAT(matricola, " - ", nome) SEPARATOR ", ") FROM my_impianti INNER JOIN my_impianti_interventi ON my_impianti.id=my_impianti_interventi.idimpianto WHERE my_impianti_interventi.idintervento='.prepare($id).' GROUP BY my_impianti_interventi.idintervento) AS impianti, (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=parent_idstato) AS stato, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=parent_idtipo) AS tipo, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi LEFT JOIN in_interventi_tecnici ON in_interventi.id =in_interventi_tecnici.idintervento LEFT JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi');
$rs = $dbo->fetchArray($query);
$desc_tipointervento = $rs[0]['tipo'];
//correggo info indirizzo citta cap provincia con quelle della sede di destinazione
$tooltip = '<b>'.tr('Numero intervento').'</b>: '.$rs[0]['codice'].'<br/>'; if (!empty($rs[0]['idsede_destinazione'])) {
$tooltip .= '<b>'.tr('Ragione sociale').'</b>: '.nl2br($rs[0]['ragione_sociale']).'<br/>'; $sede = $database->fetchOne('SELECT * FROM an_sedi WHERE id = '.prepare($rs[0]['idsede_destinazione']));
$rs[0]['indirizzo'] = $sede['nomesede'].'<br>'.$sede['indirizzo'];
if (!empty($rs[0]['telefono'])) { $rs[0]['cap'] = $sede['cap'];
$tooltip .= '<b>'.tr('Telefono').'</b>: '.nl2br($rs[0]['telefono']).'<br/>'; $rs[0]['citta'] = $sede['citta'];
} $rs[0]['provincia'] = $sede['provincia'];
}
if (!empty($rs[0]['cellulare'])) {
$tooltip .= '<b>'.tr('Cellulare').'</b>: '.nl2br($rs[0]['cellulare']).'<br/>'; $desc_tipointervento = $rs[0]['tipo'];
}
$tooltip = '<b>'.tr('Numero intervento').'</b>: '.$rs[0]['codice'].'<br/>';
if (!empty($rs[0]['indirizzo']) || !empty($rs[0]['citta']) || !empty($rs[0]['provincia']) || !empty($rs[0]['cap'])) { $tooltip .= '<b>'.tr('Ragione sociale').'</b>: '.nl2br($rs[0]['ragione_sociale']).'<br/>';
$tooltip .= '<b>'.tr('Indirizzo').'</b>: '.nl2br($rs[0]['indirizzo'].' - '.$rs[0]['cap'].' '.$rs[0]['citta'].' ('.$rs[0]['provincia'].')').'<br/>';
} if (!empty($rs[0]['telefono'])) {
$tooltip .= '<b>'.tr('Telefono').'</b>: '.nl2br($rs[0]['telefono']).'<br/>';
if (!empty($rs[0]['note'])) { }
$tooltip .= '<b>'.tr('Note').'</b>: '.nl2br($rs[0]['note']).'<br/>';
} if (!empty($rs[0]['cellulare'])) {
$tooltip .= '<b>'.tr('Cellulare').'</b>: '.nl2br($rs[0]['cellulare']).'<br/>';
$tooltip .= '<b>'.tr('Data richiesta').'</b>: '.Translator::timestampToLocale($rs[0]['data_richiesta']).'<br/>'; }
$tooltip .= '<b>'.tr('Tipo intervento').'</b>: '.nl2br($desc_tipointervento).'<br/>'; if (!empty($rs[0]['indirizzo']) || !empty($rs[0]['citta']) || !empty($rs[0]['provincia']) || !empty($rs[0]['cap'])) {
$tooltip .= '<b>'.tr('Indirizzo').'</b>: '.nl2br($rs[0]['indirizzo'].' - '.$rs[0]['cap'].' '.$rs[0]['citta'].' ('.$rs[0]['provincia'].')').'<br/>';
$tooltip .= '<b>'.tr('Tecnici').'</b>: '.implode(', ', $tecnici).'<br/>'; }
if ($rs[0]['impianti'] != '') { if (!empty($rs[0]['note'])) {
$tooltip .= '<b>'.tr('Impianti').'</b>: '.$rs[0]['impianti'].'<br/>'; $tooltip .= '<b>'.tr('Note').'</b>: '.nl2br($rs[0]['note']).'<br/>';
} }
if ($rs[0]['richiesta'] != '') { $tooltip .= '<b>'.tr('Data richiesta').'</b>: '.Translator::timestampToLocale($rs[0]['data_richiesta']).'<br/>';
$tooltip .= '<b>'.tr('Richiesta').'</b>: '.nl2br($rs[0]['richiesta']).'<br/>';
} $tooltip .= '<b>'.tr('Tipo intervento').'</b>: '.nl2br($desc_tipointervento).'<br/>';
if ($rs[0]['descrizione'] != '') { $tooltip .= '<b>'.tr('Tecnici').'</b>: '.implode(', ', $tecnici).'<br/>';
$tooltip .= '<b>'.tr('Descrizione').'</b>: '.nl2br($rs[0]['descrizione']).'<br/>';
} if ($rs[0]['impianti'] != '') {
$tooltip .= '<b>'.tr('Impianti').'</b>: '.$rs[0]['impianti'].'<br/>';
if ($rs[0]['informazioniaggiuntive'] != '') { }
$tooltip .= '<b>'.tr('Informazioni aggiuntive').'</b>: '.nl2br($rs[0]['informazioniaggiuntive']).'<br/>';
if ($rs[0]['richiesta'] != '') {
$tooltip .= '<b>'.tr('Richiesta').'</b>: '.nl2br($rs[0]['richiesta']).'<br/>';
}
if ($rs[0]['descrizione'] != '') {
$tooltip .= '<b>'.tr('Descrizione').'</b>: '.nl2br($rs[0]['descrizione']).'<br/>';
}
if ($rs[0]['informazioniaggiuntive'] != '') {
$tooltip .= '<b>'.tr('Informazioni aggiuntive').'</b>: '.nl2br($rs[0]['informazioniaggiuntive']).'<br/>';
}
}else{
$query = 'SELECT
co_preventivi.nome,
co_preventivi.numero,
co_preventivi.data_accettazione,
co_preventivi.data_conclusione,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS cliente,
(SELECT id FROM zz_files WHERE id_record = '.prepare($id).' AND id_module = '.prepare($modulo_preventivi->id).' LIMIT 1) AS have_attachments
FROM co_preventivi
LEFT JOIN co_statipreventivi ON co_preventivi.idstato = co_statipreventivi.id
WHERE co_preventivi.id='.prepare($id);
$rs = $dbo->fetchArray($query);
$tooltip = '<b>Prev. '.$rs[0]['numero'].'</b> '.$rs[0]['nome'].''.(($rs[0]['have_attachments']) ? ' <i class="fa fa-paperclip" aria-hidden="true"></i>' : '').'<br><b>'.tr('Cliente').':</b> '.$rs[0]['cliente'];
} }
echo $tooltip; echo $tooltip;
} }
break; break;

View File

@ -543,7 +543,6 @@ echo '
} else { } else {
name = "id_intervento"; name = "id_intervento";
} }
openModal(globals.dashboard.drop.title, globals.dashboard.drop.url + "&data=" + data + "&orario_inizio=" + ora_dal + "&orario_fine=" + ora_al + "&ref=dashboard&idcontratto=" + $(this).data("idcontratto") + "&" + name + "=" + $(this).data("id") + "&id_tecnico=" + $(this).data("id_tecnico")); openModal(globals.dashboard.drop.title, globals.dashboard.drop.url + "&data=" + data + "&orario_inizio=" + ora_dal + "&orario_fine=" + ora_al + "&ref=dashboard&idcontratto=" + $(this).data("idcontratto") + "&" + name + "=" + $(this).data("id") + "&id_tecnico=" + $(this).data("id_tecnico"));
// Ricaricamento dei dati alla chiusura del modal // Ricaricamento dei dati alla chiusura del modal
@ -560,37 +559,45 @@ echo '
select: function(start, end, allDay) { // info select: function(start, end, allDay) { // info
// let start = info.start; // let start = info.start;
// let end = info.end; // let end = info.end;
let is_allDay = !start.hasTime() && !end.hasTime();
let data = moment(start).format("YYYY-MM-DD"); if (is_allDay!==true){
let data_fine = moment(end).format("YYYY-MM-DD"); let data = moment(start).format("YYYY-MM-DD");
let orario_inizio = moment(start).format("HH:mm"); let data_fine = moment(end).format("YYYY-MM-DD");
let orario_fine = moment(end).format("HH:mm"); let orario_inizio = moment(start).format("HH:mm");
let orario_fine = moment(end).format("HH:mm");
// Fix selezione di un giorno avanti per vista mensile // Fix selezione di un giorno avanti per vista mensile
if (globals.dashboard.calendar.fullCalendar("getView").name == "month") { if (globals.dashboard.calendar.fullCalendar("getView").name == "month") {
data_fine = moment(end).subtract(1, "days").format("YYYY-MM-DD"); data_fine = moment(end).subtract(1, "days").format("YYYY-MM-DD");
}
openModal(globals.dashboard.select.title, globals.dashboard.select.url + "&ref=dashboard&data=" + data + "&data_fine=" + data_fine + "&orario_inizio=" + orario_inizio + "&orario_fine=" + orario_fine);
} }
openModal(globals.dashboard.select.title, globals.dashboard.select.url + "&ref=dashboard&data=" + data + "&data_fine=" + data_fine + "&orario_inizio=" + orario_inizio + "&orario_fine=" + orario_fine);
}, },
editable: globals.dashboard.write_permission, editable: globals.dashboard.write_permission,
eventDrop: function(event, delta, revertFunc ) {// info eventDrop: function(event, delta, revertFunc ) {// info
// let event = info.event; // let event = info.event;
$.post(globals.dashboard.load_url, { if (event.allDay!==true){
op: "modifica_intervento", $.post(globals.dashboard.load_url, {
id: event.id, op: "modifica_intervento",
idintervento: event.idintervento, id: event.id,
timeStart: moment(event.start).format("YYYY-MM-DD HH:mm"), idintervento: event.idintervento,
timeEnd: moment(event.end).format("YYYY-MM-DD HH:mm") timeStart: moment(event.start).format("YYYY-MM-DD HH:mm"),
}, function (data, response) { timeEnd: moment(event.end).format("YYYY-MM-DD HH:mm")
data = $.trim(data); }, function (data, response) {
if (response !== "success" || data !== "ok") { data = $.trim(data);
swal("'.tr('Errore').'", data, "error"); if (response !== "success" || data !== "ok") {
revertFunc(); // info.revert(); swal("'.tr('Errore').'", data, "error");
} revertFunc(); // info.revert();
}); }
});
}else{
revertFunc();
}
}, },
eventResize: function(event, dayDelta, minuteDelta, revertFunc) { // info eventResize: function(event, dayDelta, minuteDelta, revertFunc) { // info
// let event = info.event; // let event = info.event;
@ -614,10 +621,10 @@ echo '
eventAfterRender: function(event, element) { eventAfterRender: function(event, element) {
// let event = info.event; // let event = info.event;
// let element = $(info.el); // let element = $(info.el);
element.find(".fc-title").html(event.title); element.find(".fc-title").html(event.title);
let id_intervento = event.idintervento; let id_intervento = event.idintervento;
if (globals.dashboard.tooltip == 1) {
if (globals.dashboard.tooltip == 1 && event.allDay!==true ) {
element.tooltipster({ element.tooltipster({
content: "'.tr('Caricamento...').'", content: "'.tr('Caricamento...').'",
animation: "grow", animation: "grow",
@ -636,8 +643,9 @@ echo '
if ($origin.data("loaded") !== true) { if ($origin.data("loaded") !== true) {
$.post(globals.dashboard.load_url, { $.post(globals.dashboard.load_url, {
op: "info_intervento", op: "tooltip_info",
id: id_intervento, id: id_intervento,
allDay: event.allDay,
}, function (data, response) { }, function (data, response) {
instance.content(data); instance.content(data);