/**
* @ngdoc controllers
* @name Bases
* @module s4c.components.admin.controllers.Bases
*
* @description
* `AdminBasesCtrl` Controller da tela de Base de Conhecimento do módulo de administração
*
*
*/
(function () {
'use strict';
angular.module('s4c.controllers.AdminBasesCtrl', [
'ngMaterial'
])
.controller('AdminBasesCtrl', AdminBasesCtrl)
AdminBasesCtrl.$inject = ['$scope', '$mdDialog', 'TipoBase']
function AdminBasesCtrl($scope, $mdDialog, TipoBase) {
$scope.res = $scope.$root.res;
$scope.tipos;
TipoBase.obterTipos().then(function (resultado) {
$scope.tipos = resultado;
ordenaTipos();
});
/**
* @method adicionarNovoTipo
*/
function adicionarNovoTipo() {
var tipo = {};
tipo.nome = "";
tipo.status = 1;
tipo.createdAt = moment();
$scope.tipos.push(tipo);
}
/**
* @method removerTipo
* @param {*} tipo
*/
function removerTipo(tipo) {
if (tipo.id) {
tipo.status = 0;
} else {
$scope.tipos.splice($scope.tipos.indexOf(tipo), 1);
}
}
/**
* @method temNomesRepetidos
*/
function temNomesRepetidos() {
var temRepetidos = false;
var label;
angular.forEach($scope.tipos, function (tipo1) {
angular.forEach($scope.tipos, function (tipo2) {
if (tipo1.nome == tipo2.nome && tipo1 != tipo2) {
temRepetidos = true;
return;
}
});
});
return temRepetidos;
}
/**
* @method temTiposSemNome
*/
function temTiposSemNome() {
var semNome = false;
angular.forEach($scope.tipos, function (tipo) {
if (!tipo.nome) {
semNome = true;
return;
}
});
return semNome;
}
/**
* @method ordenaTipos
*/
function ordenaTipos() {
$scope.tipos = $scope.tipos.sort(function (a, b) {
return a.nome > b.nome ? 1 : a.nome < b.nome ? -1 : 0
});
}
/**
* @method verificarExistenciaTipo
*/
function verificarExistenciaTipo() {
var existe = false;
var tiposParaRemover = [];
angular.forEach($scope.tipos, function (tipo1) {
if (!tipo1.id) {
angular.forEach($scope.tipos, function (tipo2) {
//Se já tem tipo desativado com o mesmo nome, reativa.
if (tipo2.id && tipo2.nome == tipo1.nome && tipo2.status == 0) {
tipo2.status = 1;
existe = true;
tiposParaRemover.push(tipo1);
}
});
}
});
//Remove os tipos novos pois os desativados ficarão no lugar deles.
if (existe) {
angular.forEach(tiposParaRemover, function (tipo) {
$scope.tipos.splice($scope.tipos.indexOf(tipo), 1);
});
}
}
$scope.salvando = false;
/**
* @method salvar
* @param {*} evt
*/
function salvar(evt) {
if ($scope.salvando) {
return;
}
$scope.salvando = true;
//Verifica se algum novo tipo adicionado tem mesmo nome de um desativado.
verificarExistenciaTipo();
//Verificar se tem nomes repetidos
if (temNomesRepetidos()) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_NOMES_IGUAIS') + '</md-content></md-dialog>'
});
$scope.salvando = false;
return;
}
//Verificar se tem tipos sem nome
if (temTiposSemNome()) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_SEM_NOME') + '</md-content></md-dialog>'
});
$scope.salvando = false;
return;
}
ordenaTipos();
TipoBase.salvarTipos($scope.tipos)
.then(function (result) {
$scope.salvando = false;
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('TIPO_BASE_SALVO') + '</md-content></md-dialog>'
});
$scope.tipos = result;
});
}
angular.extend($scope, {
salvar: salvar,
adicionarNovoTipo: adicionarNovoTipo,
removerTipo: removerTipo
})
}
}());