Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 22 additions & 28 deletions modules/interventi/add.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'];
Expand All @@ -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'];
Expand All @@ -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
Expand Down Expand Up @@ -219,7 +218,7 @@
</div>

<div class="col-md-4">
{[ "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à')).'" ]}
</div>
</div>

Expand Down Expand Up @@ -414,7 +413,7 @@

<div class="row mt-3">
<div class="col-md-6">
{[ "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`" ]}
</div>
<div class="col-md-6">
{[ "type": "checkbox", "label": "'.tr('Riporta sessioni di lavoro').'", "name": "riporta_sessioni_add", "value": "" ]}
Expand Down Expand Up @@ -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();
});
}

Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions modules/interventi/bulk.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')) {
Expand Down Expand Up @@ -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').'.<br>
<br>{[ "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`" ]}',
<br>{[ "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,
Expand Down
3 changes: 2 additions & 1 deletion modules/stati_intervento/actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -54,14 +55,14 @@
$codice = post('codice');
$descrizione = post('descrizione');
$colore = post('colore');

$stato_new = Stato::where('name', $descrizione)->first()->id;

if ($stato_new) {
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato attività.'));
} else {
$stato = Stato::build($codice, $colore);
$stato->name = $descrizione;
$stato->sort_order = post('sort_order');
$id_record = $dbo->lastInsertedID();
$stato->save();

Expand Down
12 changes: 8 additions & 4 deletions modules/stati_intervento/add.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
</div>

<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Ordinamento'); ?>", "name": "sort_order" ]}
</div>
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "id": "colore_", "required": 1, "class": "colorpicker text-center", "value": "#ffffff", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
</div>
Expand All @@ -49,10 +53,10 @@

<script>
$(document).ready(function() {
$('.colorpicker').colorpicker({ format: 'hex' }).on('colorpickerChange', function(event) {
$(this).parent().find('.square').css('background', event.value);
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
$(this).parent().find('.square').css('background', $(this).val());
});
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
});

</script>
</script>
19 changes: 12 additions & 7 deletions modules/stati_intervento/edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -56,17 +56,22 @@
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita notifiche'); ?>", "name": "notifica", "help": "<?php echo tr('Quando l\'attività passa in questo stato viene inviata una notifica ai destinatari designati.'); ?>.", "value": "$notifica$" ]}
</div>
<!--inizio mod aggiunta campo sort_order-->
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Ordinamento'); ?>", "name": "sort_order", "help": "<?php echo tr('Ordine di Visualizzazione: numeri più bassi aumentano la priorità.'); ?>.", "value": "$sort_order$" ]}
</div>
<!--fine aggiunta campo-->

</div>
<hr>
<div class="row">

<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Template email'); ?>", "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` = <?php echo prepare(Models\Locale::getDefault()->id); ?>) WHERE `id_module` = <?php echo Module::where('name', 'Interventi')->first()->id; ?> AND `deleted_at` IS NULL", "disabled": <?php echo intval(empty($stato->notifica)); ?>, "required":1 ]}
{[ "type": "select", "label": "<?php echo tr('Template email'); ?>", "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` = <?php echo prepare(Models\Locale::getDefault()->id); ?>) WHERE `id_module` = <?php echo Module::where('name', 'Interventi')->first()->id; ?> AND `deleted_at` IS NULL", "disabled": <?php echo intval(empty($record['notifica'])); ?>, "required":1 ]}
</div>

<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Destinatario aggiuntivo'); ?>", "name": "destinatari", "value": "$destinatari$", "icon-before": "<i class='fa fa-envelope'></i>", "disabled": <?php echo intval(empty($stato->notifica)); ?> ]}
{[ "type": "text", "label": "<?php echo tr('Destinatario aggiuntivo'); ?>", "name": "destinatari", "value": "$destinatari$", "icon-before": "<i class='fa fa-envelope'></i>", "disabled": <?php echo intval(empty($record['notifica'])); ?> ]}
</div>

</div>
Expand Down Expand Up @@ -105,7 +110,7 @@

<?php
// Record eliminabile solo se permesso
if ($stato->can_delete) {
if ($record['can_delete']) {
?>
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
Expand All @@ -115,11 +120,11 @@
?>
<script>
$(document).ready(function() {
$('.colorpicker').colorpicker({ format: 'hex' }).on('colorpickerChange', function(event) {
$(this).parent().find('.square').css('background', event.value);
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
$(this).parent().find('.square').css('background', $(this).val());
});
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
notifica();
notifica();
});


Expand Down
6 changes: 5 additions & 1 deletion update/2_12.sql
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,11 @@ INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT `id` FROM `zz_views` WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Eventi') AND `name` = 'Data fine'), 'Data fine'),
(2, (SELECT `id` FROM `zz_views` WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Eventi') AND `name` = 'Data fine'), 'End date');

ALTER TABLE `in_stati_intervento`
ADD COLUMN `sort_order` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `id`;

UPDATE `zz_modules` SET `options` = 'SELECT\r\n |select|\r\nFROM \r\n `in_stati_intervento`\r\n LEFT JOIN `in_stati_intervento_lang` ON (`in_stati_intervento_lang`.`id_record` = `in_stati_intervento`.`id` AND `in_stati_intervento_lang`.|lang|)\r\nWHERE \r\n 1=1 AND `deleted_at` IS NULL \r\nHAVING \r\n 2=2\r\nORDER BY `sort_order`, `title`' WHERE `zz_modules`.`id` = 10;
-- Aggiunta campo id_sede alle righe dei documenti che movimentano il magazzino
ALTER TABLE `co_righe_documenti` ADD `id_sede` INT NOT NULL;
ALTER TABLE `dt_righe_ddt` ADD `id_sede` INT NOT NULL;
ALTER TABLE `in_righe_interventi` ADD `id_sede` INT NOT NULL;
ALTER TABLE `in_righe_interventi` ADD `id_sede` INT NOT NULL;
Loading