/**
* @ngdoc controller
* @name Incidentes
* @module s4c.components.admin.controllers.Incidentes
*
* @description
* `AdminIncidentesCtrl` Controller da tela de Incidentes do módulo de administração
*
*
*/
(function () {
'use strict';
angular.module('s4c.controllers.AdminIncidentesCtrl', [
'ngMaterial'
])
.controller('AdminIncidentesCtrl', AdminIncidentesCtrl)
AdminIncidentesCtrl.$inject = ['$scope', '$mdDialog', 'IncidentesService']
function AdminIncidentesCtrl($scope, $mdDialog, IncidentesService) {
$scope.res = $scope.$root.res;
IncidentesService.getIncidenteTipos().then(function (resultado_tipo) {
$scope.tipos = resultado_tipo;
ordenaArray($scope.tipos);
});
IncidentesService.getIncidenteGravidades().then(function (resultado_gravidades) {
$scope.gravidades = resultado_gravidades;
ordenaArray($scope.gravidades);
});
IncidentesService.getIncidenteCategorias().then(function (resultado_categorias) {
$scope.categorias = resultado_categorias;
ordenaArray($scope.categorias);
});
/**
* @method adicionarNovoTipo
*/
function adicionarNovoTipo() {
var tipo = {};
tipo.nome = "";
tipo.status = 1;
tipo.createdAt = moment();
$scope.tipos.push(tipo);
}
/**
* @method adicionarNovaGravidade
*/
function adicionarNovaGravidade() {
if ($scope.gravidades == null) {
$scope.gravidades = [];
}
var gravidade = {};
gravidade.nome = "";
gravidade.status = 1;
gravidade.createdAt = moment();
$scope.gravidades.push(gravidade);
}
/**
* @method adicionarNovaCategoria
*/
function adicionarNovaCategoria() {
if ($scope.categorias == null) {
$scope.categorias = [];
}
var categoria = {};
categoria.nome = "";
categoria.status = 1;
categoria.urlIcone = "";
categoria.urlIconeFechado = "";
$scope.categorias.push(categoria);
}
/**
* @method removerTipo
* @param {*} tipo
*/
function removerTipo(tipo) {
if (tipo.id) {
tipo.status = 0;
} else {
$scope.tipos.splice($scope.tipos.indexOf(tipo), 1);
}
}
/**
* @method removerGravidade
* @param {*} gravidade
*/
function removerGravidade(gravidade) {
if (gravidade.id) {
gravidade.status = 0;
} else {
$scope.gravidades.splice($scope.gravidades.indexOf(gravidade), 1);
}
}
/**
* @method removerCategoria
* @param {*} categoria
*/
function removerCategoria(categoria) {
if (categoria.id) {
categoria.status = 0;
} else {
$scope.categorias.splice($scope.categorias.indexOf(categoria), 1);
}
}
/**
* @method temNomesRepetidos
* @param {*} array
*/
function temNomesRepetidos(array) {
var temRepetidos = false;
var label;
for (var index in array) {
for (var index2 in array) {
if (array[index].nome == array[index2].nome && array[index] != array[index2]) {
temRepetidos = true;
return;
}
}
}
return temRepetidos;
}
/**
* @method temElementosSemNome
* @param {*} array
*/
function temElementosSemNome(array) {
var semNome = false;
for (var index in array) {
if (!array[index].nome) {
semNome = true;
return;
}
}
return semNome;
}
/**
* @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 verificarExistenciaElemento
* @param {*} array
*/
function verificarExistenciaElemento(array) {
var existe = false;
var elementosParaRemover = [];
for (var index in array) {
if (!array[index].id) {
for (var index2 in array) {
//Se já tem tipo desativado com o memso nome, reativa.
if (array[index2].id && array[index2].nome == array[index].nome && array[index2].status == 0) {
array[index2].status = 1;
existe = true;
elementosParaRemover.push(array[index]);
}
}
}
}
//Remove os tipos novos pois os desativados ficarão no lugar deles.
if (existe) {
for (var index in elementosParaRemover) {
array.splice(array.indexOf(elementosParaRemover[index]), 1);
}
}
}
/**
* @method salvar
* @param {*} evt
*/
function salvar(evt) {
//Verifica se algum novo tipo adicionado tem mesmo nome de um desativado.
verificarExistenciaElemento($scope.tipos);
//Verifica se alguma nova gravidade adicionada tem mesmo nome de uma desativada.
verificarExistenciaElemento($scope.gravidades);
//Verifica se alguma nova categoria adicionada tem mesmo nome de uma desativada.
verificarExistenciaElemento($scope.categorias);
//Verificar se tem nomes repetidos para tipo
if (temNomesRepetidos($scope.tipos)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_NOMES_IGUAIS') + '</md-content></md-dialog>'
});
return;
}
//Verificar se tem nomes repetidos para gravidade
if (temNomesRepetidos($scope.gravidades)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('GRAVIDADE_NOMES_IGUAIS') + '</md-content></md-dialog>'
});
return;
}
//Verificar se tem nomes repetidos para categorias
if (temNomesRepetidos($scope.categorias)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('CATEGORIA_NOMES_IGUAIS') + '</md-content></md-dialog>'
});
return;
}
//Verificar se tem tipos sem nome
if (temElementosSemNome($scope.tipos)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_SEM_NOME') + '</md-content></md-dialog>'
});
return;
}
//Verificar se tem gravidades sem nome
if (temElementosSemNome($scope.gravidades)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('GRAVIDADE_SEM_NOME') + '</md-content></md-dialog>'
});
return;
}
//Verificar se tem categorias sem nome
if (temElementosSemNome($scope.categorias)) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('CATEGORIA_SEM_NOME') + '</md-content></md-dialog>'
});
return;
}
ordenaArray($scope.tipos);
ordenaArray($scope.gravidades);
ordenaArray($scope.categorias);
IncidentesService.salvarTipos($scope.tipos)
.then(function (result) {
IncidentesService.salvarGravidades($scope.gravidades)
.then(function (result) {
IncidentesService.salvarCategorias($scope.categorias)
.then(function (result) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_GRAVIDADE_SALVO') + '</md-dialog>'
});
});
});
});
}
angular.extend($scope, {
salvar: salvar,
adicionarNovoTipo: adicionarNovoTipo,
adicionarNovaGravidade: adicionarNovaGravidade,
adicionarNovaCategoria: adicionarNovaCategoria,
removerTipo: removerTipo,
removerGravidade: removerGravidade,
removerCategoria: removerCategoria
})
}
}());