/**
* @ngdoc directives
* @name DetalhamentoService
* @module s4c.directives.detalhamento.DetalhamentoService
*
* @description
* `DetalhamentoService` Gerencia a busca de informações sobre um ponto de interesse no frontend e API do backend.
*
*/
(function () {
'use strict';
angular.module('s4c.components.detalhamento')
.service('DetalhamentoService', DetalhamentoService);
DetalhamentoService.$inject = [
'$http',
'$q',
'API_ENDPOINT',
'CamadasService',
'DetalhamentoManager',
'Base'
];
function DetalhamentoService($http, $q, API_ENDPOINT, CamadasService, DetalhamentoManager, Base) {
var service = {
enviarComentario: enviarComentario,
enviarCronologia: enviarCronologia,
pegarPoi: pegarPoi,
pegarBasesProximas: pegarBasesProximas,
pegarPoisProximos: pegarPoisProximos,
pegarIncidentesProximos: pegarIncidentesProximos,
pegarAreasAtuacao: pegarAreasAtuacao,
pegarIncidente: pegarIncidente,
pegarAcervo: pegarAcervo,
pegarCamerasProximas: pegarCamerasProximas,
pegarPlanejamento: pegarPlanejamento,
findAreaAtuacao: findAreaAtuacao,
abrirZonaDeObservacao: abrirZonaDeObservacao,
pegarRotasProximas: pegarRotasProximas,
pegarEventosPlanejados: pegarEventosPlanejados,
pegarPoisContidos: pegarPoisContidos,
pegarEventosContidos: pegarEventosContidos,
removerIncidente: removerIncidente,
pegarViaturasProximas: pegarViaturasProximas,
pegarPoiPorChaveEstrangeira: pegarPoiPorChaveEstrangeira,
getAttachedFile: getAttachedFile,
on: on,
trigger: trigger,
_eventos: {
'openOptionShare': []
}
};
function on(nomeEvento, callback) {
service._eventos[nomeEvento].push(callback);
}
function trigger(nomeEvento, args) {
_.each(service._eventos[nomeEvento], function (callback) {
callback(args);
});
}
/**
* @method getAttachedFile
*
*
* @param {integer} id identificador unico do Arquivo a ser buscado
* na API do S4C
*
* @returns {Promise} Promise que resolve com as informações sobre o
* Arquivo buscado.
*/
function getAttachedFile(id) {
var deferred = $q.defer();
$http
.get(API_ENDPOINT + 'filemanager/' + id, { responseType: 'arraybuffer' })
.then(function (res) {
deferred.resolve(res.data);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findAreaAtuacao
*
*
* @param {integer} id identificador unico da Area de Atuação a ser buscada
* na API do S4C
*
* @returns {Promise} Promise que resolve com as informações sobre o
* Area de Atuação buscada.
*/
function findAreaAtuacao(id, obj) {
var deferred = $q.defer();
$http.post('/pois/area_atuacao/', {
id: id,
latitude: obj.lat,
longitude: obj.lng,
geometry: obj.geometry
}).then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method enviarComentario
*
* @param {comentario} comentario a ser enviado para API do Fusion
*
* @returns {Promise} Promise que resolve com as informações sobre o
* Comentário enviado.
*/
function enviarComentario(comentario) {
var deferred = $q.defer();
$http.put('/comentario', comentario)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method enviarCronologia
*
* @param {integer} id identificador unico do Incidente a ser buscada
* na API do S4C
* @param {cronologia} cronologia a ser enviada para API do Fusion
*
* @returns {Promise} Promise que resolve com as informações sobre a
* Cronologia enviada.
*/
function enviarCronologia(incidenteId, cronologia) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'incidentes/' + incidenteId + '/cronologia', cronologia)
.then(function (res) {
deferred.resolve(res.data);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
*
* @method pegarAcervo
*
* @param {integer} id identificador unico do Acervo a ser buscado na
* API do Fusion
*
* @returns {Promise} Promise que resolve com os dados do Acervo
* buscado.
*/
function pegarAcervo(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'acervos/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarAreasAtuacao
*
*
* @param {obj} ponto Ponto de interesse para utilizar na busca.
*
* @returns {Promise} Promise que resolve com as informações sobre a
* area de atuação em que o ponto de interesse está inserido.
*/
function pegarAreasAtuacao(ponto, tipoItem) {
var url = 'http://187.111.99.14/webservices/circunscricao.cfm?lat=';
url += ponto.lat;
url += '&lon=' + ponto.lng;
var deferred = $q.defer();
$http.get(url)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarPlanejamento
*
*
* @param {integer} id identificador unico do planejamento a ser buscado
* na API do Fusion
*
* @returns {Promise} Promise que resolve com as informações sobre o
* planejamento buscado.
*/
function pegarPlanejamento(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'camadas/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method removerIncidente
*
*
* @param {integer} id identificador unico do Incidente a ser buscado
* na API do Fusion
* @param {motivo} motivo Texto com a razão para a remoção do Incidente
*
* @returns {Promise} Promise que resolve com as informações sobre o
* Incidente buscado.
*/
function removerIncidente(id, motivo) {
var deferred = $q.defer();
$http({
method: 'DELETE',
url: API_ENDPOINT + 'incidentes/' + id,
data: motivo,
headers: {
'Content-type': 'application/json'
}
})
//$http(API_ENDPOINT + 'incidentes/' + id, { data : motivo })
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarIncidente
*
*
* @param {integer} id identificador unico do incidente a ser buscado
* na API do Fusion
*
* @returns {Promise} Promise que resolve com as informações sobre o
* incidente buscado.
*/
function pegarIncidente(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'incidentes/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarPoi
*
*
* @param {integer} id identificador unico do ponto de interesse a ser
* buscado na API do Fusion
*
* @returns {Promise} Promise que resolve com as informações sobre o
* Ponto de Interesse buscado.
*/
function pegarPoi(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'pois/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarCamerasProximas
*
*
* @param {obj} ponto Objeto contendo informações do ponto clicado para
* buscar cameras próximas à ele.
*
* @returns {Promise} Promise que resolve com as informações sobre os
* pontos próximos ao Ponto de Interesse clicado.
*/
function pegarCamerasProximas(obj) {
var deferred = $q.defer();
if (!obj.geometry) {
$http.get(API_ENDPOINT + 'cameras/proxima/' + obj.lat + '/' + obj.lng)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
} else {
$http.post(API_ENDPOINT + 'cameras/proxima', obj.geometry)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
}
return deferred.promise;
}
/**
* @method pegarIncidentesProximos
*
*
* @param {obj} ponto Objeto contendo informações do ponto clicado para
* buscar incidentes próximos à ele.
*
* @returns {Promise} Promise que resolve com as informações sobre os
* pontos próximos ao Ponto de Interesse clicado.
*/
function pegarIncidentesProximos(obj) {
var deferred = $q.defer();
var deferred = $q.defer();
if (obj.geometry) {
$http.post(API_ENDPOINT + 'incidentes/proxima', obj.geometry)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
} else {
$http.get(API_ENDPOINT + 'incidentes/proxima/' + obj.lat + '/' + obj.lng)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
}
return deferred.promise;
}
/**
* @method pegarPoisProximos
*
*
*
* @param {obj} ponto Objeto contendo informações do ponto clicado para
* buscar pontos de interesse próximos à ele.
*
* @returns {Promise} Promise que resolve com as informações sobre os
* pontos próximos ao Ponto de Interesse clicado.
*/
function pegarPoisProximos(obj) {
var deferred = $q.defer();
if (!obj.geometry) {
$http.get(API_ENDPOINT + 'pois/proxima/' + obj.lat + '/' + obj.lng)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
} else {
$http.post(API_ENDPOINT + 'pois/proxima', obj.geometry)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
}
return deferred.promise;
}
/**
* @method pegarBasesProximas
*
*
* @param {obj} ponto Objeto contendo informações do ponto clicado para
* buscar Bases de Conhecimento proximas à ele.
*
* @returns {Promise} Promise que resolve com as informações sobre as
* Bases de Conhecimento próximas ao Ponto de Interesse clicado.
*/
function pegarBasesProximas(obj) {
var deferred = $q.defer();
if (obj.geometry) {
$http.post(API_ENDPOINT + 'base_conhecimento/proxima/', obj.geometry)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
} else {
$http.get(API_ENDPOINT + 'base_conhecimento/proxima/' + obj.lat + '/' + obj.lng)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
}
return deferred.promise;
}
/**
* @method abrirZonaDeObservacao
*
*
* @param {integer} id Identificador unico da Zona de Observação
*
*/
function abrirZonaDeObservacao(id) {
DetalhamentoManager.abrirZonaDeObservacao(id);
}
/**
* @method pegarRotasProximas
*
*
* @param {integer} id Identificador único do ponto clicado para
* buscar Rotas proximas à ele.
*
* @returns {Promise} Promise que resolve com as informações sobre as
* Rotas próximas ao Ponto de Interesse clicado.
*/
function pegarRotasProximas(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'rotas_unificadas/proximas/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarEventosPlanejados
*
*
* @param {String} chave_estrangeira Identificador único do ponto clicado para
* buscar os Eventos Planejados
*
* @returns {Promise} Promise que resolve com as informações sobre os
* Eventos Planejados
*/
function pegarEventosPlanejados(chave_estrangeira) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'evento_planejado/poi/' + chave_estrangeira)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarPoisContidos
*
*
* @param {integer} id Identificador único do ponto clicado para
* buscar outros Pois contidos nele ele.
*
* @returns {Promise} Promise que resolve com as informações sobre as
* POis contidos no Ponto de Interesse clicado.
*/
function pegarPoisContidos(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'pois/contidos/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarPoiPorChaveEstrangeira
*
*
* @param {String} chave_estrangeira Identificador único do POI
*
* @returns {Promise} Promise que resolve com as informações sobre os
* POis buscados por chave_estrangeira
*/
function pegarPoiPorChaveEstrangeira(chave_estrangeira) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'pois/chave/' + chave_estrangeira)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarEventosContidos
*
*
* @param {Integer} id Identificador unido do Ponto de Interesse clicado
*
* @returns {Promise} Promise que resolve com as informações sobre os
* Eventos Planejados contidos no POI
*/
function pegarEventosContidos(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'evento_planejado/contidos/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarViaturasProximas
*
* @param {obj} Objeto Com as informações das viaturas que serão usadas na busca por outras viaturas próximas
*
* @returns {Promise} Promise que resolve com as informações sobre as
* viaturas próximas
*/
function pegarViaturasProximas(obj) {
if (!obj.geometry) {
return Base.obter('viaturas/proxima/' + obj.lat + '/' + obj.lng);
} else {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'viaturas/proxima/', obj.geometry)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
}
return service;
}
}());