Aggiunti flag per notificare intervento ai tecnici

This commit is contained in:
MatteoPistorello 2021-11-23 12:04:44 +01:00
parent 8a445848ce
commit df949723b3
5 changed files with 126 additions and 30 deletions

View File

@ -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');

View File

@ -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');

View File

@ -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]);

View File

@ -49,28 +49,36 @@ if ($record['can_delete']) {
<div class="row">
<div class="col-md-6">
<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>
</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 id, name AS descrizione FROM em_templates WHERE id_module = <?php echo Modules::get('Interventi')['id']; ?> AND deleted_at IS NULL", "disabled": <?php echo intval(empty($record['notifica'])); ?> ]}
</div>
<div class="col-md-6">
{[ "type": "email", "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'])); ?>, "class": "email-mask" ]}
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Notifica al cliente'); ?>", "name": "notifica_cliente", "help": "<?php echo tr('Quando l\'attività passa in questo stato viene inviata una notifica al cliente.'); ?>.", "value": "$notifica_cliente$" ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Notifica ai tecnici'); ?>", "name": "notifica_tecnici", "help": "<?php echo tr('Quando l\'attività passa in questo stato viene inviata una notifica ai tecnici assegnati.'); ?>.", "value": "$notifica_tecnici$" ]}
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Notifica ai tecnici assegnati'); ?>", "name": "notifica_tecnico_sessione", "help": "<?php echo tr('Quando l\'attività passa in questo stato viene inviata una notifica ai tecnici assegnati.'); ?>.", "value": "$notifica_tecnico_sessione$" ]}
</div>
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Destinatari aggiuntivi'); ?>", "name": "destinatari", "value": "$destinatari$", "disabled": <?php echo intval(empty($record['notifica'])); ?> ]}
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Notifica ai tecnici delle sessioni'); ?>", "name": "notifica_tecnico_assegnato", "help": "<?php echo tr('Quando l\'attività passa in questo stato viene inviata una notifica ai tecnici delle sessioni.'); ?>.", "value": "$notifica_tecnico_assegnato$" ]}
</div>
</div>
@ -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]);
}
});
});
}
</script>

View File

@ -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`));
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)');