/**
* @ngdoc main
* @name MainCtrl
* @module s4c.components.main.MainCtrl
*
* @description Principal controller da aplicação. Todos os eventos do menu superior da tela inicial são configurados aqui.
*
*
*/
(function () {
'use strict';
angular.module('s4c.controllers.MainCtrl', [
's4c.components.busca',
's4c.components.rotas',
's4c.components.rotas-unificadas',
's4c.components.baseConhecimento',
's4c.components.camadas',
's4c.components.cameras',
's4c.components.telegram',
's4c.components.detalhamento',
's4c.components.deteccaoImpacto',
's4c.components.collaboration',
's4c.components.mapa',
's4c.components.incidentes',
's4c.components.tarefas',
's4c.components.voip',
's4c.components.zonaObservacao',
's4c.components.planejamento',
's4c.components.msi',
's4c.components.briefingOperacional',
's4c.components.timeline',
's4c.components.briefingOperacional',
's4c.components.terminal',
's4c.components.detalhamentoRotasOlimpicas',
's4c.directives.escolhaZona',
's4c.directives.scroller',
's4c.directives.twitterArea',
's4c.directives.timepicker',
's4c.services.PresetService',
's4c.services.ParametrosS4C',
's4c.services.PermissoesService',
's4c.services.CommService',
's4c.services.WebSocket',
's4c.services.MainState',
's4c.managers',
'ng-dropdown',
'datePicker',
'angular-toasty',
'color.picker',
's4c.components.regiao',
's4c.components.areaAtuacao',
's4c.services.AuthService',
's4c.components.rastreamento',
's4c.components.pontoMovel',
's4c.components.poi',
's4c.components.webview',
's4c.components.video',
's4c.components.imagem',
's4c.components.pdf',
's4c.components.calendar',
's4c.components.contacts',
's4c.components.multivis',
's4c.components.dashboard',
's4c.components.rdp',
's4c.components.chartBar',
's4c.components.chartLine',
's4c.components.chartPie',
's4c.components.chartTreeMap',
's4c.components.hdmi',
's4c.components.whatsapp'
])
.constant('FACES', {
'FACE_FECHADA': {
'sizeX': 1,
'sizeY': 1,
'row': 0,
'col': 3,
'name': 'Fechado',
'template': 'app/components/modulos/face-fechada.html'
}
})
.controller('MainCtrl', MainCtrl)
.directive('compareToo', compareToo)
.directive('safePasswordd', safePasswordd);
/**
* @method compareToo
*/
function compareToo() {
return {
require: "ngModel",
scope: {
otherModelValue: "=compareToo"
},
link: function (scope, element, attributes, ngModel) {
ngModel.$validators.compareToo = function (modelValue) {
return modelValue === scope.otherModelValue;
};
scope.$watch("otherModelValue", function () {
ngModel.$validate();
});
}
};
}
/**
* @method safePasswordd
*/
function safePasswordd() {
return {
require: "ngModel",
scope: {
username: '=username',
nome: '=nome'
},
/**
* @method safePasswordd
* @param {*} scope
* @param {*} element
* @param {*} attributes
* @param {*} ngModel
*/
link: function (scope, element, attributes, ngModel) {
/*
* Valid passwords:
* @a0Abcab
* 0@acanan
*/
// Retorno:
// true = tudo OK
/**
* @method ngModel.$validators.safePasswordd
* @param modelValue
*/
ngModel.$validators.safePasswordd = function (modelValue) {
// Queremos que seja true:
var checkMinusculas = /(.*[a-z]){1,}/.test(modelValue);
var checkMaiusculas = /(.*[A-Z]){1,}/.test(modelValue);
var checkNumeros = /(.*[0-9]){1,}/.test(modelValue);
var checkCaracteres = /(.*[!@#$&*,.()%^]){1,}/.test(modelValue);
var checkName = true;
var checkUsername = true;
var checks = [
checkMinusculas,
checkMaiusculas,
checkNumeros,
checkCaracteres
].filter(function (check) {
return check;
});
if (modelValue !== undefined) {
var usernameTester = new RegExp(scope.username, 'i');
checkUsername = !usernameTester.test(modelValue.trim());
}
var nomeSobrenome = scope.nome.split(' ');
for (var i = 0; i < nomeSobrenome.length; i++) {
var nameTester = new RegExp(nomeSobrenome[i], 'i');
checkName = !nameTester.test(modelValue);
if (!checkName) {
break;
}
}
// Pelo menos cumpre 3 das regras
var valido = checks.length >= 3 &&
checkName && checkUsername;
/*checkMinusculas && checkMaiusculas &&
checkNumeros && checkCaracteres*/
return valido;
};
}
};
}
MainCtrl.$inject = [
'$scope',
'$rootScope',
'$timeout',
'GRIDSTER_OPTIONS_EDICAO',
'GRIDSTER_OPTIONS_VISUALIZACAO',
'UserInfo',
'UserPresets',
'$mdDialog',
'DetalhamentoService',
'$state',
'MsiService',
'CommService',
'$stateParams',
'toasty',
'CamadasService',
'AuthService',
'MapaService',
'MainState',
'MainManager',
'ModuloTwitterManager',
'CamerasManager',
'BuscaManager',
'MensageriaManager',
'AvisoOperacionalManager',
'RotasManager',
'RotasUnificadasManager',
'IncidentesManager',
'BaseConhecimentoManager',
'FacebookManager',
'EmailManager',
'TwitterManager',
'MSIManager',
'SubDetalhamentoManager',
'DetalhamentoManager',
'ZonaDeObservacaoManager',
'PlanejamentoManager',
'DeteccaoImpactoManager',
'MinhasTarefasManager',
'TarefaManager',
'BriefingOperacionalManager',
'MapaManager',
'BotoesManager',
'IncidenteEnterManager',
'AlarmeDisparadoManager',
'Preset',
'PermissoesService',
'$interval',
'EditPTarefaManager',
'TerminalManager',
'BuscaUsuariosTelegramManager',
'MainService',
'DetalhamentoRotasOlimpicasManager',
'HabilitarCamadasManager',
'localize',
'Modulo',
'AreaAtuacaoManager',
'RastreamentoManager',
'PontoMovelManager',
'ZonasDeObservacaoFilter',
'Usuario',
'FileUploader',
'API_ENDPOINT',
'$window',
'Base',
'MsiFilter',
'$http',
'PoiManager',
'Menu',
'ParametrosS4C',
'VoipManager',
'WebSocket',
'FileReaderService',
'VideoStreamService'
];
/**
* @method MainCtrl
* @param {*} $scope
* @param {*} $rootScope
* @param {*} $timeout
* @param {*} GRIDSTER_OPTIONS_EDICAO
* @param {*} GRIDSTER_OPTIONS_VISUALIZACAO
* @param {*} UserInfo
* @param {*} UserPresets
* @param {*} $mdDialog
* @param {*} DetalhamentoService
* @param {*} $state
* @param {*} MsiService
* @param {*} CommService
* @param {*} $stateParams
* @param {*} toasty
* @param {*} CamadasService
* @param {*} AuthService
* @param {*} MapaService
* @param {*} MainState
* @param {*} MainManager
* @param {*} ModuloTwitterManager
* @param {*} CamerasManager
* @param {*} BuscaManager
* @param {*} MensageriaManager
* @param {*} AvisoOperacionalManager
* @param {*} RotasManager
* @param {*} RotasUnificadasManager
* @param {*} IncidentesManager
* @param {*} BaseConhecimentoManager
* @param {*} FacebookManager
* @param {*} EmailManager
* @param {*} TwitterManager
* @param {*} MSIManager
* @param {*} SubDetalhamentoManager
* @param {*} DetalhamentoManager
* @param {*} ZonaDeObservacaoManager
* @param {*} PlanejamentoManager
* @param {*} DeteccaoImpactoManager
* @param {*} MinhasTarefasManager
* @param {*} TarefaManager
* @param {*} BriefingOperacionalManager
* @param {*} MapaManager
* @param {*} BotoesManager
* @param {*} IncidenteEnterManager
* @param {*} AlarmeDisparadoManager
* @param {*} Preset
* @param {*} PermissoesService
* @param {*} $interval
* @param {*} EditPTarefaManager
* @param {*} TerminalManager
* @param {*} BuscaUsuariosTelegramManager
* @param {*} MainService
* @param {*} DetalhamentoRotasOlimpicasManager
* @param {*} HabilitarCamadasManager
* @param {*} localize
* @param {*} Modulo
* @param {*} AreaAtuacaoManager
* @param {*} RastreamentoManager
* @param {*} PontoMovelManager
* @param {*} ZonasDeObservacaoFilter
* @param {*} Usuario
* @param {*} FileUploader
* @param {*} API_ENDPOINT
* @param {*} $window
* @param {*} Base
* @param {*} MsiFilter
* @param {*} $http
* @param {*} PoiManager
* @param {*} Menu
* @param {*} ParametrosS4C
* @param {*} VoipManager
* @param {*} WebSocket
* @param {*} FileReaderService
* @param {*} VideoStreamService
*/
function MainCtrl($scope,
$rootScope,
$timeout,
GRIDSTER_OPTIONS_EDICAO,
GRIDSTER_OPTIONS_VISUALIZACAO,
UserInfo,
UserPresets,
$mdDialog,
DetalhamentoService,
$state,
MsiService,
CommService,
$stateParams,
toasty,
CamadasService,
AuthService,
MapaService,
MainState,
MainManager,
ModuloTwitterManager,
CamerasManager,
BuscaManager,
MensageriaManager,
AvisoOperacionalManager,
RotasManager,
RotasUnificadasManager,
IncidentesManager,
BaseConhecimentoManager,
FacebookManager,
EmailManager,
TwitterManager,
MSIManager,
SubDetalhamentoManager,
DetalhamentoManager,
ZonaDeObservacaoManager,
PlanejamentoManager,
DeteccaoImpactoManager,
MinhasTarefasManager,
TarefaManager,
BriefingOperacionalManager,
MapaManager,
BotoesManager,
IncidenteEnterManager,
AlarmeDisparadoManager,
Preset,
PermissoesService,
$interval,
EditPTarefaManager,
TerminalManager,
BuscaUsuariosTelegramManager,
MainService,
DetalhamentoRotasOlimpicasManager,
HabilitarCamadasManager,
localize,
Modulo,
AreaAtuacaoManager,
RastreamentoManager,
PontoMovelManager,
ZonasDeObservacaoFilter,
Usuario,
FileUploader,
API_ENDPOINT,
$window,
Base,
MsiFilter,
$http,
PoiManager,
Menu,
ParametrosS4C,
VoipManager,
WebSocket,
FileReaderService,
VideoStreamService
) {
/* Making sure the socket is initialized. */
//CommService.start();
var permissoesAreaAtuacao;
$scope.version = MainState.getVersion();
$interval(function () {
$scope.noError = MainState.noError();
$scope.errorMessage = MainState.getErrorMessage();
}, 1000);
/**
* @method isToShow
* @param label
*/
$scope.isToShow = function (label) {
return MainState.isToShow(label);
}
/**
* @method moduleActive
*/
$scope.moduleActive = function () {
for (var index in Preset.config.preset.PresetModulos) {
var name = Preset.config.preset.PresetModulos[index].Face ? Preset.config.preset.PresetModulos[index].Face.name : '';
if (Preset.config.preset.PresetModulos[index].name == 'MODULO_DETALHAMENTO' ||
Preset.config.preset.PresetModulos[index].name == $scope.res('MODULO_DETALHAMENTO') ||
name == 'MODULO_DETALHAMENTO' ||
name == $scope.res('MODULO_DETALHAMENTO')
) {
DetalhamentoManager.ativo = false;
SubDetalhamentoManager.ativo = false;
return true;
}
}
return false;
}
if (!AuthService.user.info.permissoesAreaAtuacao) {
$http.get(API_ENDPOINT + 'area_atuacao/permissoes')
.then(function (permissoes) {
AuthService.getUserInfo().then(function (user) {
user.permissoesAreaAtuacao = permissoes.data;
AuthService.user.info.permissoesAreaAtuacao = permissoes.data;
permissoesAreaAtuacao = permissoes.data;
});
}, function (err) {
p.reject(err);
});
}
$scope.res = $rootScope.res;
$scope.blackList = $rootScope.blackList;
if (moment.locale() == 'en') {
localize.replacejscssfile("assets/i18n/leaflet.draw.pt-br.js", "assets/i18n/leaflet.draw.en-us.js", "js")
} else {
localize.replacejscssfile("assets/i18n/leaflet.draw.en-us.js", "assets/i18n/leaflet.draw.pt-br.js", "js")
}
var flyTo = $stateParams.flyTo;
if (flyTo) {
var data = flyTo.split('|');
var method = data[0];
var id = data[1];
if (method === 'incidente') {
$timeout(function () {
DetalhamentoService.pegarIncidente(id)
.then(function (incidente) {
incidente.geojson = JSON.parse(incidente.geojson);
CamadasService.reloadIncidentes(true);
$scope.IncidentesManager.voarParaIncidente(incidente);
$scope.MapaManager.voarParaObjeto(incidente);
});
}, 5000);
} else if (method === 'zona_observacao') {
$timeout(function () {
CamadasService.exibirZonasDeObservacao();
$scope.DetalhamentoManager.abrirZonaDeObservacao(id);
}, 5000);
}
}
/**
* @method getPermissoes
* @param perms
*/
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
$scope.permissoesExtras = perms.permissoesExtras;
if (!_.includes(perms.permissoesCriacao, true)) {
$scope.nenhumaPermissaoCriacao = true;
}
MainState.setPermissoes(perms);
});
MainService.on('logout', logout);
MainService.on('alarmes', function (data) {
if (!data) {
return;
}
// Se o tipo de alarme for de rota
if (data.rota) {
if (!_belongsDataRangeRota(data.alarme)) {
return;
}
}
// Se o tipo de alarme for de Zona de observação
if (data.zonaDeObservacao) {
if (!_belongsDataRange(data.alarme)) {
return;
}
_atualizaDetalhamentoZO(data.zonaDeObservacao.id);
}
var tweetsNovos;
var detalhamentoManager = DetalhamentoManager;
/*
* Se o Detalhamento da Zona de Observação estiver Ativo
* e algum alarme for disparado pertencer a ela,
* o Detalhamento é recarregado
*/
/**
* @method _atualizaDetalhamentoZO
* @param {*} id
*/
function _atualizaDetalhamentoZO(id) {
var zonaManager = MainState.getManager('ZonaDeObservacaoManager');
if (zonaManager.ativo) {
if (id === zonaManager.data.id) {
DetalhamentoManager.abrirZonaDeObservacao(id);
}
}
}
/**
* @method _belongsDataRangeRota
* @param {*} alarme
*/
function _belongsDataRangeRota(alarme) {
var dateNow = moment();
if (!alarme.detalhes) return true;
if (!alarme.detalhes.ranges) return true;
var hasRange = alarme.detalhes.ranges.filter(function (range) {
if (range.start) {
if (!(moment(range.start).isSame(dateNow) || moment(range.start).isBefore(dateNow))) {
return
}
}
if (range.end) {
if (!(moment(range.end).isSame(dateNow) || moment(range.end).isAfter(dateNow))) {
return
}
}
return true;
});
return (hasRange.length > 0);
}
/**
* @method _belongsDataRange
* @param {*} alarme
*/
function _belongsDataRange(alarme) {
var dateNow = moment();
if (!alarme.detalhes.start && !alarme.detalhes.end && !alarme.detalhes.ranges) return true;
var fullRange = {
start: moment(alarme.detalhes.start, 'DD/MM/YYYY HH:mm') || null,
end: moment(alarme.detalhes.end, 'DD/MM/YYYY HH:mm') || null
};
if (fullRange.start) {
TarefaManager.close = true;
if (!(fullRange.start.isSame(dateNow) || fullRange.start.isBefore(dateNow))) {
return;
}
}
if (fullRange.end) {
if (!(fullRange.end.isSame(dateNow) || fullRange.end.isAfter(dateNow))) {
return;
}
}
return true;
}
/**
* @method ativarPlanejamento
* @param {*} data
*/
var ativarPlanejamento = function (data) {
var planejamento = MainState.getDirective('planejamento');
var usuario = MainState.getManager('UserInfo');
var payload = data.alarme.planejamento;
CamadasService.exibirPlanejamentos();
MapaService.voarPara(data.alarme.planejamento.geometricPOI.coordinates);
if (planejamento.ativo) {
planejamento.fecharPlanejamento();
}
if (PlanejamentoManager.ativo) {
PlanejamentoManager.fecharPlanejamento();
}
PlanejamentoManager.ativo = true;
planejamento.ativo = true;
planejamento.abrirPlanejamento({
draggable: function () { },
undraggable: function () {
},
marker: {
getLatLng: function () {
return L.latLng(
payload.geojson.coordinates[1], payload.geojson.coordinates[0]
);
},
setLatLng: function (lat, lng) {
return L.latLng(lat, lng);
}
},
oldLat: data.alarme.planejamento.geometricPOI.coordinates[1],
oldLng: data.alarme.planejamento.geometricPOI.coordinates[0]
}, payload, usuario);
}
/**
* @method ativarCamadaZO
* @param {*} data
*/
var ativarCamadaZO = function (data) {
CamadasService.exibirZonasDeObservacao();
detalhamentoManager.abrirZonaDeObservacao(data.alarme.zonaObservacao.id);
CamadasService.ativarMenuCategoria(data.alarme.detalhes.categoriaId);
CamadasService.ativarSubCategorias(data.alarme.detalhes.categoriaId);
}
/**
* @method ativarZO
* @param {*} data
*/
var ativarZO = function (data) {
CamadasService.exibirZonasDeObservacao();
detalhamentoManager.abrirZonaDeObservacao(data.zonaDeObservacao.id);
CamadasService.ativarMenuCategoria(data.alarme.detalhes.categoriaId);
}
/**
* @method tocarSom
* @param {*} arquivo
*/
var tocarSom = _.debounce(function (arquivo) {
var som = new Audio(arquivo);
som.play();
}, 1000);
/**
* @method abrirIncidente
* @param {*} data
*/
var abrirIncidente = function (data) {
if (!data.alarme.incidente.geojson) {
var latLng = data.alarme.incidente.poiGeometrico.match(/\(([^)]+)\)/)[1].split(' ');
data.alarme.incidente.geojson = {
coordinates: [latLng[0], latLng[1]]
};
} else {
if (typeof data.alarme.incidente.geojson === 'string') {
data.alarme.incidente.geojson = JSON.parse(data.alarme.incidente.geojson);
}
}
CamadasService.reloadIncidentes(true);
IncidentesManager.voarParaIncidente(data.alarme.incidente);
MapaManager.voarParaObjeto(data.alarme.incidente);
detalhamentoManager.abrirIncidente(data.alarme.incidente.id, {
lat: data.alarme.incidente.geojson.coordinates[1],
lng: data.alarme.incidente.geojson.coordinates[0]
});
};
/**
* @method abrirBriefing
* @param {*} data
* @param {*} context
*/
var abrirBriefing = function (data, context) {
BriefingOperacionalManager.responderBriefing();
toasty.clear(context.id);
};
/**
* @method fitTweets
* @param {*} data
*/
var fitTweets = function (data) {
var tweets = data.tweets;
var coordinates = data.tweets.map(function (tweet) {
var coordinates = tweet.geo.coordinates.slice();
return coordinates;
});
MapaService.fitBounds(coordinates, tweets);
};
var acoesExternas = {
/**
* @method voarParaIncidente
* @param {*} id
*/
'voarParaIncidente': function (id) {
DetalhamentoService.pegarIncidente(id)
.then(function (incidente) {
incidente.geojson = JSON.parse(incidente.geojson);
incidente.geometry = incidente.geojson;
var inc = DetalhamentoManager.abrirIncidente(incidente.id, {
lat: incidente.geojson.coordinates[1],
lng: incidente.geojson.coordinates[0]
});
MainState.getDirective('filtro-msi').voarIncidente(incidente);
});
},
/**
* @method abrirPoi
* @param {*} chaves_estrangeira
*/
'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);
});
},
/**
* @method voarPara
* @param {*} coordenadas
*/
'voarPara': function (coordenadas) {
MapaService.voarPara([
coordenadas.longitude,
coordenadas.latitude
]);
},
'ligarParaRamal': function (obj) {
call(obj.ramal);
}
}
/**
* @method acoesAlarmeExterno
* @param {*} data
*/
var acoesAlarmeExterno = function (data) {
_.each(data.alarme.alarmeExterno.detalhes.acoes, function (acao) {
acoesExternas[acao.nome](acao.parametro)
})
}
/**
* @method voarParaZona
* @param {*} data
*/
var voarParaZona = function (data) {
$scope.MapaManager.voarParaObjeto(data.zonaDeObservacao);
};
/**
* @method aceitarVideoChamada
* @param {*} data
*/
var aceitarVideoChamada = function (data) {
var url_ = ParametrosS4C.wowzaUrl + '/live/' + data.poiChaveEstrangeira + '.stream/playlist.m3u8';
acoesExternas['voarPara'](data.coordenadas);
acoesExternas['abrirPoi'](data.poiChaveEstrangeira);
//window.open(data.url, '_blank', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=false,resizable=false,width=670,height=512');
window.open("/Cam/rtsp/?url=" + url_, '_blank', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=false,resizable=false,width=' + 670 + ',height=' + 400);
}
var acoes = {
'TwitterZO': fitTweets,
'TempoZO': voarParaZona,
'IncidenteZO': abrirIncidente,
'Incidente': abrirIncidente,
'agendarAlertaBriefing': abrirBriefing,
'Externo': acoesAlarmeExterno,
'External': acoesAlarmeExterno,
'AtivarCamadaZO': ativarCamadaZO,
'CercaVirtualSaidaZO': ativarZO,
'CercaVirtualEntradaZO': ativarZO,
'CercaVirtualPermanenciaZO': ativarZO,
'Planejamento': ativarPlanejamento,
'VideoChamada': aceitarVideoChamada
};
var som = _.get(data, 'alarme.detalhes.som');
if (som !== undefined) {
tocarSom(som);
}
/**
* Verifica se os tweets passados pelo backend já foram notificados
* ao usuário.
*/
if (data.alarme && (data.alarme.tipo === 'Twitter' || data.alarme.tipo == 'TwitterZO')) {
var tweetsAlarmados = localStorage.getItem('tweetsAlarmados');
var alarmados = null;
if (tweetsAlarmados) {
alarmados = tweetsAlarmados.split(',');
// Filtrando para existirem apenas tweets que não estão no
// localStorage
tweetsNovos = _.filter(data.tweets, function (tweet) {
return alarmados.indexOf(tweet.id_str) < 0;
});
if (tweetsNovos.length === 0) {
// Não há novos tweets, retornando
return;
}
// Existem novos tweets, concatenando
alarmados = alarmados.concat(_.map(tweetsNovos, function (tweet) {
return tweet.id_str;
}));
} else {
alarmados = _.map(data.tweets, function (tweet) {
return tweet.id_str;
});
}
if (alarmados.length > 0) {
localStorage.setItem('tweetsAlarmados', alarmados);
}
}
if (data.mensagem) {
if (data.tipo) {
if (data.tipo === 'Briefing') {
var permissoes = _.chain(AuthService.user.info.Perfils)
.map(function (perfil) {
return perfil.PermissaoAcessos;
})
.flatten()
.filter(function (permissao) {
return permissao.modulo === 'Briefing';
})
.value();
if (permissoes.length <= 0) {
// Usuário não tem permissãoo para responder o Briefing
return;
}
data.mensagem += '. ' + $scope('COMUM_CLICK_RESPONDER');
data.alarme = {
tipo: 'Briefing'
};
}
if (data.tipo === 'VideoChamada') {
toasty({
title: 'Chamada de Vídeo',
msg: data.data + '<br/>' + data.mensagem,
showClose: true,
timeout: false,
sound: false,
html: true,
shake: false,
onClick: function () {
acoes[data.tipo](data, this);
}
});
}
}
if (data.alarme) {
if (data.alarme.alarmeExterno) {
toasty({
title: data.alarme.alarmeExterno.titulo,
msg: data.alarme.alarmeExterno.dataHora + '<br/>' + data.alarme.alarmeExterno.mensagem,
showClose: true,
timeout: false,
sound: false,
html: true,
shake: false,
onClick: function () {
acoes[data.alarme.tipo](data, this);
}
});
} else {
if (data.time != null && data.qtdTime != null) {
toasty({
msg: localize.res(data.mensagem) + data.qtdTime + ' ' + localize.res(data.time),
html: true,
onClick: function () {
acoes[data.alarme.tipo](data, this);
}
});
} else {
toasty({
msg: localize.res(data.mensagem),
html: true,
onClick: function () {
acoes[data.alarme.tipo](data, this);
}
});
}
}
}
}
});
ParametrosS4C.showing = false;
/**
* @method addEventListener('keydown')
* @param {*} e
*/
window.addEventListener('keydown', function (e) {
if ((e.altKey) && (e.which === 65)) { // Pesquisar (Alt + A)
e.Handled = true;
if (!ParametrosS4C.showing) {
$('.barraModulo').addClass('mostraBarra');
$('.barraModulo .md-toolbar-tools span').addClass('menuFonte');
$('.barraModulo').css('position', 'absolute');
$('.btn-action').removeClass('show');
$('.wrapper').removeClass('topClass');
$('.webViewNav').parent().next().addClass('mt-5');
ParametrosS4C.showing = true;
} else {
$('.barraModulo').removeClass('mostraBarra');
$('.barraModulo .md-toolbar-tools span').removeClass('menuFonte');
// $('.btn-action').addClass('show');
$('.wrapper').addClass('topClass');
$('.webViewNav').parent().next().removeClass('mt-5');
ParametrosS4C.showing = false;
}
}
}, true);
/**
* @method addEventListener(keydown')
* @param {*} e
*/
window.addEventListener('keydown', function (e) {
if ((e.altKey) && (e.which === 81)) { // Pesquisar (Alt + Q)
e.Handled = true;
if (!ParametrosS4C.showing) {
$('.menu-superior').addClass('hoverMain');
ParametrosS4C.showing = true;
} else {
$('.menu-superior').removeClass('hoverMain');
ParametrosS4C.showing = false;
}
}
}, true);
/**
* @method addEventListener('DOMContentLoaded')
*/
document.body.addEventListener('DOMContentLoaded', function () {
var elems = document.querySelectorAll('.collapsible');
var instances = M.Collapsible.init(elems, options);
});
$timeout(MainState.menuButtonFunction, 2000);
$timeout(function () {
var electron = navigator.userAgent.indexOf("Electron") != -1;
if (!electron) {
$('.menuMain').addClass('hoverMain');
$('.menuMain').removeClass('menuMain');
$('.icone-toolbar img').addClass('png-icon');
$('#mainDiv').addClass('hoverMain');
$('#mainDiv').removeClass('menuMain');
$(".face .wrapper").addClass('topClass');
$(".face .wrapper").css('position', 'absolute');
}
}, 300);
$timeout(function () {
var electron = navigator.userAgent.indexOf("Electron") != -1;
if (!electron) {
$('.barraModulo').addClass('mostraBarra');
$('.barraModulo .md-toolbar-tools span').addClass('menuFonte');
$('.barraModulo').css('position', 'absolute');
$('.btn-action').removeClass('show');
$('.wrapper').removeClass('topClass');
$('.webViewNav').parent().next().addClass('mt-5');
ParametrosS4C.showing = true;
}else{
$('.wrapper').addClass('topClass');
}
}, 2500);
//Função para ter sempre disponível na window a posição do mouse
/**
* @method handler
* @param {*} e
*/
function handler(e) {
e = e || window.event;
var pageX = e.pageX;
var pageY = e.pageY;
if (pageX === undefined) {
pageX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
pageY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
window.positionX = pageX;
window.positionY = pageY;
}
// attach handler to the click event of the document
if (document.attachEvent) document.attachEvent('onclick', handler);
else document.addEventListener('click', handler);
/**
* @method errHandler
* @param {*} err
*/
let errHandler = function (err) {
alert(err.message);
};
/**
* @method readTextFile
* @param {*} text
*/
FileReaderService.readTextFile("/s4c_dir/videoServers.json", function (text) {
var data = JSON.parse(text);
ParametrosS4C.wowzaUrl = data.wowzaUrl;
VideoStreamService.setPlayerOptions({
socket: data.videoServerUrl,
redirectNativeMediaErrors: true,
bufferDuration: 30,
errHandler: errHandler
});
});
/**
* @method $on
* @param {*} e
* @param {*} data
*/
$rootScope.$on('s4c:windowResize', function (e, data) {
// Gridster responsivo:
GRIDSTER_OPTIONS_EDICAO.colWidth = parseInt((($(window).width() - 5) / GRIDSTER_OPTIONS_EDICAO.columns).toFixed(), 10);
var electron = navigator.userAgent.indexOf("Electron") != -1;
if (!electron) {
GRIDSTER_OPTIONS_EDICAO.rowHeight = parseInt((($(window).height() + 0) / GRIDSTER_OPTIONS_EDICAO.maxRows).toFixed() - 9, 10);
} else {
GRIDSTER_OPTIONS_EDICAO.rowHeight = parseInt((($(window).height() + 0) / GRIDSTER_OPTIONS_EDICAO.maxRows).toFixed(), 10);
}
});
MainState.loadGridsterOptions(alterPreset);
/**
* @method alterPreset
*/
function alterPreset(){
Preset.alterar(_.find(UserPresets, 'padrao') || _.find(UserPresets, 'DepartamentoId'));
}
/**
* @method logout
*/
function logout() {
releaseResources();
AuthService.logout();
$state.go('inicio');
if (MainState.getDirective('voip') != null) {
MainState.getDirective('voip').deslogar();
}
}
setTimeout(function () { MainState.resizeMenuMapa() }, 3000)
/**
* @method novoUsuario
*/
function novoUsuario() {
$mdDialog.show({
templateUrl: 'app/components/admin/modulos/usuarios/Usuario/novo.html',
controller: NovoUsuarioCtrl,
targetEvent: event
});
}
/**
* @method hideShare
*/
function hideShare() {
$scope.isCancelled = false;
}
/**
* @method showShare
*/
function showShare() {
$scope.isCancelled = true;
}
$scope.isCancelled = true;
$scope.renderers = [];
Preset.setMainRenderes($scope.renderers);
/**
* @method share
*/
$scope.share = function () {
if (ParametrosS4C.parametros.multivisConfig.length == 0) {
return;
}
if (ParametrosS4C.parametros.multivisConfig.length == 1) {
var constraint = {
url: ParametrosS4C.parametros.multivisConfig[0].hostname.replace('http', 'ws').replace('https', 'wss'),
positionX: $scope.positionX,
positionY: $scope.positionY
}
if (!$scope.renderers[ParametrosS4C.parametros.multivisConfig[0].hostname]) {
var connection1 = new render.Screenshare(constraint);
$scope.renderers[ParametrosS4C.parametros.multivisConfig[0].hostname] = connection1;
}
hideShare();
return;
}
var confirm = $mdDialog.confirm({
locals: { render: render, renderers: $scope.renderers },
templateUrl: 'app/directives/preset/escolhaMultivis.html',
controller: function ($scope, $mdDialog, render, renderers) {
$scope.res = $scope.$root.res;
$scope.multivisSelecionado;
$scope.multivisList = ParametrosS4C.parametros.multivisConfig;
$scope.positionX;
$scope.positionY;
$scope.rect = document.getElementById("bodyDiv").getBoundingClientRect();
$scope.ok = function () {
if (!$scope.multivisSelecionado) {
return;
}
var constraint = {
url: $scope.multivisSelecionado.hostname.replace('http', 'ws').replace('https', 'wss'),
positionX: $scope.positionX,
positionY: $scope.positionY
}
if (!renderers[$scope.multivisSelecionado.hostname]) {
var connection1 = new render.Screenshare(constraint);
renderers[$scope.multivisSelecionado.hostname] = connection1;
}
hideShare();
$mdDialog.hide();
}
$scope.cancelar = function () {
$mdDialog.hide();
};
$scope.rendered = false;
var interval = $interval(function () {
if (!$scope.rendered && document.getElementById("escolhaMultivis")) {
document.getElementById("escolhaMultivis").style.top = (window.positionY + 100) + "px";
if (window.positionX - 200 > 0) {
document.getElementById("escolhaMultivis").style.left = (window.positionX - 200) + "px";
} else {
document.getElementById("escolhaMultivis").style.left = window.positionX + "px";
}
$scope.rendered = true;
$interval.cancel(interval);
}
}, 30);
},
parent: angular.element(document.body)
});
$mdDialog.show(confirm).then(function () { }, function () { });
}
/**
* @method stopShare
*/
$scope.stopShare = function () {
if (ParametrosS4C.parametros.multivisConfig.length == 0) {
return;
}
if (ParametrosS4C.parametros.multivisConfig.length == 1) {
$scope.multivisSelecionado = ParametrosS4C.parametros.multivisConfig[0];
if ($scope.renderers[$scope.multivisSelecionado.hostname]) {
$scope.renderers[$scope.multivisSelecionado.hostname].closeApp($scope.renderers[$scope.multivisSelecionado.hostname]);
$scope.renderers[$scope.multivisSelecionado.hostname] = null;
}
showShare();
return;
}
var confirm = $mdDialog.confirm({
locals: { renderers: $scope.renderers },
templateUrl: 'app/directives/preset/escolhaMultivis.html',
controller: function ($scope, $mdDialog, renderers) {
$scope.res = $scope.$root.res;
$scope.multivisSelecionado;
$scope.multivisList = ParametrosS4C.parametros.multivisConfig;
$scope.rendered = false;
var interval = $interval(function () {
if (!$scope.rendered && document.getElementById("escolhaMultivis")) {
document.getElementById("escolhaMultivis").style.top = (window.positionY + 100) + "px";
if (window.positionX - 200 > 0) {
document.getElementById("escolhaMultivis").style.left = (window.positionX - 200) + "px";
} else {
document.getElementById("escolhaMultivis").style.left = window.positionX + "px";
}
$scope.rendered = true;
$interval.cancel(interval);
}
}, 30);
$scope.ok = function () {
if (!$scope.multivisSelecionado) {
return;
}
if (renderers[$scope.multivisSelecionado.hostname]) {
renderers[$scope.multivisSelecionado.hostname].closeApp(renderers[$scope.multivisSelecionado.hostname]);
renderers[$scope.multivisSelecionado.hostname] = null;
}
showShare();
$mdDialog.hide();
}
$scope.cancelar = function () {
$mdDialog.hide();
};
},
parent: angular.element(document.body)
});
$mdDialog.show(confirm).then(function () {
}, function () { });
}
/**
* @method NovoUsuarioCtrl
* @param {*} $scope
* @param {*} Usuario
* @param {*} $mdDialog
* @param {*} localize
* @param {*} FileUploader
* @param {*} API_ENDPOINT
* @param {*} AuthService
*/
function NovoUsuarioCtrl($scope, Usuario, $mdDialog, localize, FileUploader, API_ENDPOINT, AuthService) {
$scope.username = AuthService.user.info.username;
$scope.name = AuthService.user.info.nome;
$scope.res = $scope.$root.res;
/**
* @method obterPorId
* @param usuario
*/
Usuario.obterPorId(AuthService.user.info.id)
.then(function (usuario) {
$scope.user = usuario;
if ($scope.user.urlImagem != null) {
$scope.hasImage = true;
} else {
$scope.hasImage = false;
}
});
/**
* @method cancelar
*/
$scope.cancelar = function () {
$mdDialog.hide();
};
/**
* @method criar
*/
$scope.criar = function () {
$scope.cpfExists = false;
$scope.emailExists = false;
if ($scope.trocaSenha.$valid) {
$scope.user.password = $scope.senha;
} else {
$scope.user.password = null;
}
/**
* @method atualizarPerfil
* @param {*} u
*/
Usuario.atualizarPerfil($scope.user.id, $scope.user).then(function (u) {
if (!u.id) {
if (u.Status == 'CPF_USUARIO_EXISTE') {
$scope.cpfExists = true;
}
if (u.Status == 'EMAIL_USUARIO_EXISTE') {
$scope.emailExists = true;
}
return;
} else {
toBlob();
MainState.getManager('UserInfo').nome = u.nome;
MainState.getManager('UserInfo').cpf = u.cpf;
/**
* @method obterShortUsers
* @param usuarios
*/
Usuario.obterShortUsers().then(function (usuarios) {
var usuario_ = _.find(usuarios, function (user) { return user.id === u.id; });
if (usuario_) {
usuario_.nome = u.nome;
}
});
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('USUARIO_ATUALIZADO'))
.ok($scope.res('COMUM_OK')));
$mdDialog.hide(u);
}
});
};
/**
* @method setTimeout
*/
setTimeout(function () {
$scope.input = angular.element('#arquivo');
}, 1000);
/**
* @method abrirUpload
*/
$scope.abrirUpload = function () {
$scope.input.click();
}
var uploader = $scope.uploader = new FileUploader(),
uploadCallbackQueue = [];
uploader.clearQueue();
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
var megaByte = parseInt(item.size / 1000000) + "MB";
if (item.size <= 26214400) {
return item.size <= 26214400
} else {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_TAMANHOFILEULTRAPASSADO'))
.content($scope.res('LIMITE_ARQUIVO_ULTRAPASSADO', megaByte))
.ok($scope.res('COMUM_OK')))
return item.size <= 26214400
}
}
});
/**
* @method
* @param item
* @param response
*/
$scope.uploader.onCompleteItem = function (item, response) {
$scope.mensagem = response;
};
/**
* @method onAfterAddingFile
* @param Item
* @param evt
* @param arquivo
*/
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
item.novoNome = item.file.name;
enviarArquivo();
}
/**
* @method exit
* @param {*} filename
*/
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
/**
* @method onBeforeUploadItem
* @param Item
*/
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
item.file.name = item.novoNome + ext(item.file.name);
};
/**
* @method onProgressItem
* @param fileItem
* @param progress
*/
$scope.uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
};
/**
* @method onCompleteAll
* @param {*} result
*/
$scope.uploader.onCompleteAll = function (result) {
_.each(uploadCallbackQueue, function (callback) {
callback();
});
};
/**
* @method mostrarImagem
*/
$scope.mostrarImagem = function () {
$('#arquivo').each(function (index) {
if ($('#arquivo').eq(index).val() != "") {
$scope.readURL(this);
}
});
}
/**
* @method removeImage
*/
$scope.removeImage = function () {
$scope.hasImage = false;
}
/**
* @method readURL
* @param input
*/
$scope.readURL = function (input) {
if (input.files && input.files[0]) {
$scope.hasImage = true;
var reader = new FileReader();
reader.onload = function (e) {
$("#renderCropper_perfil").empty();
var img = $('<img />', {
id: 'image',
src: e.target.result,
style: 'width: 100%'
}).appendTo($('#renderCropper_perfil'));
var cropper = new Cropper(img[0], {
aspectRatio: 1,
crop: function (e) {
document.getElementById('editarX').value = e.detail.x;
document.getElementById('editarY').value = e.detail.y;
document.getElementById('editarWidth').value = e.detail.width;
document.getElementById('editarHeight').value = e.detail.height;
},
zoomable: true,
scalable: true,
movable: true,
background: false,
viewMode: 1
});
};
reader.readAsDataURL(input.files[0]);
}
}
/**
* @method enviarArquivo
*/
function enviarArquivo() {
$scope.mostrarImagem();
}
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
/**
* @method toBlob
*/
function toBlob() {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.height = document.getElementById('editarHeight').value;
canvas.width = document.getElementById('editarWidth').value;
if (!document.getElementById('image') || !$scope.hasImage) {
return;
}
ctx.drawImage(document.getElementById('image'), document.getElementById('editarX').value, document.getElementById('editarY').value, canvas.width, canvas.height, 10, 10, canvas.width, canvas.height);
if (canvas.toBlob) {
canvas.toBlob(function (blob) {
var formData = new FormData();
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
formData.append('arquivo', blob, "avatar.png");
$.ajax('/usuarios/' + $scope.user.id, {
method: "POST",
data: formData,
processData: false,
contentType: false,
headers: {
'Authorization': 'Bearer ' + tokenObj.access_token
},
success: function (data) {
MainState.getManager('UserInfo').urlImagem = data.imgUrl;
$('.imagem-usuario').attr("src", data.imgUrl);
},
error: function () {
console.log('Upload error');
}
});
});
}
}
}
/**
* @method onunload
*/
window.onunload = function () {
if (MainState.getDirective('voip') != null) {
MainState.getDirective('voip').deslogar();
}
releaseResources();
}
/**
* @method onclose
*/
window.onclose = function () {
if (MainState.getDirective('voip') != null) {
MainState.getDirective('voip').deslogar();
}
releaseResources();
}
$scope.MainManager = {
'usuarioAtivo': UserInfo
};
/**
* @method atualizarRotas
*/
$scope.atualizarRotas = function () {
var rotas = $scope.$directives.rotas || {};
rotas.atualizarRotas();
};
$scope.notificacaoManager = {
'contarNofificacao': MensageriaManager.notificacao
};
$scope.BotoesManager = {
'abrirTwitter': TwitterManager.abrir,
'abrirFacebook': FacebookManager.abrir,
'abrirMensageria': MensageriaManager.abrir,
'abrirAvisoOperacional': AvisoOperacionalManager.abrir
};
$scope.CamadasManager = {
'categoriasSelecionadas': []
};
$scope.disable = false;
$scope.showDeleteIcon = true;
/**
* @method visualizarPreset
*/
$scope.visualizarPreset = function () {
var atualPreset = Preset.config.preset;
$scope.showDeleteIcon = true;
$scope.disable = true;
Preset.salvar().then(function (preset) {
if (preset.status == 403) {
toasty({
msg: preset.message
});
atualPreset = Preset.config.preset;
Preset.editar();
} else {
if (atualPreset.id === undefined) {
atualPreset.id = preset.id;
atualPreset.nome = preset.nome;
$scope.presets.push(atualPreset);
}
Preset.editar();
}
$scope.disable = false;
}, function (err) {
if (err.status == 422) {
$mdDialog
.show($mdDialog.alert()
.title('Erro')
.content($scope.res(err.message.message))
.ok('OK'));
}
});
};
/**
* @method editarPreset
*/
$scope.editarPreset = function () {
// Pegar permissões de usuário
var permissoes = $scope.permissoesExtras,
isPresetDeAgencia = Preset.isPresetDeAgencia();
// Verificar se user tem permissão para modificar preset de grupo
if (!permissoes.alterarPresetAgencia && isPresetDeAgencia) {
toasty({
msg: $scope.res('COMUM_MSG_ALERT_EDITAR_PRESET')
});
return false;
}
if (_.keys(MainState.detalhamentosAtivos).length > 0) {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_ATENCAO'))
.content($scope.res('COMUM_MSG_ALERT_MODO_EDICAO'))
.ariaLabel($scope.res('COMUM_CONFIRMAR_EDICAO'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'));
$mdDialog
.show(confirm)
.then(function () {
_.each(MainState.detalhamentosAtivos, function (detalhamento) {
detalhamento.fechar();
})
Preset.editar();
});
} else {
Preset.editar();
}
};
/**
* @method releaseResources
*/
function releaseResources() {
CommService.stop();
closeModals();
VideoStreamService.closeAll();
CamadasService.clearReloadNodes();
Menu.clearPromise();
Preset.stopAllShare();
DetalhamentoManager.fecharTodos();
Preset.rollBackEmptyModules();
}
/**
* @method alterarPreset
* @param {*} preset
*/
function alterarPreset(preset) {
const alterarPresetFinal = new Promise((resolve)=>{
Preset.alterar(preset);
setTimeout(()=>{resolve()},200)
});
alterarPresetFinal.then(()=> $('.wrapper').addClass('topClass'))
}
/**
* @method desenharPoligono
* @param {*} e
* @param {*} data
*/
function desenharPoligono(e, data) {
$scope.RotasManager.desenharPoligono(data);
}
$rootScope.$on('mapa:desenharPoligono', desenharPoligono);
/**
* @method saveMapPosition
*/
function saveMapPosition() {
MapaService.obterPontoCentral()
.then(function (center) {
MapaService.pegarZoom(function (zoom) {
var jsonObject = {};
jsonObject.lat = center.lat;
jsonObject.lng = center.lng;
jsonObject.zoom = zoom;
Preset.saveMapPosition(Preset.config.preset.id, jsonObject);
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('MSG_PRESET_ATUALIZADO'))
.ok($scope.res('COMUM_OK')));
});
});
}
/**
* @method novoPreset
* @param {*} duplicarPreset
*/
function novoPreset(duplicarPreset) {
var presetModulos = Preset.config.preset ? angular.copy(Preset.config.preset.PresetModulos) : [],
presetAntigo = Preset.obter(),
novoPreset = Preset.novo(),
presetNomes = _.map($scope.presets, 'nome');
$mdDialog.show({
templateUrl: 'app/directives/preset/dialog.html',
controller: function ($scope) {
$scope.res = $scope.$root.res;
$scope.titulo = ((duplicarPreset) ? $scope.res('MSG_SALVAR_NOVO_PRESET') : 'Preset');
$scope.erroNomeExistente = false;
$scope.erroNome = false;
$scope.preset = {
nome: ''
};
$scope.ok = function () {
if ($scope.preset.nome.length === 0) {
$scope.erroNome = true;
$scope.erroNomeExistente = false;
return false;
}
if ($scope.preset.nome && _.indexOf(presetNomes, $scope.preset.nome) !== -1) {
$scope.erroNomeExistente = true;
$scope.erroNome = false;
return false;
}
$mdDialog.hide($scope.preset.nome);
};
$scope.cancelar = function () {
Preset.alterar(presetAntigo)
$mdDialog.cancel();
};
},
clickOutsideToClose: false,
escapeToClose: false,
}).then(function (nome) {
Preset.renomear(nome);
if (duplicarPreset && duplicarPreset === true) {
novoPreset.PresetModulos = presetModulos;
Preset.obterMeus().then(function (meus) {
$scope.presets = meus;
$scope.presets.push(novoPreset);
});
}
novoPreset.padrao = false;
$scope.presets.push(novoPreset);
$scope.alterarPreset(novoPreset);
});
}
/**
* @method renomearPreset
*/
function renomearPreset() {
var presetNomes = _.map($scope.presets, 'nome');
$mdDialog.show({
templateUrl: 'app/directives/preset/dialog.html',
controller: function ($scope) {
$scope.res = $scope.$root.res;
$scope.preset = Preset.obter();
$scope.ok = function () {
if (_.indexOf(presetNomes, $scope.preset.nome) !== -1) {
$scope.erroNomeExistente = true;
return false;
}
$mdDialog.hide($scope.preset.nome);
};
$scope.cancelar = function () {
$mdDialog.cancel();
}
},
clickOutsideToClose: false,
escapeToClose: false
}).then(function (nome) {
Preset.renomear(nome);
});
}
/**
* @method excluirPreset
* @param {*} e
* @param {*} preset
*/
function excluirPreset(e, preset) {
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
$scope.permissoesExtras = perms.permissoesExtras;
if (!$scope.permissoesRemocao.presetPublico) {
// Usuário não tem permissãoo para remover preset
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('PRESET_SEM_PERMISSAO_REMOVER'))
.ok($scope.res('COMUM_OK')));
return;
}
});
var confirm = $mdDialog.confirm()
.title($scope.res('MSG_DESEJA_EXCLUIR'))
.ariaLabel($scope.res('MSG_EXCLUIR_PRESET'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_NAO'));
$mdDialog.show(confirm).then(function () {
Preset.remover(preset).then(function () {
var presetIndex = $scope.presets.indexOf(preset);
$scope.presets.splice(presetIndex, 1);
//Alterar para o preset padrão ou o primeiro da lista, caso tenha excluído o preset atual
if (preset === Preset.obter()) {
Preset.alterar(_.find($scope.presets, 'padrao') || _.find($scope.presets, 'DepartamentoId'));
}
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_EXCLUIDO'))
.content($scope.res('PRESET_EXCLUIDO_SUCESSO'))
.ok($scope.res('COMUM_OK')));
}, function () {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('MSG_ERRO_PRESET_EXCLUIR'))
.ok($scope.res('COMUM_OK')));
});
});
e.stopPropagation();
}
/**
* @method togglePresetPadrao
* @param {*} preset
*/
function _togglePresetPadrao(preset) {
preset.padrao = !preset.padrao;
Preset.salvar(preset).then(angular.noop, function () {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('COMUM_MSG_ERRO_PRESET'))
.ok($scope.res('COMUM_OK')));
});
}
var alteracaoEmAndamento = false;
/**
* @method togglePresetPadrao
* @param {*} e
* @param {*} preset
*/
function togglePresetPadrao(e, preset) {
var antigoPresetPadrao = _.find($scope.presets, 'padrao');
if (antigoPresetPadrao && antigoPresetPadrao != preset) {
alteracaoEmAndamento = true;
antigoPresetPadrao.padrao = false;
Preset.salvar(antigoPresetPadrao).then(function () {
_togglePresetPadrao(preset);
alteracaoEmAndamento = false;
}, function () {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('COMUM_MSG_ERRO_PRESET'))
.ok($scope.res('COMUM_OK')));
})
} else if (alteracaoEmAndamento == false){
_togglePresetPadrao(preset);
}
e.stopPropagation();
}
/**
* @method meusPresets
*/
function meusPresets() {
return _.reject($scope.presets, 'DepartamentoId');
}
/**
* @method presetAgencia
*/
function presetAgencia() {
return _.find($scope.presets, 'DepartamentoId')
}
$scope.optionDropdownActive = false;
$scope.abrirScroller = function () {
var params = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=false,resizable=false,width=' + screen.width + ',height=100';
var windowRef = window.open('/#/scroller', 'Scroller', params);
windowRef.aberto = true;
windowRef.onclose = function () {
windowRef.aberto = false;
}
};
/**
* @method updateMessage
*/
function updateMessage() {
var msg = getCookie();
document.cookie = "cookie-msg-s4c=; path=/";
if (msg && msg.indexOf(":") != -1) {
var comando = msg.split(":")[0];
var id = msg.split(":")[1];
if (comando === "voarParaIncidente") {
DetalhamentoService.pegarIncidente(id)
.then(function (incidente) {
incidente.geojson = JSON.parse(incidente.geojson);
incidente.geometry = incidente.geojson;
incidente.filtro = $scope.res('TITULO_DASHBOARD');
MainState.getDirective('filtro-msi').addIncidente(incidente);
});
}
}
$timeout(updateMessage, 500);
}
/**
* @method getCookie
*/
function getCookie() {
var cname = "cookie-msg-s4c=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(cname) == 0) {
return c.substring(cname.length, c.length);
}
}
return null;
}
FileReaderService.readTextFile("/s4c_dir/dashboard.json", function (text) {
var data = JSON.parse(text);
$scope.url = data.url_dashboard;
});
/**
* @method abrirDashboard
*/
$scope.abrirDashboard = function () {
var params = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=false,resizable=false,width=1200,height=800';
var win = window.open('', 'TPID', params);
win.document.body.innerHTML = '<body style="margin:0px;padding:0px;overflow:hidden"><iframe src="' + $scope.url + '" sandbox="allow-same-origin allow-scripts allow-forms allow-modals"' +
'scroll="no" frameborder="0" style="overflow:hidden;height:98%;width:100%"></iframe></body>';
$timeout(updateMessage(), 500);
};
/**
* @method abrirPop
*/
$scope.abrirPop = function () {
$mdDialog.show({
controller: popConsultaCtrl,
templateUrl: 'app/components/pop/popConsulta.html',
parent: document.body,
locals: {
res: $scope.res
}
});
}
/**
* @method popConsultaCtrl
* @param {*} $scope
* @param {*} Base
*/
function popConsultaCtrl($scope, Base) {
$scope.res = $scope.$root.res;
$scope.tipoIncidenteSelecionado = null;
$scope.popPerfis = {};
Base.obter('tipo_incidentes/getByTipoIncidenteAndPerfilInPop').then(function (resultado_tipo) {
ordenaArray(resultado_tipo);
$scope.tipos = resultado_tipo;
angular.forEach($scope.tipos, function (tipo) {
tipo.ativo = false;
});
$scope.tiposPesquisa = resultado_tipo;
});
/**
* @method ordenaArray
* @param {*} array
*/
function ordenaArray(array) {
array = array.sort(function (a, b) {
return a.nome > b.nome ? 1 : a.nome < b.nome ? -1 : 0
});
}
/**
* @method selecionaTipoIncidente
* @param {*} tipoIncidente
*/
function selecionaTipoIncidente(tipoIncidente) {
if (tipoIncidente.ativo) {
return;
}
/**
* @method .map
* @param tipoIncidente
*/
$scope.tipos = _.map($scope.tipos, function (tipoIncidente) {
tipoIncidente.ativo = false;
return tipoIncidente;
});
tipoIncidente.ativo = true;
$scope.tipoIncidenteSelecionado = tipoIncidente;
getPopPerfisByUserAndTipoIncidente($scope.tipoIncidenteSelecionado);
}
/**
* @method getPopPerfisByUserAndTipoIncidente
* @param {*} tipoIncidente
*/
function getPopPerfisByUserAndTipoIncidente(tipoIncidente) {
Base.obter('pop_perfis/getPopPerfisByUserAndTipoIncidente/' + tipoIncidente.id).then(function (resultado) {
$scope.popPerfis = resultado;
$scope.showResults = true;
});
}
/**
* @method executeSearchTipoIncidente
* @param {*} textoTipoIncidente
*/
function executeSearchTipoIncidente(textoTipoIncidente) {
$scope.tipos = [];
var texto = textoTipoIncidente.toLowerCase();
angular.forEach($scope.tiposPesquisa, function (tipoPesquisa) {
var nome = tipoPesquisa.nome.toLowerCase();
if (nome.indexOf(texto) !== -1) {
$scope.tipos.push(tipoPesquisa);
}
});
}
/**
* @method fechar
*/
function fechar() {
$mdDialog.hide();
}
angular.extend($scope, {
selecionaTipoIncidente: selecionaTipoIncidente,
executeSearchTipoIncidente: executeSearchTipoIncidente,
fechar: fechar
});
}
$scope.showingElements = {
'documento_button': false,
'briefing_button': false,
'share_button': false,
'preset_button': false
};
/**
* @method toggleSelect
* @param elementId
* @param id
*/
$scope.toggleSelect = function (elementId, id) {
if (elementId != 'documento_button') {
$scope.showingElements['documento_button'] = false;
}
if (elementId == 'documento_button') {
if (!id) {
$('.menu-adicionar').toggleClass(' open ');
} else {
if (id !== 'dropdown-demo-menu') {
$('.menu-adicionar').removeClass(' open ');
$('#' + id).toggleClass(' open ');
} else {
if ($('#' + id).hasClass('open')) {
$('#' + id).removeClass(' open ');
} else {
$('#' + id).addClass(' open ');
}
}
}
}
if (elementId != 'briefing_button') {
$scope.showingElements['briefing_button'] = false;
}
if (elementId != 'share_button') {
$scope.showingElements['share_button'] = false;
}
if (elementId != 'preset_button') {
$scope.showingElements['preset_button'] = false;
}
$scope.showingElements[elementId] = !$scope.showingElements[elementId];
if ($scope.showingElements[elementId]) {
$window.onclick = function (event) {
event.stopPropagation();
var clickedElement = event.target;
if (!clickedElement) {
return;
}
};
} else {
$window.onclick = null;
}
}
/**
* @method showAlarmes
*/
function showAlarmes() {
ZonasDeObservacaoFilter.getInstance('zonas-de-observacao-filter').trigger('alarmesConfigurados');
TarefaManager.closePush();
}
AuthService.user.info.showFilters = false;
AuthService.user.info.filterNames = "";
AuthService.user.info.areaInterna = true;
/**
* @method openAreaDialog
*/
function openAreaDialog() {
$mdDialog.show({
templateUrl: 'app/directives/area-atuacao/trocar_area_atuacao.html',
controller: function ($scope, Modulo, AuthService) {
$scope.areaInterna = AuthService.user.info.areaInterna;
document.body.style.overflow = 'hidden';
$scope.res = $scope.$root.res;
if (AuthService.user.info.permissoesAreaAtuacao) {
$scope.permissoesArea = AuthService.user.info.permissoesAreaAtuacao;
} else {
$scope.permissoesArea = permissoesAreaAtuacao;
AuthService.user.info.permissoesAreaAtuacao = permissoesAreaAtuacao;
}
$scope.permissoesArea = $scope.permissoesArea.sort(function (perm1, perm2) {
return perm1.nomeArea > perm2.nomeArea ? 1 : perm1.nomeArea < perm2.nomeArea ? -1 : 0
});
/**
* @method each
* @param permissao
*/
_.each($scope.permissoesArea, function (permissao) {
if (!permissao.regiaoArray) {
return;
}
permissao.regiaoArray = permissao.regiaoArray.sort(function (regiao1, regiao2) {
return regiao1.nomeRegiao > regiao2.nomeRegiao ? 1 : regiao1.nomeRegiao < regiao2.nomeRegiao ? -1 : 0
});
});
$scope.ok = function () {
var filtro = { regioes: $scope.permissoesArea, areaInterna: $scope.areaInterna };
//Altera o filtro deste usuário no servidor
Base.salvar('area_atuacao/filtrar', filtro).then(function () {
reloadFrontendInfo();
});
AuthService.user.info.filterNames = "";
for (var index in $scope.permissoesArea) {
for (var index2 in $scope.permissoesArea[index].regiaoArray) {
if ($scope.permissoesArea[index].regiaoArray[index2].check) {
AuthService.user.info.showFilters = true;
AuthService.user.info.filterNames += $scope.permissoesArea[index].regiaoArray[index2].nomeRegiao + ' - ';
}
}
}
AuthService.user.info.filterNames = AuthService.user.info.filterNames.substring(0, AuthService.user.info.filterNames.length - 3);
if (AuthService.user.info.filterNames.length > 80) {
AuthService.user.info.filterNames = AuthService.user.info.filterNames.substring(0, 80);
AuthService.user.info.filterNames += ' ...';
}
AuthService.user.info.areaInterna = $scope.areaInterna;
$mdDialog.hide();
document.body.style.overflow = 'auto';
};
/**
* @method cancelar
*/
$scope.cancelar = function () {
$mdDialog.cancel();
document.body.style.overflow = 'auto';
}
/**
* @method selectAllChild
* @param permissao
*/
$scope.selectAllChild = function (permissao) {
_.each(permissao.regiaoArray, function (regiao) {
if (!permissao.check) {
regiao.check = true;
} else {
regiao.check = false;
}
});
}
/**
* @method unselectParent
* @param regiao
* @param permissao
*/
$scope.unselectParent = function (regiao, permissao) {
if (regiao.check) {
permissao.check = false;
}
}
}
}).then(function () {
});
}
/**
* @method removeFilters
*/
function removeFilters() {
for (var index in AuthService.user.info.permissoesAreaAtuacao) {
for (var index2 in AuthService.user.info.permissoesAreaAtuacao[index].regiaoArray) {
AuthService.user.info.permissoesAreaAtuacao[index].check = false;
AuthService.user.info.permissoesAreaAtuacao[index].regiaoArray[index2].check = false;
}
}
var filtro = { regioes: AuthService.user.info.permissoesAreaAtuacao, areaInterna: false };
//Altera o filtro deste usuário no servidor
Base.salvar('area_atuacao/filtrar', filtro).then(function () {
reloadFrontendInfo();
AuthService.user.info.showFilters = false;
});
}
/**
* @method reloadFrontendInfo
*/
function reloadFrontendInfo() {
Modulo.reInitModules();
CamadasService.reloadNodes();
RotasUnificadasManager.reloadRotas();
if (MainState.getDirective('filtro-msi') && !MainState.getDirective('filtro-msi').msiFechado()) {
MsiFilter.getInstance('filtro-msi').trigger('filterChanged', 'origem');
}
if (MainState.getDirective('moduloPoi')) {
MainState.getDirective('moduloPoi').reloadPois();
}
}
//Atualizar o relógio
$interval(function () {
$scope.horario = moment().format('HH:mm');
}, 60000);
function showAdminDiv() {
closeModals();
VideoStreamService.closeAll();
DetalhamentoManager.fecharTodos();
$state.go('admin.main');
Preset.rollBackEmptyModules();
releaseResources();
}
/**
* @method hasPermission
*/
$scope.hasPermission = function () {
if (!AuthService.user.info) {
return;
}
return AuthService.user.info.superuser || _isLdapAdmin(AuthService.user.info.ldapPerfis);
}
/**
* @method _isLdapAdmin
* @param {*} ldapPerfis
*/
function _isLdapAdmin(ldapPerfis) {
var isAdmin = false;
if (ldapPerfis != null && ldapPerfis.length > 0) {
var i = 0;
for (; i < ldapPerfis.length; i++) {
if (ldapPerfis[i].contains("ADMIN")) {
isAdmin = true;
}
}
}
return isAdmin;
}
/**
* @method franquias
*/
$scope.franquias = function () {
getCookie();
FileReaderService.readTextFile("/s4c_dir/url_s4s.json", function (text) {
var data = JSON.parse(text);
$window.location.href = data.url_s4s;
});
}
$scope.isElectron = navigator.userAgent.indexOf("Electron") != -1
/**
* @method reboot
*/
$scope.reboot = function () {
MainState.reboot(true, logout);
}
/**
* @method updateCockpit
*/
$scope.updateCockpit = function () {
MainState.reboot();
}
/**
* @method shutdown
*/
$scope.shutdown = function () {
MainState.shutdown(true, logout);
}
/**
* @method multivisManager
*/
$scope.multivisManager = function () {
getCookie();
FileReaderService.readTextFile("/s4c_dir/url_s4s.json", function (text) {
var data = JSON.parse(text);
$window.location.href = data.url_multivismanager;
});
}
/**
* @method getCookie
*/
function getCookie() {
try {
var tokenObj = JSON.parse($window.sessionStorage.getItem('s4cToken'));
document.cookie = "token=" + tokenObj.access_token;
} catch (erro) {
document.cookie = "token=" + $window.sessionStorage.getItem('s4cToken');
}
}
angular.extend($scope, {
$directives: {},
presetConfig: Preset.config,
buscaAtiva: false,
seletorAtivo: false,
buscaResults: [],
textoBusca: '',
criandoPreset: false,
detalhamentoAtivo: false,
usuario: UserInfo,
presets: UserPresets,
AuthService: AuthService,
showAdminDiv: showAdminDiv,
modais: {
baseConhecimento: false,
detalhamento: false,
editorRotas: false,
scroller: false,
planejamento: false,
tarefa: false,
twitter: false
},
menu: {
isOpen: false
},
//Managers:
MsiDetalhamentoManager: MsiService,
// Métodos:
renomearPreset: renomearPreset,
novoPreset: novoPreset,
alterarPreset: alterarPreset,
logout: logout,
excluirPreset: excluirPreset,
togglePresetPadrao: togglePresetPadrao,
meusPresets: meusPresets,
presetAgencia: presetAgencia,
showAlarmes: showAlarmes,
novoUsuario: novoUsuario,
saveMapPosition: saveMapPosition,
openAreaDialog: openAreaDialog,
removeFilters: removeFilters,
noError: $scope.noError,
errorMessage: $scope.errorMessage,
version: $scope.version
});
// Registrando managers no scope
$scope.DetalhamentoManager = DetalhamentoManager;
$scope.ModuloTwitterManager = ModuloTwitterManager;
$scope.CamerasManager = CamerasManager;
$scope.BuscaManager = BuscaManager;
$scope.MensageriaManager = MensageriaManager;
$scope.AvisoOperacionalManager = AvisoOperacionalManager;
$scope.RotasManager = RotasManager;
$scope.RotasUnificadasManager = RotasUnificadasManager;
$scope.BriefingOperacionalManager = BriefingOperacionalManager;
$scope.MapaManager = MapaManager;
$scope.IncidentesManager = IncidentesManager;
$scope.BaseConhecimentoManager = BaseConhecimentoManager;
$scope.TwitterManager = TwitterManager;
$scope.MSIManager = MSIManager;
$scope.SubDetalhamentoManager = SubDetalhamentoManager;
$scope.ZonaDeObservacaoManager = ZonaDeObservacaoManager;
$scope.PlanejamentoManager = PlanejamentoManager;
$scope.DeteccaoImpactoManager = DeteccaoImpactoManager;
$scope.MinhasTarefasManager = MinhasTarefasManager;
$scope.VoipManager = VoipManager;
$scope.TarefaManager = TarefaManager;
$scope.FacebookManager = FacebookManager;
$scope.EmailManager = EmailManager;
$scope.IncidenteEnterManager = IncidenteEnterManager;
$scope.AlarmeDisparadoManager = AlarmeDisparadoManager;
$scope.EditPTarefaManager = EditPTarefaManager;
$scope.TerminalManager = TerminalManager;
$scope.BuscaUsuariosTelegramManager = BuscaUsuariosTelegramManager;
$scope.DetalhamentoRotasOlimpicasManager = DetalhamentoRotasOlimpicasManager;
$scope.HabilitarCamadasManager = HabilitarCamadasManager;
$scope.AreaAtuacaoManager = AreaAtuacaoManager;
$scope.RastreamentoManager = RastreamentoManager;
$scope.PontoMovelManager = PontoMovelManager;
$scope.PoiManager = PoiManager;
/*
* Registrando managers no Service
*/
var managersList = [
'MainManager',
'ModuloTwitterManager',
'CamerasManager',
'BuscaManager',
'MensageriaManager',
'TelegramManager',
'RotasManager',
'RotasUnificadasManager',
'IncidentesManager',
'BaseConhecimentoManager',
'FacebookManager',
'EmailManager',
'TwitterManager',
'MSIManager',
'SubDetalhamentoManager',
'DetalhamentoManager',
'ZonaDeObservacaoManager',
'PlanejamentoManager',
'DeteccaoImpactoManager',
'MinhasTarefasManager',
'TarefaManager',
'BriefingOperacionalManager',
'MapaManager',
'BotoesManager',
'IncidenteEnterManager',
'AlarmeDisparadoManager',
'EditPTarefaManager',
'TerminalManager',
'BuscaUsuariosTelegramManager',
'DetalhamentoRotasOlimpicasManager',
'HabilitarCamadasManager',
'AreaAtuacaoManager',
'RastreamentoManager',
'PontoMovelManager',
'PoiManager',
'VoipManager'
];
var managers = [];
/**
* @method forEach
* @param manager
*/
managersList.forEach(function (manager) {
if ($scope.hasOwnProperty(manager)) {
MainState.registerManager(manager, $scope[manager]);
managers.push($scope[manager]);
}
});
DetalhamentoManager.setManagers(managers);
MainState.registerManager('UserInfo', UserInfo);
/*
* Removendo managers do Service:
*/
$scope.$on('$destroy', function () {
managersList.forEach(function (manager) {
MainState.unregisterManager(manager);
});
});
}
}());