Miglioramento struttura JS della Dashboard

This commit is contained in:
Thomas Zilio 2020-08-04 18:33:28 +02:00
parent f605e61b0f
commit 6d3a371205
7 changed files with 622 additions and 676 deletions

View File

@ -523,7 +523,7 @@ function alertPush() {
});
}
function salvaForm(button, form) {
function salvaForm(button, form, data = {}) {
return new Promise(function (resolve, reject) {
// Caricamento visibile nel pulsante
let restore = buttonLoading(button);
@ -541,7 +541,7 @@ function salvaForm(button, form) {
resolve(false);
}
submitAjax(form, {}, function (response) {
submitAjax(form, data, function (response) {
buttonRestore(button, restore);
resolve(true);
}, function (data) {

View File

@ -2,37 +2,65 @@
include_once __DIR__.'/../../core.php';
$modulo_interventi = Modules::get('Interventi');
if (!isset($user['idanagrafica'])) {
$user['idanagrafica'] = '';
}
switch (get('op')) {
switch (filter('op')) {
// Lettura calendario tecnici
case 'get_current_month':
$start = get('start');
$end = get('end');
case 'interventi_periodo':
$start = filter('start');
$end = filter('end');
$stati = (array) $_SESSION['dashboard']['idstatiintervento'];
$stati[] = prepare('');
$tipi = (array) $_SESSION['dashboard']['idtipiintervento'];
$zone = (array) $_SESSION['dashboard']['idzone'];
$tecnici = (array) $_SESSION['dashboard']['idtecnici'];
$query = 'SELECT in_interventi_tecnici.id, in_interventi_tecnici.idintervento, in_interventi.codice, colore, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT id FROM zz_files WHERE id_record=in_interventi.id AND id_module = '.Modules::get('Interventi')['id'].' LIMIT 1) AS have_attachments, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore_tecnico, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi_tecnici INNER JOIN (in_interventi LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento) ON in_interventi_tecnici.idintervento=in_interventi.id WHERE ( (in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).') OR (in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_inizio <= '.prepare($end).') OR (in_interventi_tecnici.orario_fine >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).')) AND idtecnico IN('.implode(',', $_SESSION['dashboard']['idtecnici']).') AND in_interventi.idstatointervento IN('.implode(',', $stati).') AND in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' HAVING idzona IN ('.implode(',', $_SESSION['dashboard']['idzone']).')';
$rs = $dbo->fetchArray($query);
$query = 'SELECT
in_interventi_tecnici.id,
in_interventi_tecnici.idintervento,
in_interventi.codice,
colore,
in_interventi_tecnici.idtecnico,
in_interventi_tecnici.orario_inizio,
in_interventi_tecnici.orario_fine,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = idtecnico) AS nome_tecnico,
(SELECT id FROM zz_files WHERE id_record = in_interventi.id AND id_module = '.prepare($modulo_interventi->id).' LIMIT 1) AS have_attachments,
(SELECT colore FROM an_anagrafiche WHERE idanagrafica = idtecnico) AS colore_tecnico, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente,
(SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi.idanagrafica) AS idzona
FROM in_interventi_tecnici
INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id
LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento
WHERE
(
(in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).')
OR (in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_inizio <= '.prepare($end).')
OR (in_interventi_tecnici.orario_fine >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).')
) AND idtecnico IN('.implode(',', $tecnici).')
AND in_interventi.idstatointervento IN('.implode(',', $stati).')
AND in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).')
'.Modules::getAdditionalsQuery('Interventi').'
HAVING idzona IN ('.implode(',', $zone).')';
$sessioni = $dbo->fetchArray($query);
$results = [];
foreach ($rs as $r) {
foreach ($sessioni as $sessione) {
$results[] = [
'id' => $r['id'],
'idintervento' => $r['idintervento'],
'idtecnico' => $r['idtecnico'],
'title' => '<b>Int. '.$r['codice'].'</b> '.$r['cliente'].'<br><b>'.tr('Tecnici').':</b> '.$r['nome_tecnico'].' '.(($r['have_attachments']) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : ''),
'start' => $r['orario_inizio'],
'end' => $r['orario_fine'],
'url' => $rootdir.'/editor.php?id_module='.Modules::get('Interventi')['id'].'&id_record='.$r['idintervento'],
'backgroundColor' => $r['colore'],
'textColor' => color_inverse($r['colore']),
'borderColor' => ($r['colore_tecnico'] == '#FFFFFF') ? color_darken($r['colore_tecnico'], 100) : $r['colore_tecnico'],
'id' => $sessione['id'],
'idintervento' => $sessione['idintervento'],
'idtecnico' => $sessione['idtecnico'],
'title' => '<b>Int. '.$sessione['codice'].'</b> '.$sessione['cliente'].'<br><b>'.tr('Tecnici').':</b> '.$sessione['nome_tecnico'].' '.(($sessione['have_attachments']) ? '<i class="fa fa-paperclip" aria-hidden="true"></i>' : ''),
'start' => $sessione['orario_inizio'],
'end' => $sessione['orario_fine'],
'url' => ROOTDIR.'/editor.php?id_module='.$modulo_interventi->id.'&id_record='.$sessione['idintervento'],
'backgroundColor' => $sessione['colore'],
'textColor' => color_inverse($sessione['colore']),
'borderColor' => ($sessione['colore_tecnico'] == '#FFFFFF') ? color_darken($sessione['colore_tecnico'], 100) : $sessione['colore_tecnico'],
'allDay' => false,
];
}
@ -41,11 +69,11 @@ switch (get('op')) {
break;
case 'update_intervento':
$sessione = get('id');
$idintervento = get('idintervento');
$orario_inizio = get('timeStart');
$orario_fine = get('timeEnd');
case 'modifica_intervento':
$sessione = filter('id');
$idintervento = filter('idintervento');
$orario_inizio = filter('timeStart');
$orario_fine = filter('timeEnd');
// Aggiornamento prezzo totale
$q = 'SELECT in_interventi_tecnici.prezzo_ore_unitario, idtecnico, in_statiintervento.is_completato FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento WHERE in_interventi.id='.prepare($idintervento).' AND in_statiintervento.is_completato = 0 '.Modules::getAdditionalsQuery('Interventi');
@ -69,19 +97,19 @@ switch (get('op')) {
break;
case 'get_more_info':
$id = get('id');
$timeStart = get('timeStart');
$timeEnd = get('timeEnd');
case 'info_intervento':
$id = filter('id');
$timeStart = filter('timeStart');
$timeEnd = filter('timeEnd');
//Lettura dati intervento di riferimento
// Lettura dati intervento di riferimento
$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');
$rs = $dbo->fetchArray($query);
if (!empty($rs)) {
$tecnici = [];
foreach ($rs as $r) {
$tecnici[] = $r['nome_tecnico'].' ('.Translator::timestampToLocale($r['orario_inizio']).' - '.Translator::timeToLocale($r['orario_fine']).')';
foreach ($rs as $sessione) {
$tecnici[] = $sessione['nome_tecnico'].' ('.Translator::timestampToLocale($sessione['orario_inizio']).' - '.Translator::timeToLocale($sessione['orario_fine']).')';
}
// Lettura dati intervento
@ -90,54 +118,53 @@ switch (get('op')) {
$desc_tipointervento = $rs[0]['tipo'];
$tooltip_text = '<b>'.tr('Numero intervento').'</b>: '.$rs[0]['codice'].'<br/>';
$tooltip_text .= '<b>'.tr('Ragione sociale').'</b>: '.nl2br($rs[0]['ragione_sociale']).'<br/>';
$tooltip = '<b>'.tr('Numero intervento').'</b>: '.$rs[0]['codice'].'<br/>';
$tooltip .= '<b>'.tr('Ragione sociale').'</b>: '.nl2br($rs[0]['ragione_sociale']).'<br/>';
if (!empty($rs[0]['telefono'])) {
$tooltip_text .= '<b>'.tr('Telefono').'</b>: '.nl2br($rs[0]['telefono']).'<br/>';
$tooltip .= '<b>'.tr('Telefono').'</b>: '.nl2br($rs[0]['telefono']).'<br/>';
}
if (!empty($rs[0]['cellulare'])) {
$tooltip_text .= '<b>'.tr('Cellulare').'</b>: '.nl2br($rs[0]['cellulare']).'<br/>';
$tooltip .= '<b>'.tr('Cellulare').'</b>: '.nl2br($rs[0]['cellulare']).'<br/>';
}
if (!empty($rs[0]['indirizzo']) || !empty($rs[0]['citta']) || !empty($rs[0]['provincia'])) {
$tooltip_text .= '<b>'.tr('Indirizzo').'</b>: '.nl2br($rs[0]['indirizzo'].' '.$rs[0]['citta'].' ('.$rs[0]['provincia'].')').'<br/>';
$tooltip .= '<b>'.tr('Indirizzo').'</b>: '.nl2br($rs[0]['indirizzo'].' '.$rs[0]['citta'].' ('.$rs[0]['provincia'].')').'<br/>';
}
if (!empty($rs[0]['note'])) {
$tooltip_text .= '<b>'.tr('Note').'</b>: '.nl2br($rs[0]['note']).'<br/>';
$tooltip .= '<b>'.tr('Note').'</b>: '.nl2br($rs[0]['note']).'<br/>';
}
$tooltip_text .= '<b>'.tr('Data richiesta').'</b>: '.Translator::timestampToLocale($rs[0]['data_richiesta']).'<br/>';
$tooltip .= '<b>'.tr('Data richiesta').'</b>: '.Translator::timestampToLocale($rs[0]['data_richiesta']).'<br/>';
$tooltip_text .= '<b>'.tr('Tipo intervento').'</b>: '.nl2br($desc_tipointervento).'<br/>';
$tooltip .= '<b>'.tr('Tipo intervento').'</b>: '.nl2br($desc_tipointervento).'<br/>';
$tooltip_text .= '<b>'.tr('Tecnici').'</b>: '.implode(', ', $tecnici).'<br/>';
$tooltip .= '<b>'.tr('Tecnici').'</b>: '.implode(', ', $tecnici).'<br/>';
if ($rs[0]['impianti'] != '') {
$tooltip_text .= '<b>'.tr('Impianti').'</b>: '.$rs[0]['impianti'].'<br/>';
$tooltip .= '<b>'.tr('Impianti').'</b>: '.$rs[0]['impianti'].'<br/>';
}
if ($rs[0]['richiesta'] != '') {
$tooltip_text .= '<b>'.tr('Richiesta').'</b>: '.nl2br($rs[0]['richiesta']).'<br/>';
$tooltip .= '<b>'.tr('Richiesta').'</b>: '.nl2br($rs[0]['richiesta']).'<br/>';
}
if ($rs[0]['descrizione'] != '') {
$tooltip_text .= '<b>'.tr('Descrizione').'</b>: '.nl2br($rs[0]['descrizione']).'<br/>';
$tooltip .= '<b>'.tr('Descrizione').'</b>: '.nl2br($rs[0]['descrizione']).'<br/>';
}
if ($rs[0]['informazioniaggiuntive'] != '') {
$tooltip_text .= '<b>'.tr('Informazioni aggiuntive').'</b>: '.nl2br($rs[0]['informazioniaggiuntive']).'<br/>';
$tooltip .= '<b>'.tr('Informazioni aggiuntive').'</b>: '.nl2br($rs[0]['informazioniaggiuntive']).'<br/>';
}
echo $tooltip_text;
echo $tooltip;
}
break;
break;
case 'load_intreventi':
$mese = $_GET['mese'];
case 'carica_interventi':
$mese = filter('mese');
// Righe inserite
$qp = "SELECT
@ -148,49 +175,47 @@ switch (get('op')) {
data_richiesta,
an_anagrafiche.ragione_sociale,
'promemoria' AS ref,
(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento
(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento = co_promemoria.idtipointervento) AS tipointervento
FROM co_promemoria
INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id
INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica
WHERE
idcontratto IN(SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1)) AND
idintervento IS NULL
INNER JOIN co_contratti ON co_promemoria.idcontratto = co_contratti.id
INNER JOIN an_anagrafiche ON co_contratti.idanagrafica = an_anagrafiche.idanagrafica
WHERE idintervento IS NULL AND
idcontratto IN (SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1))
ORDER BY data_richiesta ASC";
$promemoria_contratti = $dbo->fetchArray($qp);
$rsp = $dbo->fetchArray($qp);
$promemoria_interventi = $dbo->fetchArray("SELECT id, richiesta, id_contratto AS idcontratto, DATE_FORMAT(IF(data_scadenza IS NULL, data_richiesta, data_scadenza),'%m%Y') AS mese, IF(data_scadenza IS NULL, data_richiesta, data_scadenza)AS data_richiesta, data_scadenza, an_anagrafiche.ragione_sociale, 'intervento' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento=in_interventi.idtipointervento) AS tipointervento FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 ORDER BY data_richiesta ASC");
$interventi = $dbo->fetchArray("SELECT id, richiesta, id_contratto AS idcontratto, DATE_FORMAT(IF(data_scadenza IS NULL, data_richiesta, data_scadenza),'%m%Y') AS mese, IF(data_scadenza IS NULL, data_richiesta, data_scadenza)AS data_richiesta, data_scadenza, an_anagrafiche.ragione_sociale, 'intervento' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento=in_interventi.idtipointervento) AS tipointervento FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 ORDER BY data_richiesta ASC");
$rsp = array_merge($rsp, $interventi);
if (!empty($rsp)) {
$promemoria = array_merge($promemoria_contratti, $promemoria_interventi);
if (!empty($promemoria)) {
$prev_mese = '';
// Elenco interventi da pianificare
foreach ($rsp as $r) {
if ($r['mese'] == $mese) {
if (date('Ymd', strtotime($r['data_richiesta'])) < date('Ymd')) {
foreach ($promemoria as $sessione) {
if ($sessione['mese'] == $mese) {
if (date('Ymd', strtotime($sessione['data_richiesta'])) < date('Ymd')) {
$class = 'danger';
} else {
$class = 'primary';
}
echo '
<div class="fc-event fc-event-'.$class.'" data-id="'.$r['id'].'" data-idcontratto="'.$r['idcontratto'].'" data-ref="'.$r['ref'].'">'.(($r['ref'] == 'intervento') ? '<i class=\'fa fa-wrench pull-right\'></i>' : '<i class=\'fa fa-file-text-o pull-right\'></i>').'
<b>'.$r['ragione_sociale'].'</b><br>'.Translator::dateToLocale($r['data_richiesta']).' ('.$r['tipointervento'].')<div class="request" >'.(!empty($r['richiesta']) ? ' - '.$r['richiesta'] : '').'</div>'.(!empty($r['nomecontratto']) ? '<br><b>Contratto:</b> '.$r['nomecontratto'] : '').
(!empty($r['data_scadenza'] and $r['data_scadenza'] != '0000-00-00 00:00:00') ? '<br><small>'.tr('entro il: ').Translator::dateToLocale($r['data_scadenza']).'</small>' : '').
(($r['ref'] == 'intervento') ? (Modules::link('Interventi', $r['id'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>' : (Modules::link('Contratti', $r['idcontratto'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>').
<div class="fc-event fc-event-'.$class.'" data-id="'.$sessione['id'].'" data-idcontratto="'.$sessione['idcontratto'].'" data-ref="'.$sessione['ref'].'">'.(($sessione['ref'] == 'intervento') ? '<i class=\'fa fa-wrench pull-right\'></i>' : '<i class=\'fa fa-file-text-o pull-right\'></i>').'
<b>'.$sessione['ragione_sociale'].'</b><br>'.Translator::dateToLocale($sessione['data_richiesta']).' ('.$sessione['tipointervento'].')<div class="request" >'.(!empty($sessione['richiesta']) ? ' - '.$sessione['richiesta'] : '').'</div>'.(!empty($sessione['nomecontratto']) ? '<br><b>Contratto:</b> '.$sessione['nomecontratto'] : '').
(!empty($sessione['data_scadenza'] and $sessione['data_scadenza'] != '0000-00-00 00:00:00') ? '<br><small>'.tr('entro il: ').Translator::dateToLocale($sessione['data_scadenza']).'</small>' : '').
(($sessione['ref'] == 'intervento') ? (Modules::link('Interventi', $sessione['id'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>' : (Modules::link('Contratti', $sessione['idcontratto'], '<i class="fa fa-eye"></i>', null, 'title="'.tr('Visualizza scheda').'" class="btn btn-'.$class.' btn-xs pull-right"')).'<br>').
'</div>';
}
} ?>
}
echo '
<script type="text/javascript">
$(".request").shorten({
moreText: '<?php echo tr('Mostra tutto'); ?>',
lessText: '<?php echo tr('Comprimi'); ?>',
moreText: "'.tr('Mostra tutto').'",
lessText: "'.tr('Comprimi').'",
showChars : 200
});
</script>
<?php
</script>';
} else {
echo '<br><small class="help-block">'.tr('Non ci sono interventi da pianificare per questo mese').'</small>';
}

File diff suppressed because it is too large Load Diff

View File

@ -49,6 +49,14 @@ switch (post('op')) {
$intervento->codice_cig = post('codice_cig');
$intervento->save();
// Assegnazione dei tecnici all'intervento
$tecnici_assegnati = (array) post('tecnici_assegnati');
$dbo->sync('in_interventi_tecnici_assegnati', [
'id_intervento' => $id_record,
], [
'id_tecnico' => $tecnici_assegnati,
]);
// Notifica chiusura intervento
$stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => post('idstatointervento')]);
if (!empty($stato['notifica']) && !empty($stato['destinatari']) && $stato['idstatointervento'] != $record['idstatointervento']) {
@ -148,6 +156,14 @@ switch (post('op')) {
}
}
// Assegnazione dei tecnici all'intervento
$tecnici_assegnati = (array) post('tecnici_assegnati');
$dbo->sync('in_interventi_tecnici_assegnati', [
'id_intervento' => $id_record,
], [
'id_tecnico' => $tecnici_assegnati,
]);
if (post('ref') == 'dashboard') {
flash()->clearMessage('info');
flash()->clearMessage('warning');

View File

@ -4,15 +4,14 @@ use Modules\Interventi\Intervento;
include_once __DIR__.'/../../core.php';
// Rimuovo session usate sui select combinati (sedi, preventivi, contratti, impianti)
// Rimozione dei parametri di sessione usati sui select combinati (sedi, preventivi, contratti, impianti)
unset($_SESSION['superselect']['idanagrafica']);
unset($_SESSION['superselect']['idsede']);
// Se ho passato l'idanagrafica, carico il tipo di intervento di default
// Lettura dei parametri di interesse
$id_anagrafica = filter('idanagrafica');
$id_sede = filter('idsede');
$richiesta = filter('richiesta');
$impianti = [];
$origine_dashboard = get('ref') !== null;
$module_anagrafiche = Modules::get('Anagrafiche');
@ -148,18 +147,56 @@ if (!empty($id_intervento)) {
}
echo '
<!-- DATI CLIENTE -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Dati cliente').'</h3>
</div>
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "idanagrafica", "required": 1, "value": "'.$id_anagrafica.'", "ajax-source": "clienti", "icon-after": "add|'.$module_anagrafiche['id'].'|tipoanagrafica=Cliente&readonly_tipo=1", "readonly": "'.(empty($id_anagrafica) ? 0 : 1).'" ]}
</div>
<div class="panel-body">
<!-- RIGA 1 -->
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "value": "'.$id_preventivo.'", "ajax-source": "preventivi", "readonly": "'.(empty($id_contratto) ? 0 : 1).'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "value": "'.$id_contratto.'", "ajax-source": "contratti", "readonly": "'.(empty($id_contratto) ? 0 : 1).'" ]}
</div>
</div>
<div class="row">
<div class="col-md-4">
{[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "required": 1, "value": "'.($data_richiesta ?: '-now-').'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$id_tipo.'", "ajax-source": "tipiintervento" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "'.$id_stato.'" ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Richiesta').'", "name": "richiesta", "required": 1, "value": "'.$richiesta.'", "extra": "style=\'max-height:80px;\'" ]}
</div>
</div>
<!-- DATI AGGIUNTIVI -->
<div class="box box-warning collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Dettagli aggiuntivi').'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "idanagrafica", "required": 1, "value": "'.$id_anagrafica.'", "ajax-source": "clienti", "icon-after": "add|'.$module_anagrafiche['id'].'|tipoanagrafica=Cliente&readonly_tipo=1", "readonly": "'.(empty($id_anagrafica) ? 0 : 1).'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Zona').'", "name": "idzona", "values": "query=SELECT id, CONCAT_WS(\' - \', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "'.$id_zona.'", "placeholder": "'.tr('Nessuna zona').'", "help":"'.tr('La zona viene definita automaticamente in base al cliente selezionato').'.", "extra": "readonly", "value": "'.$id_zona.'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Sede destinazione').'", "name": "idsede_destinazione", "value": "'.$id_sede.'", "ajax-source": "sedi" ]}
@ -170,69 +207,43 @@ echo '
</div>
</div>
<!-- RIGA 2 -->
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Zona').'", "name": "idzona", "values": "query=SELECT id, CONCAT_WS(\' - \', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "'.$id_zona.'", "placeholder": "'.tr('Nessuna zona').'", "help":"'.tr('La zona viene definita automaticamente in base al cliente selezionato').'.", "extra": "readonly", "value": "'.$id_zona.'" ]}
{[ "type": "timestamp", "label": "'.tr('Data/ora scadenza').'", "name": "data_scadenza", "required": 0, "value": "'.$data_scadenza.'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "value": "'.$id_preventivo.'", "ajax-source": "preventivi", "readonly": "'.(empty($id_contratto) ? 0 : 1).'" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "value": "'.$id_contratto.'", "ajax-source": "contratti", "readonly": "'.(empty($id_contratto) ? 0 : 1).'" ]}
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Impianto').'", "multiple": 1, "name": "idimpianti[]", "value": "'.$impianti_collegati.'", "ajax-source": "impianti-cliente", "icon-after": "add|'.Modules::get('Impianti')['id'].'|source=Attività" ]}
</div>
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Componenti').'", "multiple": 1, "name": "componenti[]", "placeholder": "'.tr('Seleziona prima un impianto').'", "ajax-source": "componenti" ]}
</div>
</div>
</div>
</div>
<!-- DATI INTERVENTO -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Dati intervento').'</h3>
<!-- ASSEGNAZIONE TECNICI -->
<div class="box box-info collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Assegnazione tecnici').'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-plus"></i>
</button>
</div>
</div>
<div class="panel-body">
<!-- RIGA 3 -->
<div class="row">
<div class="col-md-3">
{[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "required": 1, "value": "'.($data_richiesta ?: '-now-').'" ]}
</div>
<div class="col-md-3">
{[ "type": "timestamp", "label": "'.tr('Data/ora scadenza').'", "name": "data_scadenza", "required": 0, "value": "'.$data_scadenza.'" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Tipo attività').'", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$id_tipo.'", "ajax-source": "tipiintervento" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "'.$id_stato.'" ]}
</div>
</div>
<!-- RIGA 5 -->
<div class="row">
<div class="box-body">
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Richiesta').'", "name": "richiesta", "required": 1, "value": "'.$richiesta.'", "extra": "style=\'max-height:80px;\'" ]}
{[ "type": "select", "label": "'.tr('Tecnici assegnati').'", "multiple": "1", "name": "tecnici_assegnati[]", "ajax-source": "tecnici", "value": "", "icon-after": "add|'.$module_anagrafiche['id'].'|tipoanagrafica=Tecnico" ]}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- DATI INTERVENTO -->
<!-- ORE DI LAVORO -->
<div class="box box-primary collapsable '.($origine_dashboard ? '' : 'collapsed-box').'">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Ore di lavoro').'</h3>
@ -284,14 +295,12 @@ if (!empty($id_intervento)) {
input("idimpianti").disable();
input("componenti").disable();
input("idanagrafica").disable();
input("idanagrafica").find("button").disable();
input("idclientefinale").disable();
input("idzona").disable();
input("idtipointervento").disable();
input("idstatointervento").disable();
input("richiesta").disable();
input("data_richiesta").disable();
input("impianti").find("button").disable();
});
</script>';
}
@ -305,7 +314,6 @@ if (!empty($id_contratto) && !empty($id_promemoria_contratto)) {
input("idclientefinale").disable();
input("idzona").disable();
input("idtipointervento").disable();
input("impianti").find("button").disable();
});
</script>';
}
@ -349,8 +357,8 @@ echo '
updateSelectOption("idanagrafica", $(this).val());
session_set("superselect,idanagrafica", $(this).val(), 0);
var value = !$(this).val();
var placeholder = value ? "'.tr('Seleziona prima un cliente').'" : "'.tr("Seleziona un'opzione").'";
let value = !$(this).val();
let placeholder = value ? "'.tr('Seleziona prima un cliente').'" : "'.tr("Seleziona un'opzione").'";
sede.setDisabled(value)
.getElement().selectReset(placeholder);
@ -370,7 +378,7 @@ echo '
// Impostazione del tipo intervento da anagrafica
input("idtipointervento").getElement()
.selectSetNew($(this).selectData().idtipointervento, $(this).selectData().idtipointervento_descrizione);
.selectSetNew(data.idtipointervento, data.idtipointervento_descrizione);
}
});
@ -452,7 +460,9 @@ if (filter('orario_fine') !== null) {
}
// Submit dinamico tramite AJAX
let valid = await salvaForm(button, "#add-form");
let valid = await salvaForm(button, "#add-form", {
id_module: "'.$id_module.'", // Fix creazione da Dashboard
});
if (!valid) return;
// Se l\'aggiunta intervento proviene dalla scheda di pianificazione ordini di servizio della dashboard, la ricarico

View File

@ -3,6 +3,7 @@
include_once __DIR__.'/../../core.php';
$block_edit = $record['flag_completato'];
$module_anagrafiche = Modules::get('Anagrafiche');
unset($_SESSION['superselect']['idanagrafica']);
unset($_SESSION['superselect']['idsede_partenza']);
@ -125,6 +126,16 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = false;
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "$idstatointervento$", "class": "unblockable" ]}
</div>
<?php
$tecnici_assegnati = $database->fetchArray('SELECT id_tecnico FROM in_interventi_tecnici_assegnati WHERE id_intervento = '.prepare($id_record));
$tecnici_assegnati = array_column($tecnici_assegnati, 'id_tecnico');
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Tecnici assegnati').'", "multiple": "1", "name": "tecnici_assegnati[]", "ajax-source": "tecnici", "value": "'.implode(',', $tecnici_assegnati).'", "icon-after": "add|'.$module_anagrafiche['id'].'|tipoanagrafica=Tecnico" ]}
</div>';
?>
</div>
<!-- RIGA 5 -->

View File

@ -153,8 +153,8 @@ INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`
-- Impostazioni relative gli stati delle Attività
UPDATE `zz_settings` SET `sezione` = 'Attività' WHERE `sezione` = 'Interventi';
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES
(NULL, 'Stato dell''attività alla chiusura', '1', 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'Attività', 1, 'Stato in cui spostare l''attitivà a seguito della chiusura'),
(NULL, 'Stato dell''attività dopo la firma', '1', 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'Attività', 2, 'Stato in cui spostare l''attitivà dopo la firma del cliente');
(NULL, 'Stato dell''attività alla chiusura', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', '1', 'Attività', 1, 'Stato in cui spostare l''attitivà a seguito della chiusura'),
(NULL, 'Stato dell''attività dopo la firma', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', '1', 'Attività', 2, 'Stato in cui spostare l''attitivà dopo la firma del cliente');
-- Aggiunta risorsa per il download degli allegati
INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `enabled`) VALUES (NULL, 'v1', 'retrieve', 'allegato', 'API\\Common\\Allegato', '1');
@ -222,3 +222,7 @@ UPDATE `co_promemoria` SET `data_richiesta` = NULL WHERE `data_richiesta` = '000
UPDATE `co_preventivi` SET `data_rifiuto` = NULL WHERE `data_rifiuto` = '0000-00-00' OR `data_rifiuto` = '0000-00-00 00:00:00';
UPDATE `co_contratti` SET `data_rifiuto` = NULL WHERE `data_rifiuto` = '0000-00-00' OR `data_rifiuto` = '0000-00-00 00:00:00';
UPDATE `my_impianto_componenti` SET `data_sostituzione` = NULL WHERE `data_sostituzione` = '0000-00-00' OR `data_sostituzione` = '0000-00-00 00:00:00';
-- Impostazioni per i tecnici assegnati delle Attività
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES
(NULL, 'Mostra promemoria attività ai soli Tecnici assegnati', '1', 'boolean', '1', 'Attività', 14);