/**
* @ngdoc service
* @name Incidente
* @module s4c.services.Incidente
*
* @description Componente para acesso a api do backend e/ou comunicação entre controllers
*
*
*/
(function () {
'use strict';
IncidentesService.$inject = [
'$rootScope',
'$http',
'$q',
'API_ENDPOINT',
'Base',
'$mdDialog',
'$timeout',
'MsiService'
];
/**
* @method IncidentesService
* @param {*} $rootScope
* @param {*} $http
* @param {*} $q
* @param {*} API_ENDPOINT
* @param {*} Base
* @param {*} $mdDialog
* @param {*} $timeout
* @param {*} MsiService
*/
function IncidentesService($rootScope, $http, $q, API_ENDPOINT, Base, $mdDialog, $timeout, MsiService) {
var res = $rootScope.res;
var showDialog = true;
var self = this;
self.tipos = undefined;
self.canLoad = true;
self.p = $q.defer();
/**
* @method getIncidenteTipos
*/
function getIncidenteTipos() {
$http.get(API_ENDPOINT + 'tipo_incidentes/')
.then(function (res) {
if (typeof res.data === 'object') {
self.canLoad = true;
self.tipos = res.data;
self.p.resolve(res.data);
} else {
self.p.reject();
}
}, function (err) {
self.p.reject(err);
if (showDialog) {
if (err.data.message) {
$mdDialog
.show($mdDialog.alert()
.title(res('COMUM_ERRO'))
.content(res(err.data.message))
.ok(res('COMUM_OK')));
showDialog = false;
$timeout(function () {
showDialog = true;
}, 30000);
}
}
});
return self.p.promise;
}
/**
* @method salvarTipos
* @param {*} tipos
*/
function salvarTipos(tipos) {
return Base.salvar('tipo_incidentes/', tipos);
}
/**
* @method salvarGravidades
* @param {*} gravidades
*/
function salvarGravidades(gravidades) {
return Base.salvar('gravidade_incidentes/', gravidades);
}
/**
* @method salvarCategorias
* @param {*} categorias
*/
function salvarCategorias(categorias) {
return Base.salvar('categoriaIncidentes/', categorias);
}
/**
* @method getIncidentesByDepartamentoId
* @param {*} id
*/
function getIncidentesByDepartamentoId(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'departamentos/' + id + '/incidentes/')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
if (showDialog) {
if (err.data.message) {
$mdDialog
.show($mdDialog.alert()
.title(res('COMUM_ERRO'))
.content(res(err.data.message))
.ok(res('COMUM_OK')));
showDialog = false;
$timeout(function () {
showDialog = true;
}, 30000);
}
}
});
return deferred.promise;
}
/**
* @method getCategoriasIncidente
*/
function getCategoriasIncidente() {
return MsiService.getCategorias();
}
/**
* @method getIncidentesPorInput
* @param {*} input
*/
function getIncidentesPorInput(input) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'incidentes/inputs/' + encodeURIComponent(input))
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getIncidentes
*/
function getIncidentes() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'incidentes/')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
if (showDialog) {
if (err.data.message) {
$mdDialog
.show($mdDialog.alert()
.title(res('COMUM_ERRO'))
.content(res(err.data.message))
.ok(res('COMUM_OK')));
showDialog = false;
$timeout(function () {
showDialog = true;
}, 30000);
}
}
});
return deferred.promise;
}
/**
* @method pegarDepartamentos
*/
function pegarDepartamentos() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'departamentos')
.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 pegarCamerasProximas
* @param {*} ponto
*/
function pegarCamerasProximas(ponto) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'cameras/proxima/' + ponto.lat + '/' + ponto.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 saveIncidente
* @param {*} incidente
*/
function saveIncidente(incidente) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'incidentes', incidente)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
if (showDialog) {
if (err.data.message) {
$mdDialog
.show($mdDialog.alert()
.title(res('COMUM_ERRO'))
.content(res(err.data.message))
.ok(res('COMUM_OK')));
showDialog = false;
$timeout(function () {
showDialog = true;
}, 30000);
}
}
});
return deferred.promise;
}
/**
* @method findAbertos
* @param {*} from
* @param {*} to
*/
function findAbertos(from, to) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'incidentes/abertos')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findByFilter
* @param {*} filtro
*/
function findByFilter(filtro) {
return Base.obter('incidentes/', {
filtro: filtro || {}
});
}
/**
* @method findSimpleByFilter
* @param {*} filtro
*/
function findSimpleByFilter(filtro) {
return Base.obter('incidentes/simple/', {
filtro: filtro || {}
});
}
/**
* @method getCountStatus
* @param {*} filtro
*/
function getCountStatus(filtro) {
return Base.obter('incidentes/countbystatus/', {
filtro: filtro || {}
});
}
/**
* @method findIncidenteGeoJSONById
* @param {*} id
*/
function findIncidenteGeoJSONById(id) {
return Base.obter('incidentes/geojson/?filtro={"where":{"id":' + id + '}}');
}
/**
* @method getAnalytics
* @param {*} dataInicio
* @param {*} dataFim
*/
function getAnalytics(dataInicio, dataFim) {
return Base.obter('incidentes/analytics/' + dataInicio + '/' + dataFim, {});
}
var self = this;
self.deferred = $q.defer();
self.gravidades = undefined;
self.canLoad = true;
/**
* @method getIncidenteGravidades
*/
function getIncidenteGravidades() {
$http.get(API_ENDPOINT + 'gravidade_incidentes/')
.then(function (res) {
self.canLoad = true;
self.gravidades = res.data;
if (typeof res.data === 'object') {
self.deferred.resolve(res.data);
} else {
self.deferred.reject();
}
}, function (err) {
self.deferred.reject(err);
});
return self.deferred.promise;
}
var self = this;
self.categoriaPromisse = $q.defer();
self.categorias = undefined;
self.canLoad = true;
/**
* @method getIncidenteCategorias
*/
function getIncidenteCategorias() {
$http.get(API_ENDPOINT + 'categoriaIncidentes/')
.then(function (res) {
self.canLoad = true;
self.categorias = res.data;
if (typeof res.data === 'object') {
self.categoriaPromisse.resolve(res.data);
} else {
self.categoriaPromisse.reject();
}
}, function (err) {
self.categoriaPromisse.reject(err);
});
return self.categoriaPromisse.promise;
}
/**
* @method atualizarIncidente
* @param {*} id
* @param {*} incidente
*/
function atualizarIncidente(id, incidente) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'incidentes/' + id, incidente)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getPdfReport
* @param {*} id
*/
function getPdfReport(ids) {
var deferred = $q.defer();
$http
.post(API_ENDPOINT + 'dashboard/incidentes/export', ids, { responseType: 'arraybuffer' })
.then(function (res) {
deferred.resolve(res.data);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findIncidentesByCategoriaGeoJson
* @param {*} categoriaId
* @param {*} status
*/
function findIncidentesByCategoriaGeoJson(categoriaId, status) {
return Base.obter('/incidentes/categorias/' + categoriaId + '/geojson/' + status);
}
/**
* @method parseIncidente
* @param {*} incidente
*/
function parseIncidente(incidente) {
var data = '';
var icons = {
green: '/data-s4c/teste/ic_incidentes_green_26px.svg',
red: '/data-s4c/teste/ic_incidentes_grey_26px.svg',
purple: '/data-s4c/teste/ic_incidentes_purple_24px.svg'
};
incidente.icon = icons.green; // Default icon
/* Formata o Início e o Fim */
if (incidente.inicio) {
incidente.inicio = moment(moment(incidente.inicio).toDate());
}
if (incidente.fim) {
incidente.fim = moment(moment(incidente.fim).toDate());
}
if (incidente.inicio && incidente.fim) {
data = _formatDataIncidenteToString(incidente.inicio, incidente.fim);
}
var gravidades = IncidenteFilter.getInstance('filtro-incidentes').gravidades;
incidente.gravidade = _.find(gravidades, { id: incidente.GravidadeIncidenteId });
if (incidente.status === 'ABERTO') {
incidente.icon = icons.red;
if (incidente.inicio) {
data = incidente.inicio.format('DD/MM/YYYY - HH:mm');
//if (moment().dayOfYear() > incidente.inicio.dayOfYear()) {
// data += incidente.inicio.format(' (MMM D)');
//}
}
if (incidente.inicio.dayOfYear() < moment().dayOfYear()) {
incidente.icon = icons.purple;
incidente.urlIcone = incidente.urlIcone.replace('vermelho', 'purple');
}
}
if (incidente.status === 'FECHADO') {
incidente.urlIcone = incidente.urlIconeFechado || incidente.TipoIncidente.urlIconeFechado || incidente.CategoriaIncidente.urlIconeFechado;
if (incidente.fim && incidente.inicio) {
if (moment().dayOfYear() > incidente.fim.dayOfYear()) {
incidente.icon = icons.purple;
incidente.urlIcone = incidente.urlIcone.replace('vermelho', 'purple');
}
}
}
incidente.data = data;
return incidente;
}
/**
* @method _formatDataIncidenteToString
* @param {*} dataInicio
* @param {*} dataFim
*/
function _formatDataIncidenteToString(dataInicio, dataFim) {
var dataString = '';
/* Início do incidente menor que a data do Fim */
if (dataInicio.dayOfYear() < dataFim.dayOfYear()) {
dataString = dataInicio.format('HH:mm');
dataString += dataInicio.format(' (MMM D)');
dataString += ' - ';
dataString += dataFim.format('HH:mm');
dataString += dataFim.format(' (MMM D)');
}
/* Início do incidente igual a data do Fim */
if (dataInicio.dayOfYear() === dataFim.dayOfYear()) {
dataString = dataInicio.format('HH:mm');
dataString += ' - ';
dataString += dataFim.format('HH:mm');
}
return dataString;
}
return {
getIncidenteTipos: getIncidenteTipos,
findAbertos: findAbertos,
getIncidentes: getIncidentes,
getAnalytics: getAnalytics,
pegarCamerasProximas: pegarCamerasProximas,
pegarDepartamentos: pegarDepartamentos,
getIncidentesByDepartamentoId: getIncidentesByDepartamentoId,
getIncidentesPorInput: getIncidentesPorInput,
findByFilter: findByFilter,
getCountStatus: getCountStatus,
saveIncidente: saveIncidente,
getCategoriasIncidente: getCategoriasIncidente,
atualizarIncidente: atualizarIncidente,
getIncidenteGravidades: getIncidenteGravidades,
getPdfReport: getPdfReport,
findIncidenteGeoJSONById: findIncidenteGeoJSONById,
findIncidentesByCategoriaGeoJson: findIncidentesByCategoriaGeoJson,
salvarTipos: salvarTipos,
salvarGravidades: salvarGravidades,
salvarCategorias: salvarCategorias,
incidentes: [],
parseIncidente: parseIncidente,
findSimpleByFilter: findSimpleByFilter,
getIncidenteCategorias: getIncidenteCategorias
};
}
angular.module('s4c.services')
.service('IncidentesService', IncidentesService);
})();