/**
* @ngdoc directives
* @name alarme-disparado
* @module s4c.directives.alarme-disparado
*
* @description
* `AlarmeDisparadoController` Responsável por exibir as funções do alarme na tela, bem como o seu funcionamento.
*
*
*/
(function () {
'use strict';
angular.module('s4c.directives.alarme-disparado', [
's4c.services',
's4c.components.detalhamento',
'angularMoment',
'angular-toasty'
])
.directive('s4cAlarmeDisparado', AlarmeDisparado);
function AlarmeDisparado() {
return {
restrict: 'E',
templateUrl: 'app/directives/alarme-disparado/alarme-disparado.html',
replace: true,
//scope: {},
controller: AlarmeDisparadoController
}
}
AlarmeDisparadoController.$inject = [
'$scope',
'MainState',
'AlarmeDisparado',
'Alarme',
'$mdDialog',
'DetalhamentoService',
'CommService',
'MensageriaService',
'toasty',
'CamadasService',
'IncidentesManager',
'TarefaManager',
'MapaManager',
'AuthService',
'$rootScope',
'ZonasDeObservacaoFilter',
'MapaService',
'DetalhamentoManager'
];
function AlarmeDisparadoController($scope, MainState, AlarmeDisparado, Alarme, $mdDialog, DetalhamentoService,
CommService, MensageriaService, toasty, CamadasService, IncidentesManager, TarefaManager, MapaManager, AuthService,
$rootScope, ZonasDeObservacaoFilter, MapaService, DetalhamentoManager) {
$scope.res = $scope.$root.res;
var iconesAlarme = {
'Incidente': 'assets/images/Incidentes/ic_incidente_color_24px-01.png',
'Twitter': 'assets/images/Alarme/ic_twitter_color_24px-01.png',
'Categoria': 'assets/images/Alarme/ic_alarme_color_24px.png',
'IncidenteZO': 'assets/images/Alarme/ic_zona_observacao_color_24px-01.png',
'TempoZO': 'assets/images/Alarme/ic_zona_observacao_color_24px-01.png',
'TwitterZO': 'assets/images/Alarme/ic_zona_observacao_color_24px-01.png',
'Planejamento': 'assets/images/Planejamento/ic_planejamento_color_24px.png',
'AtivarCamadaZO': 'assets/images/Planejamento/ic_planejamento_color_24px.png',
'CercaVirtualEntradaZO': 'assets/images/Planejamento/ic_planejamento_color_24px.png',
'CercaVirtualSaidaZO': 'assets/images/Planejamento/ic_planejamento_color_24px.png',
'CercaVirtualPermanenciaZO': 'assets/images/Planejamento/ic_planejamento_color_24px.png',
'default': 'assets/images/Alarme/ic_alarme_color_24px.png'
};
var tipos = {
'Planejamento': $scope.res('PLANEJAMENTO_TITULO'),
'Twitter': 'Twitter',
'TwitterZO': $scope.res('ZONAOBSERVACAO_TITULO'),
'Incidente': $scope.res('MSI_NOME'),
'IncidenteZO': $scope.res('ZONAOBSERVACAO_TITULO'),
'TempoZO': $scope.res('ZONAOBSERVACAO_TITULO'),
'Categoria': $scope.res('Categoria'),
'Mensagem': $scope.res('AUDITORIA_MENSAGEM'),
'Briefing': 'Briefing',
'Mensageria': 'Telegram',
'MensagemGrupoMensageriaExterna': $scope.res('MENSAGEM_EXTERNA'),
'AtivarCamadaZO': $scope.res('ZONAOBSERVACAO_TITULO'),
'CercaVirtualEntradaZO': $scope.res('CERCA_VIRTUAL_ENTRADA'),
'CercaVirtualSaidaZO': $scope.res('CERCA_VIRTUAL_SAIDA'),
'CercaVirtualPermanenciaZO': $scope.res('CERCA_VIRTUAL_PERMANENCIA')
};
//Controle de exibição de alarmes de até uma semana.
$scope.verMais = false;
angular.extend($scope, {
exibindoMeusAlarmes: false,
alarmesDisparados: [],
alarmes: [],
exibirCheckbox: exibirCheckbox,
exibirIcone: exibirIcone,
mudarStatusVerificado: mudarStatusVerificado,
exibirMeusAlertas: exibirMeusAlertas,
esconderMeusAlertas: esconderMeusAlertas,
obterMensagem: obterMensagem,
acaoAlarmeDisparado: acaoAlarmeDisparado,
acaoAlarmeConfigurado: acaoAlarmeConfigurado,
removerAlarme: removerAlarme,
verificar: verificar
});
MainState.registerDirective('alarmeDisparado', $scope.$api);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('alarmeDisparado');
});
/**
* Obtêm os alarmes do usuário
*
* @method _obterMeusAlarmes
*
*
*/
function _obterMeusAlarmes() {
AlarmeDisparado
.obterMeusAlarmesDisparados(AuthService.user.info.id)
.then(function (alarmesDisparados) {
var startDate = moment();
_.each(alarmesDisparados, function (alarme) {
if (moment(alarme.data).isBefore(startDate, 'day')) {
alarme.dentroDaSemana = true;
}
});
var alarmesPorTipo = _.transform(alarmesDisparados, function (result, next) {
next.titulo = moment(next.data).format('DD/MM/YYYY [às] HH:mm');
if (next.tituloMensagem != null) {
next.tituloMensagem = next.tituloMensagem.toUpperCase();
}
var tipo = _.find(result, {
nome: tipos[next.tipo]
});
if (tipo) {
tipo.alarmes.push(next);
} else {
result.push({
nome: tipos[next.tipo],
tipo: next.tipo,
alarmes: [next]
});
}
}, []);
$scope.alarmesPorTipo = alarmesPorTipo;
});
}
/**
* Obtêm os alarmes configurados do usuário
*
* @method _obterAlarmesConfigurados
*
*
*/
function _obterAlarmesConfigurados() {
Alarme
.query()
.then(function (alarmes) {
_.each(alarmes, function (alarme) {
alarme.icone = iconesAlarme[alarme.tipo] || iconesAlarme.default;
alarme.tipo = tipos[alarme.tipo];
})
$scope.alarmes = alarmes;
});
}
// Deprecated function to fix issue #273
function _exibirToast(mensagem, clickFn) {
clickFn();
/*
toasty({
msg: mensagem,
onClick: clickFn
});*/
}
CommService.on('alarmes', _obterMeusAlarmes);
CommService.on('BRIEFING_START', function (parametros) {
toasty({
title: parametros.nome,
msg: $scope.res('BRIEFING_START') + ' ' + parametros.valor + ' '
+ (parametros.unidade.contains('min') ? $scope.res('COMUM_MINUTO_OR_MINUTOS') : $cope.res("COMUM_HORA_OR_HORAS")),
html: true
});
});
_obterMeusAlarmes();
ZonasDeObservacaoFilter.getInstance('zonas-de-observacao-filter').on('alarmesConfigurados', function () {
_obterAlarmesConfigurados();
});
/**
* Exibe checkbox do alarme disparado
*
* @method exibirCheckbox
*
*
*/
function exibirCheckbox(alarmeDisparado) {
alarmeDisparado.exibirCheckbox = true;
}
/**
* Exibe ícone do alarme disparado
*
* @method exibirIcone
*
*
*/
function exibirIcone(alarmeDisparado) {
alarmeDisparado.exibirCheckbox = false;
}
/**
* Exibe os alertas
*
* @method exibirMeusAlertas
*
*
*/
function exibirMeusAlertas() {
$scope.exibindoMeusAlarmes = true;
}
/**
* Esconde os alertas
*
* @method esconderMeusAlertas
*
*
*/
function esconderMeusAlertas() {
$scope.exibindoMeusAlarmes = false;
}
/**
* Muda o status de verficação do alarme
*
* @method mudarStatusVerificado
*
*
*/
function mudarStatusVerificado(alarmeDisparado, element) {
AlarmeDisparado
.mudarStatusVerficado(alarmeDisparado.id, alarmeDisparado.verificado)
.then(angular.noop, function (err) {
alarmeDisparado.verificado = !alarmeDisparado.verificado
$mdDialog.show(
$mdDialog.alert()
.parent(element)
.title('Erro')
.content(err)
.ariaLabel(err)
.ok('Ok')
);
});
}
/**
* Obtem a mensagem passada no alarme
*
* @method obterMensagem
* @param alarme {Object} alarme
*
*/
function obterMensagem(alarme) {
if (!alarme.detalhes) {
return '';
}
var mensagens = {
'Twitter': alarme.detalhes.palavraChave,
'TwitterZO': alarme.detalhes.palavraChave,
'TempoZO': alarme.detalhes.mensagem,
'AtivarCamadaZO': alarme.detalhes.mensagem
};
return mensagens[alarme.tipo];
}
/**
* Executa uma ação baseada nas informações do alarme
*
* @method acaoAlarmeDisparado
* @param alarmeDisparado {Object} alarmeDisparado
*
*/
function acaoAlarmeDisparado(alarmeDisparado) {
var click = function () { };
if (alarmeDisparado.tipo == "Briefing") {
click = function () {
};
}
$("#central_de_alarmes").click();
var acoesExternas = {
'abrirPoi': function (chave_estrangeira) {
DetalhamentoService.pegarPoiPorChaveEstrangeira(chave_estrangeira).then(function (poi) {
var latlng = {
lat: poi.latitude,
lng: poi.longitude
};
DetalhamentoManager.abrirPoi(poi.id, latlng);
CamadasService.ativarMenuCategoria(poi.CategoriumId);
MapaService.voarPara([
poi.longitude,
poi.latitude
]);
MapaService.piscarAzul(latlng);
});
},
'voarPara': function (coordenadas) {
MapaService.voarPara([
coordenadas.longitude,
coordenadas.latitude
]);
}
}
if (alarmeDisparado.acoes != null) {
_.each(alarmeDisparado.acoes, function (acao) {
acoesExternas[acao.nome](acao.parametro)
})
}
if (alarmeDisparado.ZonaObservacao) {
click = function () {
CamadasService.exibirZonasDeObservacao();
MapaManager.voarParaObjeto(alarmeDisparado.ZonaObservacao);
};
}
if (alarmeDisparado.Mensagem) {
click = function () {
MensageriaService.abrirChat(alarmeDisparado.Mensagem.Usuario);
};
}
if (alarmeDisparado.Incidente) {
click = function () {
CamadasService.reloadIncidentes(true);
IncidentesManager.voarParaIncidente(alarmeDisparado.Incidente);
MapaManager.voarParaObjeto(alarmeDisparado.Incidente);
};
}
if (alarmeDisparado.tipo === "Mensageria") {
click = function () {
var confirm = $mdDialog.alert()
.title(alarmeDisparado.titulo + ':')
.content(alarmeDisparado.mensagem)
.ok('Fechar');
$mdDialog.show(confirm);
// REFACTOR:
var scope = angular.element($('#nspopover-1')).scope();
if (scope) {
scope.hidePopover();
}
}
}
click();
// Deprecated function _exibirToast to fix issue #273
//_exibirToast(alarmeDisparado.mensagem, click);
}
/**
* Executa uma ação baseada nas informações do alarme configurado
*
* @method acaoAlarmeConfigurado
* @param alarme {Object} alarme
*
*/
function acaoAlarmeConfigurado(alarme) {
if (alarme.ZonaObservacao) {
DetalhamentoService.abrirZonaDeObservacao(alarme.ZonaObservacao.id);
if (alarme.detalhes.categoriaId) {
CamadasService.ativarMenuCategoria(alarme.detalhes.categoriaId);
}
} else {
_exibirToast('Este alarme foi configurado na adminstração');
}
}
/**
* Remove o alarme
*
* @method removerAlarme
* @param event {Object} event
* @param alarmeDisparado {Object} alarmeDisparado
*
*/
function removerAlarme(event, alarmeDisparado) {
event.stopPropagation();
alarmeDisparado.exibir = false;
AlarmeDisparado.naoExibir(alarmeDisparado.id);
}
/**
* Muda o status do alarme
*
* @method verificar
* @param tipoAlarme {Object} tipoAlarme
*
*
*/
function verificar(tipoAlarme) {
_.each(tipoAlarme.alarmes, function (alarme) {
if (!alarme.verificado) {
AlarmeDisparado.mudarStatusVerficado(alarme.id, true);
}
});
}
}
}());