diff --git a/modules/impianti/ajax/select.php b/modules/impianti/ajax/select.php index 2587fc5bf..47e0491bc 100755 --- a/modules/impianti/ajax/select.php +++ b/modules/impianti/ajax/select.php @@ -49,6 +49,11 @@ switch ($resource) { $where[] = 'my_impianti.idsede='.prepare($superselect['idsede_destinazione'] ?: 0); } + + if (!empty($superselect['idintervento'])) { + $where[] = 'my_impianti.id NOT IN(SELECT idimpianto FROM my_impianti_interventi WHERE idintervento='.prepare($superselect['idintervento']).')'; + } + if (!empty($search)) { $search_fields[] = 'my_impianti.nome LIKE '.prepare('%'.$search.'%'); $search_fields[] = 'my_impianti.matricola LIKE '.prepare('%'.$search.'%'); diff --git a/plugins/impianti_intervento/actions.php b/plugins/impianti_intervento/actions.php new file mode 100644 index 000000000..e2aff50f7 --- /dev/null +++ b/plugins/impianti_intervento/actions.php @@ -0,0 +1,93 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +use Modules\Checklists\Check; + +$operazione = filter('op'); + +switch ($operazione) { + case 'add_impianto': + if (post('id_impianto')) { + $dbo->query('INSERT INTO my_impianti_interventi(idimpianto, idintervento) VALUES('.prepare(post('id_impianto')).', '.prepare($id_record).')'); + + $checks_impianti = $dbo->fetchArray('SELECT * FROM zz_checks WHERE id_module = '.prepare(Modules::get('Impianti')['id']).' AND id_record = '.prepare(post('id_impianto'))); + foreach ($checks_impianti as $check_impianto) { + $id_parent_new = null; + if ($check_impianto['id_parent']) { + $parent = $dbo->selectOne('zz_checks', '*', ['id' => $check_impianto['id_parent']]); + $id_parent_new = $dbo->selectOne('zz_checks', '*', ['content' => $parent['content'], 'id_module' => $id_module, 'id_record' => $id_record])['id']; + } + $check = Check::build($user, $structure, $id_record, $check_impianto['content'], $id_parent_new, $check_impianto['is_titolo'], $check_impianto['order'], Modules::get('Impianti')['id'], post('id_impianto')); + $check->id_module = $id_module; + $check->id_plugin = $id_plugin; + $check->note = $check_impianto['note']; + $check->save(); + } + + flash()->info(tr('Impianto aggiunto correttamente!')); + } else { + flash()->warning(tr('Selezionare un impianto!')); + } + + break; + + case 'update_impianto': + $components = (array) post('componenti'); + $note = post('note'); + $id_impianto = post('id_impianto'); + + $dbo->query('DELETE FROM my_componenti_interventi WHERE id_componente IN (SELECT id FROM my_componenti WHERE id_impianto = '.prepare($id_impianto).') AND id_intervento = '.prepare($id_record)); + + foreach ($components as $component) { + $dbo->query('INSERT INTO my_componenti_interventi(id_componente, id_intervento) VALUES ('.prepare($component).', '.prepare($id_record).')'); + } + + $dbo->update('my_impianti_interventi', [ + 'note' => $note + ], [ + 'idintervento' => $id_record, + 'idimpianto' => $id_impianto + ]); + + flash()->info(tr('Impianto modificato correttamente!')); + + break; + + case 'delete_impianto': + $dbo->query('DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record).' AND idimpianto = '.prepare(post('id'))); + Check::deleteLinked([ + 'id_module' => $id_module, + 'id_record' => $id_record, + 'id_module_from' => Modules::get('Impianti')['id'], + 'id_record_from' => post('id'), + ]); + + $components = $dbo->fetchArray('SELECT * FROM my_componenti WHERE id_impianto = '.prepare($matricola)); + if (!empty($components)) { + foreach ($components as $component) { + $dbo->query('DELETE FROM my_componenti_interventi WHERE id_componente = '.prepare($component['id']).' AND id_intervento = '.prepare($id_record)); + } + } + + flash()->info(tr('Impianto rimosso correttamente!')); + + break; +} diff --git a/plugins/impianti_intervento/edit.php b/plugins/impianti_intervento/edit.php new file mode 100644 index 000000000..77b5bae53 --- /dev/null +++ b/plugins/impianti_intervento/edit.php @@ -0,0 +1,148 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +use Modules\Checklists\Check; + +$modulo_impianti = Modules::get('Impianti'); + +// Blocco della modifica impianti se l'intervento è completato +$dati_intervento = $dbo->fetchArray('SELECT `in_statiintervento`.`is_completato` FROM `in_statiintervento` INNER JOIN `in_interventi` ON `in_statiintervento`.`id` = `in_interventi`.`idstatointervento` WHERE `in_interventi`.`id`='.prepare($id_record)); +$is_completato = $dati_intervento[0]['is_completato']; + +if ($is_completato) { + $readonly = 'readonly'; + $disabled = 'disabled'; +} else { + $readonly = ''; + $disabled = ''; +} + +/* + * Aggiunta impianti all'intervento +*/ +// Elenco impianti collegati all'intervento +$impianti = $dbo->fetchArray('SELECT idimpianto FROM my_impianti_interventi WHERE idintervento='.prepare($id_record)); +$impianti = !empty($impianti) ? array_column($impianti, 'idimpianto') : []; + +// Elenco sedi +$sedi = $dbo->fetchArray('SELECT id, nomesede, citta FROM an_sedi WHERE idanagrafica='.prepare($record['idanagrafica'])." UNION SELECT 0, 'Sede legale', '' ORDER BY id"); + +echo ' +
+
+ +
+ +
+ +
+
+ +
+
+ {[ "type": "select", "name": "id_impianto_add", "label": "'.tr('Impianto').'", "ajax-source": "impianti-cliente", "select-options": {"idanagrafica": '.$record['idanagrafica'].', "idsede_destinazione": '.($record['idsede_destinazione'] ?: '""').', "idintervento": '.$id_record.'}, "extra": "'.$readonly.'", "icon-after": "add|'.$modulo_impianti['id'].'|id_anagrafica='.$record['idanagrafica'].'" ]} +
+ +
+ +
+
'; + +if (!empty($impianti)) { + // IMPIANTI + echo ' +
+
+
'; +} else { + echo ' +
+ '.tr('Nessun impianto collegato a questo intervento').' +
'; +} + +echo ' +'; + +echo ' + + +'; \ No newline at end of file diff --git a/plugins/impianti_intervento/row-impianti.php b/plugins/impianti_intervento/row-impianti.php new file mode 100644 index 000000000..dfb6aa4d9 --- /dev/null +++ b/plugins/impianti_intervento/row-impianti.php @@ -0,0 +1,307 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +use Modules\Checklists\Check; + +$checklist_module = Modules::get('Checklists'); + +// Blocco della modifica impianti se l'intervento è completato +$dati_intervento = $dbo->fetchArray('SELECT `in_statiintervento`.`is_completato` FROM `in_statiintervento` INNER JOIN `in_interventi` ON `in_statiintervento`.`id` = `in_interventi`.`idstatointervento` WHERE `in_interventi`.`id`='.prepare($id_record)); +$is_completato = $dati_intervento[0]['is_completato']; + +if ($is_completato) { + $readonly = 'readonly'; + $disabled = 'disabled'; +} else { + $readonly = ''; + $disabled = ''; +} + +$where = get('search') ? 'AND (my_impianti.matricola LIKE '.prepare('%'.get('search').'%').' OR my_impianti.nome LIKE '.prepare('%'.get('search').'%').')' : ''; +$impianti_collegati = $dbo->fetchArray('SELECT * FROM my_impianti_interventi INNER JOIN my_impianti ON my_impianti_interventi.idimpianto = my_impianti.id WHERE idintervento = '.prepare($id_record).' '.$where); +$n_impianti = count($impianti_collegati); + +$impianti_non_completati = 0; +$impianti_completati = 0; +$impianti_non_previsti = 0; +foreach ($impianti_collegati as $impianto) { + $checks = Check::where('id_module_from', Modules::get('Impianti')['id'])->where('id_record_from', $impianto['id'])->where('id_module', $id_module)->where('id_record', $id_record)->where('id_parent', null)->get(); + if (sizeof($checks)) { + $has_checks_not_verified = $checks->where('checked_at', null)->count(); + if ($has_checks_not_verified) { + $impianti_non_completati += 1; + } else { + $impianti_completati += 1; + } + } else { + $impianti_non_previsti += 1; + } +} + +$percentuale_completati = $n_impianti ? round(($impianti_completati * 100) / $n_impianti) : 0; +$percentuale_non_completati = $n_impianti ? round(($impianti_non_completati * 100) / $n_impianti) : 0; +$percentuale_non_previsti = $n_impianti ? round(($impianti_non_previsti * 100) / $n_impianti) : 0; + +echo ' +
+
+

'.strtoupper( tr('Impianti') ).': '.$n_impianti.'

+
+
'.$impianti_completati.'
+ +
'.$impianti_non_completati.'
+ +
'.$impianti_non_previsti.'
+
+
+ +
+

+ +
+
+ + + + + + + + + + + + + '; +foreach ($impianti_collegati as $impianto) { + $checks = Check::where('id_module_from', Modules::get('Impianti')['id'])->where('id_record_from', $impianto['id'])->where('id_module', $id_module)->where('id_record', $id_record)->where('id_parent', null)->get(); + + $type = 'warning'; + $class = 'disabled'; + $icon = 'circle-o'; + $icon2 = 'remove'; + if (sizeof($checks)) { + $class = ''; + $icon = 'plus'; + $checks_not_verified = $checks->where('checked_at', null)->count(); + $type = $checks_not_verified ? 'danger' : 'success'; + $icon2 = $checks_not_verified ? 'clock-o' : 'check'; + } +echo ' + + + + + + + + + + + + + + '; +} +echo ' +
'.tr('Matricola').''.tr('Nome').''.tr('Data').''.tr('Note').''.tr("Componenti soggetti all'intervento").'Checklist
+ + + '.$impianto['matricola'].''.Modules::link('Impianti', $impianto['id'], $impianto['nome']).''.Translator::dateToLocale($impianto['data']).' + {[ "type": "textarea", "name": "note", "id": "note_imp_'.$impianto['id'].'", "value": "'.$impianto['note'].'", "onchange": "updateImpianto($(this).closest(\'tr\').data(\'id\'))", "readonly": "'.!empty($readonly).'", "disabled": "'.!empty($disabled).'" ]} + '; + $inseriti = $dbo->fetchArray('SELECT * FROM my_componenti_interventi WHERE id_intervento = '.prepare($id_record)); + $ids = array_column($inseriti, 'id_componente'); + + echo ' + {[ "type": "select", "multiple": 1, "name": "componenti[]", "id": "componenti_imp_'.$impianto['id'].'", "ajax-source": "componenti", "select-options": {"matricola": '.$impianto['id'].'}, "value": "'.implode(',', $ids).'", "onchange": "updateImpianto($(this).closest(\'tr\').data(\'id\'))", "readonly": "'.!empty($readonly).'", "disabled": "'.!empty($disabled).'" ]} + +
+ + '; + foreach ($checks as $check) { + echo renderChecklist($check); + } + echo ' + +
+
+ +'; \ No newline at end of file diff --git a/update/2_4_55.php b/update/2_4_55.php index a195c20b5..80681cd87 100644 --- a/update/2_4_55.php +++ b/update/2_4_55.php @@ -5,6 +5,7 @@ include __DIR__.'/../config.inc.php'; // File e cartelle deprecate $files = [ 'assets/src/js/wacom/sigCaptDialog/libs/', + 'modules/impianti/plugins/' ]; foreach ($files as $key => $value) { diff --git a/update/2_4_55.sql b/update/2_4_55.sql index b07280172..85f37c22c 100644 --- a/update/2_4_55.sql +++ b/update/2_4_55.sql @@ -1922,4 +1922,10 @@ WHERE HAVING 2=2 ORDER BY - `id`, `nome` ASC' WHERE `zz_modules`.`id` = (SELECT `id_record` FROM `zz_modules_lang` WHERE `name` = 'Utenti e permessi'); \ No newline at end of file + `id`, `nome` ASC' WHERE `zz_modules`.`id` = (SELECT `id_record` FROM `zz_modules_lang` WHERE `name` = 'Utenti e permessi'); + +-- Aggiunte note in impianto-intervento +ALTER TABLE `my_impianti_interventi` ADD `note` TEXT NOT NULL AFTER `idimpianto`; + +-- Aggiornato plugin Impianti +UPDATE `zz_plugins` SET `script` = '', `directory` = 'impianti_intervento', `options` = 'custom' WHERE `zz_plugins`.`id` = (SELECT `id_record` FROM `zz_plugins_lang` WHERE `name` = 'Impianti'); \ No newline at end of file