diff --git a/modules/interventi/add.php b/modules/interventi/add.php
index 7cdcdc0fd..9bdae0715 100755
--- a/modules/interventi/add.php
+++ b/modules/interventi/add.php
@@ -62,19 +62,18 @@
$id_anagrafica = Modules\Interventi\Intervento::where('id', $id_intervento)->first()->id_anagrafica;
}
-$anagrafica = database()->table('an_anagrafiche')->where('id', $id_anagrafica)->first(['id_tipo_intervento_default', 'id_zona']);
-$id_tipo = $anagrafica->id_tipo_intervento_default;
-$id_zona = $anagrafica->id_zona;
+$anagrafica = $dbo->fetchOne('SELECT id_tipo_intervento_default, id_zona FROM an_anagrafiche WHERE id='.prepare($id_anagrafica));
+$id_tipo = $anagrafica['id_tipo_intervento_default'];
+$id_zona = $anagrafica['id_zona'];
// Trasformazione di un Promemoria dei Contratti in Intervento
if (!empty($id_contratto) && !empty($id_promemoria_contratto)) {
- // Recupero id_zona dell'anagrafica in un'unica query
- $contratto = $dbo->fetchOne('SELECT co_contratti.*, an_anagrafiche.id_zona FROM co_contratti INNER JOIN an_anagrafiche ON an_anagrafiche.id = co_contratti.id_anagrafica WHERE co_contratti.id = '.prepare($id_contratto));
+ $contratto = $dbo->fetchOne('SELECT *, (SELECT id_zona FROM an_anagrafiche WHERE id = co_contratti.id_anagrafica) AS id_zona FROM co_contratti WHERE id = '.prepare($id_contratto));
$id_anagrafica = $contratto['id_anagrafica'];
$id_zona = $contratto['id_zona'];
- // Informazioni del Promemoria con tempo_standard
- $promemoria = $dbo->fetchOne('SELECT co_promemoria.*, in_tipi_intervento.tempo_standard FROM co_promemoria INNER JOIN in_tipi_intervento ON in_tipi_intervento.id = co_promemoria.id_tipo_intervento WHERE co_promemoria.id_contratto='.prepare($id_contratto).' AND co_promemoria.id = '.prepare($id_promemoria_contratto));
+ // Informazioni del Promemoria
+ $promemoria = $dbo->fetchOne('SELECT *, (SELECT `tempo_standard` FROM `in_tipi_intervento` WHERE `id` = `co_promemoria`.`id_tipo_intervento`) AS tempo_standard FROM `co_promemoria` WHERE `id_contratto`='.prepare($id_contratto).' AND `co_promemoria`.`id` = '.prepare($id_promemoria_contratto));
$id_tipo = $promemoria['id_tipo_intervento'];
$data = filter('data') ?? $promemoria['data_richiesta'];
$richiesta = $promemoria['richiesta'];
@@ -91,14 +90,14 @@
// Caricamento degli impianti a Contratto se non definiti in Promemoria
if (empty($impianti_collegati)) {
- $rs = database()->table('my_impianti_contratti')->where('id_contratto', $id_contratto)->pluck('id_impianto')->toArray();
- $impianti_collegati = implode(',', $rs);
+ $rs = $dbo->fetchArray('SELECT id_impianto FROM my_impianti_contratti WHERE id_contratto = '.prepare($id_contratto));
+ $impianti_collegati = implode(',', array_column($rs, 'id_impianto'));
}
}
// Gestione dell'aggiunta di una sessione a un Intervento senza sessioni (Promemoria intervento) da Dashboard
elseif (!empty($id_intervento)) {
- $intervento = $dbo->fetchOne('SELECT `in_interventi`.*, `co_promemoria`.`id_contratto`, `in_tipi_intervento`.`tempo_standard` FROM `in_interventi` LEFT JOIN `co_promemoria` ON `co_promemoria`.`id_intervento` = `in_interventi`.`id` LEFT JOIN `in_tipi_intervento` ON `in_tipi_intervento`.`id` = `in_interventi`.`id_tipo_intervento` WHERE `in_interventi`.`id` = '.prepare($id_intervento));
+ $intervento = $dbo->fetchOne('SELECT *, (SELECT `id_contratto` FROM `co_promemoria` WHERE `id_intervento` = `in_interventi`.`id` LIMIT 0,1) AS id_contratto, `in_interventi`.`id_preventivo` as id_preventivo, (SELECT `tempo_standard` FROM `in_tipi_intervento` WHERE `id` = `in_interventi`.`id_tipo_intervento`) AS tempo_standard FROM `in_interventi` WHERE `id` = '.prepare($id_intervento));
$id_tipo = $intervento['id_tipo_intervento'];
$data = filter('data') ?? $intervento['data_richiesta'];
@@ -118,17 +117,17 @@
$orario_fine = date('H:i:s', strtotime($orario_inizio) + ((60 * 60) * $intervento['tempo_standard']));
}
- $rs = database()->table('my_impianti_interventi')->where('id_intervento', $id_intervento)->pluck('id_impianto')->toArray();
- $impianti_collegati = implode(',', $rs);
+ $rs = $dbo->fetchArray('SELECT id_impianto FROM my_impianti_interventi WHERE id_intervento = '.prepare($id_intervento));
+ $impianti_collegati = implode(',', array_column($rs, 'id_impianto'));
- $rs = database()->table('in_interventi_tecnici_assegnati')->where('id_intervento', $id_intervento)->pluck('id_tecnico')->toArray();
- $tecnici_assegnati = implode(',', $rs);
+ $rs = $dbo->fetchArray('SELECT id_tecnico FROM in_interventi_tecnici_assegnati WHERE id_intervento = '.prepare($id_intervento));
+ $tecnici_assegnati = implode(',', array_column($rs, 'id_tecnico'));
}
// Selezione dei tecnici predefiniti per gli impianti selezionati
if (!empty($impianti_collegati)) {
- $tecnici_impianti = database()->table('my_impianti')->whereIn('id', explode(',', $impianti_collegati))->pluck('id_tecnico')->toArray();
- $id_tecnico = array_unique($tecnici_impianti);
+ $tecnici_impianti = $dbo->fetchArray('SELECT id_tecnico FROM my_impianti WHERE id IN ('.prepare($impianti_collegati).')');
+ $id_tecnico = array_unique(array_column($tecnici_impianti, 'id_tecnico'));
}
// Impostazione della data se mancante
@@ -219,7 +218,7 @@
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id", "required": 1, "values": "query=SELECT `in_stati_intervento`.`id`, `in_stati_intervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `title`", "value": "'.($origine_dashboard ? setting('Stato predefinito dell\'attività da Dashboard') : setting('Stato predefinito dell\'attività')).'" ]}
+ {[ "type": "select", "label": "'.tr('Stato').'", "name": "id", "required": 1, "values": "query=SELECT `in_stati_intervento`.`id`, `in_stati_intervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `sort_order`, `title`", "value": "'.($origine_dashboard ? setting('Stato predefinito dell\'attività da Dashboard') : setting('Stato predefinito dell\'attività')).'" ]}
@@ -414,7 +413,7 @@
- {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "id_statoricorrenze", "values": "query=SELECT `in_stati_intervento`.`id`,`in_stati_intervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `is_bloccato`=0 ORDER BY `title`" ]}
+ {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "id_statoricorrenze", "values": "query=SELECT `in_stati_intervento`.`id`,`in_stati_intervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `is_bloccato`=0 ORDER BY `sort_order`, `title`" ]}
{[ "type": "checkbox", "label": "'.tr('Riporta sessioni di lavoro').'", "name": "riporta_sessioni_add", "value": "" ]}
@@ -521,15 +520,10 @@
// Refresh modulo dopo la chiusura di una pianificazione attività derivante dalle attività
// da pianificare, altrimenti il promemoria non si vede più nella lista a destra
- const id_contratto_riga = $("input[name=id_contratto_riga]").val();
- if(id_contratto_riga) {
- $("#modals").on("hidden.bs.modal", function(e) {
- // Ricarica le DataTables per aggiornare la lista dei promemoria
- $(".main-records, .datatables").each(function() {
- if($.fn.DataTable.isDataTable($(this))) {
- $(this).DataTable().ajax.reload();
- }
- });
+ // TODO: da gestire via ajax
+ if($("input[name=id_contratto_riga]").val()) {
+ $("#modals > div button.close").on("click", function() {
+ location.reload();
});
}
@@ -572,7 +566,7 @@ function() {
let selected = !$(this).val();
let placeholder = selected ? "'.tr('Seleziona prima un cliente').'" : "'.tr("Seleziona un'opzione").'";
- let selected_sede = !$(this).val() || ($(this).prop("disabled") && sede.get()) ? 1 : 0;
+ let selected_sede = !$(this).val() || $(this).prop("disabled") ? 1 : 0;
sede.setDisabled(selected_sede)
.getElement().selectReset(placeholder);
diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php
index e2cd4aca1..2b5b997dd 100755
--- a/modules/interventi/bulk.php
+++ b/modules/interventi/bulk.php
@@ -97,7 +97,7 @@
$raggruppamento = post('raggruppamento');
$where = '';
- $query = 'SELECT `in_interventi`.*, IFNULL(`sessioni_min`.`min_orario_inizio`, `in_interventi`.`data_richiesta`) AS data, `in_stati_intervento_lang`.`title` AS stato, `in_interventi`.`codice` AS codice_intervento FROM `in_interventi` INNER JOIN `in_stati_intervento` ON `in_interventi`.`id_stato`=`in_stati_intervento`.`id` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento_lang`.`id_record`=`in_stati_intervento`.`id` AND `in_stati_intervento_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') LEFT JOIN (SELECT `id_intervento`, MIN(`orario_inizio`) AS min_orario_inizio FROM `in_interventi_tecnici` GROUP BY `id_intervento`) AS `sessioni_min` ON `sessioni_min`.`id_intervento` = `in_interventi`.`id` WHERE `in_stati_intervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `id_intervento` FROM `co_righe_documenti` WHERE `id_intervento` IS NOT NULL) AND `in_interventi`.`id` IN ('.implode(',', $id_records).')';
+ $query = 'SELECT `in_interventi`.*, IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`id_intervento` = `in_interventi`.`id`), `in_interventi`.`data_richiesta`) AS data, `in_stati_intervento_lang`.`title` AS stato, `in_interventi`.`codice` AS codice_intervento FROM `in_interventi` INNER JOIN `in_stati_intervento` ON `in_interventi`.`id_stato`=`in_stati_intervento`.`id` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento_lang`.`id_record`=`in_stati_intervento`.`id` AND `in_stati_intervento_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `in_stati_intervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `id_intervento` FROM `co_righe_documenti` WHERE `id_intervento` IS NOT NULL) AND `in_interventi`.`id` IN ('.implode(',', $id_records).')';
// Se non è attiva la relativa impostazione considero solo interventi non collegati a contratti, ordini o preventivi (default)
if (!setting('Permetti fatturazione delle attività collegate a contratti')) {
@@ -450,7 +450,7 @@
'data' => [
'title' => tr('Vuoi davvero cambiare lo stato per questi interventi?'),
'msg' => tr('Seleziona lo stato in cui spostare tutti gli interventi non completati').'.
-
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `in_stati_intervento`.`id`, `title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `title`" ]}',
+
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `in_stati_intervento`.`id`, `title` as descrizione, `colore` AS _bgcolor_ FROM `in_stati_intervento` LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento`.`id` = `in_stati_intervento_lang`.`id_record` AND `in_stati_intervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `sort_order`, `title`" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
diff --git a/modules/stati_intervento/actions.php b/modules/stati_intervento/actions.php
index 662a3cbbb..2fc522240 100755
--- a/modules/stati_intervento/actions.php
+++ b/modules/stati_intervento/actions.php
@@ -42,6 +42,7 @@
$stato->notifica_tecnico_assegnato = post('notifica_tecnico_assegnato');
$stato->id_email = post('email') ?: null;
$stato->destinatari = post('destinatari');
+ $stato->sort_order = post('sort_order');
$stato->save();
$stato->setTranslation('title', $descrizione);
@@ -54,7 +55,6 @@
$codice = post('codice');
$descrizione = post('descrizione');
$colore = post('colore');
-
$stato_new = Stato::where('name', $descrizione)->first()->id;
if ($stato_new) {
@@ -62,6 +62,7 @@
} else {
$stato = Stato::build($codice, $colore);
$stato->name = $descrizione;
+ $stato->sort_order = post('sort_order');
$id_record = $dbo->lastInsertedID();
$stato->save();
diff --git a/modules/stati_intervento/add.php b/modules/stati_intervento/add.php
index 2472895c8..76d664c32 100755
--- a/modules/stati_intervento/add.php
+++ b/modules/stati_intervento/add.php
@@ -31,7 +31,11 @@
{[ "type": "text", "label": "", "name": "descrizione", "required": 1 ]}
-
+
+ {[ "type": "text", "label": "", "name": "sort_order" ]}
+
+
+
{[ "type": "text", "label": "", "name": "colore", "id": "colore_", "required": 1, "class": "colorpicker text-center", "value": "#ffffff", "extra": "maxlength='7'", "icon-after": "
" ]}
@@ -49,10 +53,10 @@
\ No newline at end of file
+
diff --git a/modules/stati_intervento/edit.php b/modules/stati_intervento/edit.php
index a6eec15d4..1de768d6f 100755
--- a/modules/stati_intervento/edit.php
+++ b/modules/stati_intervento/edit.php
@@ -23,7 +23,7 @@
use Modules\Interventi\Stato;
$stato = Stato::find($id_record);
-if ($stato->can_delete) {
+if ($record['can_delete']) {
$attr = '';
} else {
$attr = 'readonly';
@@ -56,17 +56,22 @@
{[ "type": "checkbox", "label": "", "name": "notifica", "help": ".", "value": "$notifica$" ]}
+
+
+ {[ "type": "text", "label": "", "name": "sort_order", "help": ".", "value": "$sort_order$" ]}
+
+
- {[ "type": "select", "label": "", "name": "email", "value": "$id_email$", "values": "query=SELECT `em_templates`.`id`, `em_templates_lang`.`title` AS descrizione FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates`.`id` = `em_templates_lang`.`id_record` AND `em_templates_lang`.`id_lang` = id); ?>) WHERE `id_module` = first()->id; ?> AND `deleted_at` IS NULL", "disabled": notifica)); ?>, "required":1 ]}
+ {[ "type": "select", "label": "", "name": "email", "value": "$id_email$", "values": "query=SELECT `em_templates`.`id`, `em_templates_lang`.`title` AS descrizione FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates`.`id` = `em_templates_lang`.`id_record` AND `em_templates_lang`.`id_lang` = id); ?>) WHERE `id_module` = first()->id; ?> AND `deleted_at` IS NULL", "disabled": , "required":1 ]}
- {[ "type": "text", "label": "", "name": "destinatari", "value": "$destinatari$", "icon-before": "", "disabled": notifica)); ?> ]}
+ {[ "type": "text", "label": "", "name": "destinatari", "value": "$destinatari$", "icon-before": "", "disabled": ]}
@@ -105,7 +110,7 @@
can_delete) {
+if ($record['can_delete']) {
?>
@@ -115,11 +120,11 @@
?>