From df949723b389e934524b24b5d047744a9dd7b23a Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Tue, 23 Nov 2021 12:04:44 +0100 Subject: [PATCH] Aggiunti flag per notificare intervento ai tecnici --- modules/interventi/actions.php | 92 ++++++++++++++++++++++++---- modules/interventi/modutil.php | 2 +- modules/stati_intervento/actions.php | 3 +- modules/stati_intervento/edit.php | 43 ++++++++----- update/2_4_28.sql | 16 ++++- 5 files changed, 126 insertions(+), 30 deletions(-) diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 25c6bc984..ef6a0b84a 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -70,15 +70,60 @@ switch (post('op')) { $intervento->codice_cig = post('codice_cig'); $intervento->save(); - // Assegnazione dei tecnici all'intervento $tecnici_assegnati = (array) post('tecnici_assegnati'); + + + $tecnici_presenti_array = $dbo->select('in_interventi_tecnici_assegnati', 'id_tecnico', ['id_intervento' => $intervento->id]); + + foreach($tecnici_presenti_array as $tecnico_presente) { + $tecnici_presenti[] = $tecnico_presente['id_tecnico']; + + // Notifica rimozione tecnico assegnato + if (setting('Notifica al tecnico la rimozione dell\'assegnazione dall\'attività')) { + if (!in_array($tecnico_presente['id_tecnico'], $tecnici_assegnati)){ + $tecnico = Anagrafica::find($tecnico_presente['id_tecnico']); + if (!empty($tecnico['email'])) { + $template = Template::pool('Notifica rimozione intervento'); + + if (!empty($template)) { + $mail = Mail::build(auth()->getUser(), $template, $intervento->id); + $mail->addReceiver($tecnico['email']); + $mail->save(); + } + } + } + } + } + + foreach ($tecnici_assegnati as $tecnico_assegnato){ + + // Notifica aggiunta tecnico assegnato + if (setting('Notifica al tecnico l\'assegnazione all\'attività')) { + if (!in_array($tecnico_assegnato, $tecnici_presenti)){ + $tecnico = Anagrafica::find($tecnico_assegnato); + + if (!empty($tecnico['email'])) { + $template = Template::pool('Notifica intervento'); + + if (!empty($template)) { + $mail = Mail::build(auth()->getUser(), $template, $intervento->id); + $mail->addReceiver($tecnico['email']); + $mail->save(); + } + } + } + } + + } + + // Assegnazione dei tecnici all'intervento $dbo->sync('in_interventi_tecnici_assegnati', [ 'id_intervento' => $id_record, ], [ 'id_tecnico' => $tecnici_assegnati, ]); - // Notifica chiusura intervento + // Notifica cambio stato intervento $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => post('idstatointervento')]); if (!empty($stato['notifica']) && $stato['idstatointervento'] != $record['idstatointervento']) { $template = Template::find($stato['id_email']); @@ -98,18 +143,22 @@ switch (post('op')) { } } - if (!empty($stato['notifica_tecnici'])) { + if (!empty($stato['notifica_tecnico_sessione'])) { $tecnici_intervento = $dbo->select('in_interventi_tecnici', 'idtecnico', ['idintervento' => $id_record]); - $tecnici_assegnati = $dbo->select('in_interventi_tecnici_assegnati', 'id_tecnico AS idtecnico', ['id_intervento' => $id_record]); - $tecnici = array_unique(array_merge($tecnici_intervento, $tecnici_assegnati), SORT_REGULAR); + } - foreach ($tecnici as $tecnico) { - $mail_tecnico = $dbo->selectOne('an_anagrafiche', '*', ['idanagrafica' => $tecnico]); - if (!empty($mail_tecnico['email'])) { - $mail = Mail::build(auth()->getUser(), $template, $id_record); - $mail->addReceiver($mail_tecnico['email']); - $mail->save(); - } + if (!empty($stato['notifica_tecnico_assegnato'])) { + $tecnici_assegnati = $dbo->select('in_interventi_tecnici_assegnati', 'id_tecnico AS idtecnico', ['id_intervento' => $id_record]); + } + + $tecnici = array_unique(array_merge($tecnici_intervento, $tecnici_assegnati), SORT_REGULAR); + + foreach ($tecnici as $tecnico) { + $mail_tecnico = $dbo->selectOne('an_anagrafiche', '*', ['idanagrafica' => $tecnico]); + if (!empty($mail_tecnico['email'])) { + $mail = Mail::build(auth()->getUser(), $template, $id_record); + $mail->addReceiver($mail_tecnico['email']); + $mail->save(); } } } @@ -214,6 +263,23 @@ switch (post('op')) { 'id_tecnico' => $tecnici_assegnati, ]); + foreach ($tecnici_assegnati as $tecnico_assegnato){ + $tecnico = Anagrafica::find($tecnico_assegnato); + + // Notifica al tecnico + if (setting('Notifica al tecnico l\'assegnazione all\'attività')) { + if (!empty($tecnico['email'])) { + $template = Template::pool('Notifica intervento'); + + if (!empty($template)) { + $mail = Mail::build(auth()->getUser(), $template, $intervento->id); + $mail->addReceiver($tecnico['email']); + $mail->save(); + } + } + } + } + if (!empty(post('ricorsiva'))) { $periodicita = post('periodicita'); $data = post('data_inizio_ricorrenza'); @@ -636,7 +702,7 @@ switch (post('op')) { $dbo->query('DELETE FROM in_interventi_tecnici WHERE id='.prepare($id_sessione)); // Notifica rimozione dell' intervento al tecnico - if (setting('Notifica al tecnico la rimozione dall\'attività')) { + if (setting('Notifica al tecnico la rimozione della sessione dall\'attività')) { if (!empty($tecnico['email'])) { $template = Template::pool('Notifica rimozione intervento'); diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index 5bc18ac81..8e4b3e921 100755 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -97,7 +97,7 @@ function add_tecnico($id_intervento, $idtecnico, $inizio, $fine, $idcontratto = $sessione = Sessione::build($intervento, $anagrafica, $inizio, $fine); // Notifica nuovo intervento al tecnico - if (setting('Notifica al tecnico l\'assegnazione all\'attività')) { + if (setting('Notifica al tecnico l\'aggiunta della sessione nell\'attività')) { if (!empty($anagrafica['email'])) { $template = Template::pool('Notifica intervento'); diff --git a/modules/stati_intervento/actions.php b/modules/stati_intervento/actions.php index b7175e723..f42f025ab 100755 --- a/modules/stati_intervento/actions.php +++ b/modules/stati_intervento/actions.php @@ -29,7 +29,8 @@ switch (post('op')) { 'is_fatturabile' => post('is_fatturabile'), 'notifica' => post('notifica'), 'notifica_cliente' => post('notifica_cliente'), - 'notifica_tecnici' => post('notifica_tecnici'), + 'notifica_tecnico_sessione' => post('notifica_tecnico_sessione'), + 'notifica_tecnico_assegnato' => post('notifica_tecnico_sessione'), 'id_email' => post('email') ?: null, 'destinatari' => post('destinatari'), ], ['idstatointervento' => $id_record]); diff --git a/modules/stati_intervento/edit.php b/modules/stati_intervento/edit.php index 3bbf9849e..9050129a5 100755 --- a/modules/stati_intervento/edit.php +++ b/modules/stati_intervento/edit.php @@ -49,28 +49,36 @@ if ($record['can_delete']) {
-
+
{[ "type": "checkbox", "label": "", "name": "notifica", "help": ".", "value": "$notifica$" ]}
+
+
+
+
{[ "type": "select", "label": "", "name": "email", "value": "$id_email$", "values": "query=SELECT id, name AS descrizione FROM em_templates WHERE id_module = AND deleted_at IS NULL", "disabled": ]}
- +
+ {[ "type": "email", "label": "", "name": "destinatari", "value": "$destinatari$", "icon-before": "", "disabled": , "class": "email-mask" ]} +
+
+
-
+
{[ "type": "checkbox", "label": "", "name": "notifica_cliente", "help": ".", "value": "$notifica_cliente$" ]}
-
- {[ "type": "checkbox", "label": "", "name": "notifica_tecnici", "help": ".", "value": "$notifica_tecnici$" ]} +
+ {[ "type": "checkbox", "label": "", "name": "notifica_tecnico_sessione", "help": ".", "value": "$notifica_tecnico_sessione$" ]}
-
- {[ "type": "text", "label": "", "name": "destinatari", "value": "$destinatari$", "disabled": ]} +
+ {[ "type": "checkbox", "label": "", "name": "notifica_tecnico_assegnato", "help": ".", "value": "$notifica_tecnico_assegnato$" ]}
@@ -108,25 +116,32 @@ if ($record['can_delete']) { }); $('#colore').parent().find('.square').css( 'background', $('#colore').val() ); + notifica(); + }); $("#notifica").change(function() { - if ($(this).is(":checked")) { + notifica(); + }); + + function notifica() { + if ($("#notifica").is(":checked")) { $("#email").attr("required", true); $("#email").attr("disabled", false); $("#destinatari").attr("disabled", false); $("#notifica_cliente").attr("disabled", false); - $("#notifica_tecnici").attr("disabled", false); + $("#notifica_tecnico_sessione").attr("disabled", false); + $("#notifica_tecnico_assegnato").attr("disabled", false); }else{ $("#email").attr("required", false); $("#email").attr("disabled", true); $("#destinatari").attr("disabled", true); $("#destinatari").val(""); $("#notifica_cliente").attr("disabled", true); - $("#notifica_tecnici").attr("disabled", true); + $("#notifica_tecnico_sessione").attr("disabled", true); + $("#notifica_tecnico_assegnato").attr("disabled", true); $("#notifica_cliente").val([0]); - $("#notifica_tecnici").val([0]); + $("#notifica_tecnico_sessione").val([0]); + $("#notifica_tecnico_assegnato").val([0]); } - }); - - }); + } diff --git a/update/2_4_28.sql b/update/2_4_28.sql index fc0615de1..a0987e994 100644 --- a/update/2_4_28.sql +++ b/update/2_4_28.sql @@ -56,4 +56,18 @@ INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `visible`, UPDATE `zz_plugins` SET `options` = ' { \"main_query\": [ { \"type\": \"table\", \"fields\": \"Nominativo, Mansione, Telefono, Indirizzo email, Sede\", \"query\": \"SELECT an_referenti.id, an_referenti.nome AS Nominativo, an_mansioni.nome AS Mansione, an_referenti.telefono AS Telefono, an_referenti.email AS \'Indirizzo email\', IF(idsede = 0, \'Sede legale\', an_sedi.nomesede) AS Sede FROM an_referenti LEFT OUTER JOIN an_sedi ON idsede = an_sedi.id LEFT OUTER JOIN an_mansioni ON idmansione = an_mansioni.id WHERE 1=1 AND an_referenti.idanagrafica=|id_parent| HAVING 2=2 ORDER BY an_referenti.id DESC\"} ]}' WHERE `zz_plugins`.`name` = 'Referenti'; -CREATE TABLE IF NOT EXISTS `em_mansioni_template` ( `id` INT NOT NULL AUTO_INCREMENT , `idmansione` INT NOT NULL , `id_template` INT NOT NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)); \ No newline at end of file +CREATE TABLE IF NOT EXISTS `em_mansioni_template` ( `id` INT NOT NULL AUTO_INCREMENT , `idmansione` INT NOT NULL , `id_template` INT NOT NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)); + +-- Aggiunta notifiche ai tecnici assegnati +ALTER TABLE `in_statiintervento` CHANGE `notifica_tecnici` `notifica_tecnico_sessione` TINYINT(4) NOT NULL; + +ALTER TABLE `in_statiintervento` ADD `notifica_tecnico_assegnato` TINYINT(4) NOT NULL AFTER `notifica_tecnico_sessione`; + +UPDATE `in_statiintervento` SET `notifica_tecnico_assegnato`=`notifica_tecnico_sessione`; + +UPDATE `zz_settings` SET `nome` = 'Notifica al tecnico l\'aggiunta della sessione nell\'attività', `order`=15 WHERE `zz_settings`.`nome` = 'Notifica al tecnico l\'assegnazione all\'attività'; + +UPDATE `zz_settings` SET `nome` = 'Notifica al tecnico la rimozione della sessione dall\'attività', `order`=16 WHERE `zz_settings`.`nome` = 'Notifica al tecnico la rimozione dall\'attività'; + +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico l''assegnazione all''attività', '0', 'boolean', '1', 'Attività', 17, 'Notifica via email al tecnico l''assegnazione di una nuova attività (l''indirizzo email deve essere specificato nella sua anagrafica)'); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico la rimozione dell''assegnazione dall''attività', '0', 'boolean', '1', 'Attività', 18, 'Notifica via email al tecnico la rimozione dell''assegnazione dall''attività (l''indirizzo email deve essere specificato nella sua anagrafica)'); \ No newline at end of file