/**
* @ngdoc directives
* @name PontoMovel
* @module s4c.directives.pontoMovel.PontoMovel
*
* @description `PontoMovel` exibe informações sobre um ponto de
* interesse
*
*
* @example <s4c-ponto-movel> </s4c-ponto-movel>
*
*
*/
(function () {
'use strict';
pontoMovelController.$inject = [
'$scope',
'$window',
'$filter',
'$anchorScroll',
'ngTableParams',
'MsiService',
'MsiFilter',
'CommService',
'MainState',
'DetalhamentoManager',
'IncidentesManager',
'MapaManager',
'CamadasService',
'localize',
'Base',
'$http',
'API_ENDPOINT',
'$mdDialog',
'PontoMovelManager',
'MapaService'
];
function pontoMovelController(
$scope,
$window,
$filter,
$anchorScroll,
ngTableParams,
MsiService,
MsiFilter,
CommService,
MainState,
DetalhamentoManager,
IncidentesManager,
MapaManager,
CamadasService,
localize,
Base,
$http,
API_ENDPOINT,
$mdDialog,
PontoMovelManager,
MapaService) {
$scope.res = $scope.$root.res;
$scope.data = {};
$scope.dispositivos = [];
$scope.listERInfo = [];
$scope.dados = {};
$scope.start = getFiltroDataInicial();
$scope.end = getFiltroDataFinal();
$scope.posicaoAtualER = {};
$scope.poiHidden = true;
$scope.poisProximos = [];
$scope.categoriasPoi = [];
$scope.cameraHidden = true;
$scope.camerasProximas = [];
$scope.categoriasCamera = [];
$scope.percursoHidden = true;
/**
* @method getFiltroDataInicial
*/
function getFiltroDataInicial() {
var dataAtual = new Date();
dataAtual.setHours(0);
dataAtual.setMinutes(0);
return moment(dataAtual).format('DD/MM/YYYY HH:mm');
}
/**
* @method getFiltroDataFinal
*/
function getFiltroDataFinal() {
var dataAtual = new Date();
dataAtual.setHours(23);
dataAtual.setMinutes(59);
return moment(dataAtual).format('DD/MM/YYYY HH:mm');
}
/**
* @method buscarPontoMovel
* @param {*} id
* @param {*} ponto
*/
function buscarPontoMovel(id, ponto) {
$http.get(API_ENDPOINT + "ponto_movel/" + id)
.then(function (result) {
$scope.data = result.data;
$scope.posicaoAtualER = ponto;
buscarPosicoesER($scope.data.idElementoRastreavel);
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method buscarPontosMoveisPorTipo
* @param {*} idTipoPontoMovel
*/
function buscarPontosMoveisPorTipo(idTipoPontoMovel) {
removerLayers(idTipoPontoMovel);
$http.get(API_ENDPOINT + "ponto_movel/tipo/" + idTipoPontoMovel)
.then(function (result) {
var listPontosMoveis = result.data;
_.each(listPontosMoveis, function (pontoMovel) {
desenharPontoMovel(pontoMovel);
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method desenharPontoMovel
* @param {*} pontoMovel
*/
function desenharPontoMovel(pontoMovel) {
$http.post(API_ENDPOINT + "obterPosicaoAtualER", pontoMovel.idElementoRastreavel)
.then(function (result) {
if (result == null || result == undefined) {
return;
}
var elementoRastreavelInfo = result.data;
var ponto = {
lat: elementoRastreavelInfo.latitude,
lng: elementoRastreavelInfo.longitude
};
MapaManager.desenharPontoMovel(pontoMovel, ponto);
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method buscarPosicoesER
* @param {*} idElementoRastreavel
*/
function buscarPosicoesER(idElementoRastreavel) {
$http.post(API_ENDPOINT + "obterPosicoesER", idElementoRastreavel)
.then(function (result) {
$scope.listERInfo = result.data;
MapaManager.desenharERs($scope.listERInfo, $scope.posicaoAtualER, $scope.data);
_.each($scope.listERInfo, function (erInfo) {
$scope.dados[erInfo.dispositivoRastreamento.nome + '_hidden'] = true;
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method exibirDispositivo
* @param {*} dispositivo
*/
function exibirDispositivo(dispositivo) {
$scope.dados[dispositivo.nome + '_hidden'] = !$scope.dados[dispositivo.nome + '_hidden'];
}
/**
* @method buscarPercurso
*/
function buscarPercurso() {
/*if ($scope.dispositivoFiltro == null || $scope.dispositivoFiltro == undefined || $scope.dispositivoFiltro == ""){
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content("Selecione o dispositivo que deseja visualizar o percurso")
.ok($scope.res('COMUM_OK')));
return;
}*/
var parameterHistoricoPosicoesER = { idElementoRastreavel: $scope.data.idElementoRastreavel, startStr: $scope.start, endStr: $scope.end };
$http.post(API_ENDPOINT + "obterHistoricoPosicoesER", parameterHistoricoPosicoesER)
.then(function (result) {
var listHistoricoPosicoesER = result.data;
if (listHistoricoPosicoesER.length == 0) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content("Nenhum percurso encontrado neste período")
.ok($scope.res('COMUM_OK')));
return;
}
if (listHistoricoPosicoesER.length > 450) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content("A pesquisa retornou muitas informações, o que pode tornar a visualização lenta. Modifique o filtro.")
.ok($scope.res('COMUM_OK')));
return;
}
MapaManager.desenharPercursoER(listHistoricoPosicoesER, $scope.posicaoAtualER, $scope.data);
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method
* @param {*} idTipoPontoMovel
*/
function removerLayers(idTipoPontoMovel) {
var layersToRemove = [];
_.each(PontoMovelManager.layersPontoMovel.getLayers(), function (layer) {
if (layer != undefined && layer.pontoMovel.tipo.id == idTipoPontoMovel) {
layersToRemove.push(layer);
PontoMovelManager.layersPontoMovel.removeLayer(layer);
}
});
_.each(PontoMovelManager.subItens.getLayers(), function (layer) {
if (layer != undefined && layer.pontoMovel.tipo.id == idTipoPontoMovel) {
layersToRemove.push(layer);
PontoMovelManager.subItens.removeLayer(layer);
}
});
if (PontoMovelManager.layersPontoMovel.getLayers().length == 0) {
MapaService.removerPoiClicado();
}
MapaService.removerLayers(layersToRemove);
}
/**
* @method pegarPOIs
*/
function pegarPOIs() {
if ($scope.poiHidden) {
$scope.categoriasPoi = [];
$http.get(API_ENDPOINT + 'pois/proxima/' + $scope.posicaoAtualER.lat + '/' + $scope.posicaoAtualER.lng)
.then(function (res) {
$scope.poisProximos = res.data;
$scope.poisProximos = _.map($scope.poisProximos, function (poi) {
poi.tipo = 'poi';
var existeCategoria = false;
_.each($scope.categoriasPoi, function (categoriaPoi) {
if (categoriaPoi == poi.categoriaNome) {
existeCategoria = true;
}
});
if (!existeCategoria) {
$scope.categoriasPoi.push(poi.categoriaNome);
$scope.dados[poi.categoriaNome + '_hidden'] = true;
$scope.dados[poi.categoriaNome + '_poisProximos'] = [];
}
$scope.dados[poi.categoriaNome + '_poisProximos'].push(poi);
return poi;
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
$scope.poiHidden = !$scope.poiHidden;
}
/**
* @method pegarCameras
*/
function pegarCameras() {
if ($scope.cameraHidden) {
$scope.categoriasCamera = [];
$http.get(API_ENDPOINT + 'cameras/proxima/' + $scope.posicaoAtualER.lat + '/' + $scope.posicaoAtualER.lng)
.then(function (res) {
$scope.camerasProximas = res.data;
MapaService.removerLinhas();
$scope.camerasProximas = _.map($scope.camerasProximas, function (camera) {
var existeCategoria = false;
_.each($scope.categoriasCamera, function (categoriaCamera) {
if (categoriaCamera == camera.categoriaNome) {
existeCategoria = true;
}
});
if (!existeCategoria) {
$scope.categoriasCamera.push(camera.categoriaNome);
$scope.dados[camera.categoriaNome + '_hidden'] = true;
$scope.dados[camera.categoriaNome + '_camerasProximas'] = [];
}
$scope.dados[camera.categoriaNome + '_camerasProximas'].push(camera);
return camera;
});
if ($scope.camerasProximas.length > 0) {
_.chain($scope.camerasProximas)
.map('CategoriaCameraId')
.uniq()
.each(function (categoriaCameraId) {
CamadasService.ativarMenuCategoriaCamera(categoriaCameraId);
})
.value();
}
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
$scope.cameraHidden = !$scope.cameraHidden;
}
/**
* @method exibirCategoria
* @param {*} categoria
*/
function exibirCategoria(categoria) {
$scope.dados[categoria + '_hidden'] = !$scope.dados[categoria + '_hidden'];
}
/**
* @method voarParaSubItem
* @param {*} obj
*/
function voarParaSubItem(obj) {
PontoMovelManager.voarParaSubItem($scope.data, obj);
}
/**
* @method updatePosicaoPontoMovel
* @param {*} elementoRastreavelInfo
*/
CommService.on('updatePosicaoPontoMovel', function (elementoRastreavelInfo) {
console.log('Socket PontoMovel - updatePosicaoPontoMovel');
MapaManager.atualizarPosicaoPontoMovel(elementoRastreavelInfo);
});
/**
* @method notifyExtraPontoMovel
* @param {*} elementoRastreavelInfo
*/
CommService.on('notifyExtraPontoMovel', function (elementoRastreavelInfo) {
console.log('Socket PontoMovel - notifyExtraPontoMovel');
//Se nenhum ponto móvel estiver carregado não exibo a notificação
if (PontoMovelManager.layersPontoMovel.getLayers().length == 0) {
return;
}
var mensagem = "";
_.each(elementoRastreavelInfo.extras, function (extra) {
mensagem = mensagem.concat('<label class="md-accent" style="padding-left: 30px; font-size: 14px">' + extra.nome + ': ' + extra.valor + '</label>', '<br>');
});
$mdDialog.show({
scope: $scope.$new(),
template: '<md-dialog draggable style="width: 300px;">' +
'<md-title style="padding: 20px 0px 0px 20px;">' + 'Notificação Extra - ' + elementoRastreavelInfo.nomeER + '</md-title>' +
'<br>' +
'<div flex>' +
' <div style="height: 100px;" class="ag-fresh">' +
'<label class="md-accent" style="padding-left: 30px; font-size: 14px">' + $scope.res('PONTO_MOVEL_DATA_POSICAO') + ': '
+ elementoRastreavelInfo.dataPosicaoStr + '</label>' + '<br>' +
mensagem + '<br>' +
' </div>' +
' <div class="md-actions">' +
' <md-button ng-click="fechar()">' + $scope.res('COMUM_CANCELAR') + '</md-button>' +
' </div>' +
' </div>' +
'</md-dialog>',
controller: function ($scope, $mdDialog) {
$scope.fechar = function () {
$mdDialog.hide();
}
}
});
});
function fechar() {
$scope.dispositivos = [];
$scope.listERInfo = [];
$scope.poiHidden = true;
$scope.poisProximos = [];
//desativarLayer();
}
angular.extend($scope, {
data: {},
exibirDispositivo: exibirDispositivo,
buscarPercurso: buscarPercurso,
exibirCategoria: exibirCategoria,
pegarPOIs: pegarPOIs,
pegarCameras: pegarCameras,
voarParaSubItem: voarParaSubItem,
$apiPontoMovel: {
buscarPontoMovel: buscarPontoMovel,
fechar: fechar,
buscarPontosMoveisPorTipo: buscarPontosMoveisPorTipo,
removerLayers: removerLayers
}
});
MainState.registerDirective('pontoMovel', $scope.$apiPontoMovel);
}
function s4cPontoMovel() {
return {
restrict: 'EA',
templateUrl: 'app/directives/ponto-movel/ponto_movel.html',
scope: {},
controller: pontoMovelController
};
}
angular.module('s4c.components.pontoMovel', [])
.directive('s4cPontoMovel', s4cPontoMovel);
})();