/**
* @ngdoc directives
* @name DeteccaoImpacto
* @module s4c.directives.deteccaoImpacto.deteccaoImpacto
*
* @description
* 's4c-deteccao-impacto' janela flutuante que compara dois acervos e
* mostra os pontos de interesse que estão próximos um do outro em uma
* distância estipulada pelo usuário.
*
*@example
* <s4c-deteccao-impacto>
* </s4c-deteccao-impacto>
*/
(function () {
'use strict';
deteccaoImpactoCtrl.$inject = [
'$scope',
'DeteccaoImpactoService',
'MainState',
'DeteccaoImpactoManager',
'$filter',
'CamadasService',
'localize'
];
function deteccaoImpactoCtrl($scope, DeteccaoImpactoService, MainState, DeteccaoImpactoManager, $filter, CamadasService, localize) {
$scope.res = $scope.$root.res;
/**
* Abre o módulo de detecção de impacto
*
* @method abrirDeteccaoImpacto
*
*
*/
function abrirDeteccaoImpacto() {
$scope.ativo = true;
$scope.deteccaoImpactoModel = {};
DeteccaoImpactoService.pegarListaCategorias()
.then(function (data) {
$scope.categorias = data;
});
}
/**
* Fecha o módulo de detecção de impacto
*
* @method fecharDeteccaoImpacto
*
*
*/
function fecharDeteccaoImpacto() {
$scope.ativo = false;
$scope.model = {};
DeteccaoImpactoManager.fechar();
}
/**
* Voa para o Objeto passado como parâmetro
*
* @method fecharDeteccaoImpacto
*
* @param obj {Object} Json com as informações de Detecção de Impacto
*
*/
function voarPara(obj) {
$scope.$parent.DetalhamentoManager.voarParaObjeto(obj);
CamadasService.ativarMenuCategoria($scope.model.referencia.id);
CamadasService.ativarMenuCategoria($scope.model.alvo.id);
}
/**
* Pesquisa por um termo específico
*
* @method pesquisar
*
* @param termo {Object} Texto a ser pesquisado
*
*/
function pesquisar(termo) {
return _.filter($scope.categorias, function (categoria) {
return _.includes($filter('latinize')(categoria.nome.toLowerCase()), termo.toLowerCase());
});
}
$scope.nome;
$scope.pathReferencia;
/**
* Seleciona uma referência para a Detecção de Impacto
*
* @method selecionarReferencia
*
* @param item {Object}
*
*/
function selecionarReferencia(item) {
if (!item) {
return;
}
$scope.nome = item.nome;
DeteccaoImpactoService.pegarPathCategoria(item.id)
.then(function (data) {
$scope.pathReferencia = data;
});
}
$scope.pathAlvo;
/**
* Seleciona um alvo para a Detecção de Impacto
*
* @method selecionarAlvo
*
* @param item {Object}
*
*/
function selecionarAlvo(item) {
if (!item) {
return;
}
DeteccaoImpactoService.pegarPathCategoria(item.id)
.then(function (data) {
$scope.pathAlvo = data;
});
}
/**
* Faz a pesquisa por Detecção de Impacto
*
* @method buscar
*
*
*
*/
function buscar() {
DeteccaoImpactoService.capturar({
categoriaId1: $scope.model.referencia.id,
categoriaId2: $scope.model.alvo.id,
distancia: $scope.model.distancia
})
.then(function (data) {
if (data.length === 0) {
$scope.semResultados = true;
} else {
$scope.semResultados = false;
}
var resultado = {};
_.each(data, function (_d) {
resultado[_d.id] = {
id: _d.id,
nome: _d.nome,
descricao: _d.descricao,
geojson: _d.geojson,
data: []
};
});
_.each(data, function (_d) {
resultado[_d.id].data.push({
id: _d.id2,
nome: _d.nome2,
descricao: _d.descricao2,
geojson: _d.geojson2,
urlIcone: _d.urlIcone2,
distancia: _d.distancia
});
});
$scope.resultado = resultado;
});
}
angular.extend($scope, {
ativo: false,
model: {
referencia: null,
alvo: null,
distancia: 500
},
categorias: {},
resultado: {},
voarPara: voarPara,
pesquisar: pesquisar,
selecionarReferencia: selecionarReferencia,
selecionarAlvo: selecionarAlvo,
$api: {
abrirDeteccaoImpacto: abrirDeteccaoImpacto,
fecharDeteccaoImpacto: fecharDeteccaoImpacto,
buscar: buscar
}
});
MainState.registerDirective('deteccaoImpacto', $scope.$api);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('deteccaoImpacto');
});
}
function s4cDeteccaoImpacto() {
return {
restrict: 'EA',
templateUrl: 'app/directives/deteccao-impacto/deteccao-impacto.html',
replace: true,
scope: {},
controller: deteccaoImpactoCtrl
};
}
/**
* @ngdoc overview
* @name s4c.components.deteccaoImpacto
*/
angular.module('s4c.components.deteccaoImpacto', [])
.directive('s4cDeteccaoImpacto', s4cDeteccaoImpacto);
}());