/**
* @ngdoc controllers
* @name PermissaoAreaAtuacao
* @module s4c.components.admin.controllers.PermissaoAreaAtuacao
*
* @description
* `AdminPermissaoAreaAtuacaoCtrl` Controller da tela de Permissão de Área de Atuação do módulo de administração
*
*
*/
(function () {
'use strict';
AdminPermissaoAreaAtuacaoCtrl.$inject = [
'$scope',
'$http',
'$mdDialog',
'API_ENDPOINT',
'$rootScope',
'MainState'
];
angular.module('s4c.controllers.AdminPermissaoAreaAtuacaoCtrl', [
's4c.directives.ngFileReader'
])
.controller('AdminPermissaoAreaAtuacaoCtrl', AdminPermissaoAreaAtuacaoCtrl)
.directive('focusOn', function () {
return function (scope, elem, attr) {
scope.$on(attr.focusOn, function (e) {
elem[0].focus();
});
};
});
function AdminPermissaoAreaAtuacaoCtrl($scope, $http, $mdDialog, API_ENDPOINT, $rootScope, MainState) {
$scope.res = $rootScope.res;
$scope.grupoUsuarios = {};
$scope.editar = false;
$scope.incluirGrupo = false;
$scope.gruposComRestricoes = [];
$scope.gruposUsuarios = [];
$scope.regioes = [];
$scope.msgSalvandoHidden = true;
carregarGruposComRestricoes();
carregarAreas();
/**
* @method adicionarGrupo
*/
function adicionarGrupo() {
carregarGruposSemRestricoes();
$scope.grupoUsuarioEdicao = {};
$scope.grupoUsuarios = {};
reiniciarObjetosPermissao();
$scope.incluirGrupo = true;
}
/**
* @method selecionaGrupoUsuario
*/
function selecionaGrupoUsuario() {
if (typeof $scope.grupoUsuarios === 'string' || $scope.grupoUsuarios instanceof String) {
$scope.grupoUsuarioEdicao = JSON.parse($scope.grupoUsuarios);
}
else {
$scope.grupoUsuarioEdicao = $scope.grupoUsuarios;
}
}
/**
* @method callCarregarRegioes
*
*/
function callCarregarRegioes() {
var areaAtuacao;
if (typeof $scope.areaAtuacao === 'string' || $scope.areaAtuacao instanceof String) {
areaAtuacao = JSON.parse($scope.areaAtuacao);
}
carregarRegioes(areaAtuacao.id);
}
/**
* @method adicionarPermissaoAreaAtuacao
*/
function adicionarPermissaoAreaAtuacao() {
if (!$scope.grupoUsuarioEdicao.id) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_SELECIONAR_GRUPO'))
.ok($scope.res('COMUM_OK')));
return;
}
if (!$scope.areaAtuacao) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_SELECIONAR_AREA_ATUACAO'))
.ok($scope.res('COMUM_OK')));
return;
}
if (!$scope.regiao) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_SELECIONAR_REGIAO'))
.ok($scope.res('COMUM_OK')));
return;
}
$scope.permissaoAreaAtuacao = { _id: _.uniqueId() };
var regiao;
var areaAtuacao;
if (typeof $scope.regiao === 'string' || $scope.regiao instanceof String) {
regiao = JSON.parse($scope.regiao);
}
if (typeof $scope.areaAtuacao === 'string' || $scope.areaAtuacao instanceof String) {
areaAtuacao = JSON.parse($scope.areaAtuacao);
}
if (!$scope.grupoUsuarioEdicao.permissoesAreaAtuacao) {
$scope.grupoUsuarioEdicao.permissoesAreaAtuacao = [];
}
var permissaoExiste = false;
//Verifica se a permissão já existe na lista. Caso exista não inclui e avisa o usuário
_.each($scope.grupoUsuarioEdicao.permissoesAreaAtuacao, function (permissaoAreaAtuacao) {
if ((permissaoAreaAtuacao.areaAtuacao.id == areaAtuacao.id && !permissaoAreaAtuacao.regiao)
|| (permissaoAreaAtuacao.regiao && permissaoAreaAtuacao.areaAtuacao.id == areaAtuacao.id && permissaoAreaAtuacao.regiao.id == regiao.id)) {
permissaoExiste = true;
}
});
if (permissaoExiste) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_PERMISSAO_INCLUIDA'))
.ok($scope.res('COMUM_OK')));
return;
}
if (regiao.id > -1) {
$scope.permissaoAreaAtuacao.regiao = regiao;
}
$scope.permissaoAreaAtuacao.areaAtuacao = areaAtuacao;
if (!$scope.permissaoAreaAtuacao.objetosPermissao) {
$scope.permissaoAreaAtuacao.objetosPermissao = [];
}
if ($scope.objetoIncidente) {
var objetoPermissao = { objeto: 'CRIAR_INCIDENTE' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoBaseConhecimento) {
var objetoPermissao = { objeto: 'CRIAR_BASE_CONHECIMENTO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoPlanejamento) {
var objetoPermissao = { objeto: 'CRIAR_PLANEJAMENTO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoRota) {
var objetoPermissao = { objeto: 'CRIAR_ROTA' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoZonaObservacao) {
var objetoPermissao = { objeto: 'CRIAR_ZONA_OBSERVACAO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
$scope.grupoUsuarioEdicao.permissoesAreaAtuacao.push($scope.permissaoAreaAtuacao);
reiniciarObjetosPermissao();
}
/**
* @method deletePermissaoAreaAtuacao
* @param {*} permissaoAreaAtuacaoExcluir
*/
function deletePermissaoAreaAtuacao(permissaoAreaAtuacaoExcluir) {
var index = 0;
var indexDelete = -1;
_.each($scope.grupoUsuarioEdicao.permissoesAreaAtuacao, function (permissaoAreaAtuacao) {
if (permissaoAreaAtuacao._id == permissaoAreaAtuacaoExcluir._id) {
indexDelete = index;
}
index++;
});
if (indexDelete > -1) {
$scope.grupoUsuarioEdicao.permissoesAreaAtuacao.splice(indexDelete, 1);
}
}
/**
* @method editGrupoUsuariosRestricao
* @param {*} grupoComRestricoes
*/
function editGrupoUsuariosRestricao(grupoComRestricoes) {
if (typeof grupoComRestricoes === 'string' || grupoComRestricoes instanceof String) {
grupoComRestricoes = JSON.parse(grupoComRestricoes);
}
if ($scope.grupoUsuarioEdicao) {
$scope.grupoUsuarioEdicao.val = false;
}
grupoComRestricoes.val = true;
$scope.grupoUsuarioEdicao = grupoComRestricoes;
$scope.incluirGrupo = false;
reiniciarObjetosPermissao();
}
/**
* @method deleteGrupoUsuariosRestricao
* @param {*} grupoExcluir
*/
function deleteGrupoUsuariosRestricao(grupoExcluir) {
if (typeof grupoExcluir === 'string' || grupoExcluir instanceof String) {
grupoExcluir = JSON.parse(grupoExcluir);
}
$http.post("/grupo_usuarios/removerRestricaoAreaAtuacao", grupoExcluir)
.then(function (data) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('PERMISSAO_AREAATUACAO_EXCLUIDA'))
.ok($scope.res('COMUM_OK')));
$scope.editar = false;
$scope.incluirGrupo = false;
$scope.grupoUsuarioEdicao = {};
reiniciarObjetosPermissao();
var index = 0;
var indexDelete = -1;
_.each($scope.gruposComRestricoes, function (grupoComRestricoes) {
if (grupoComRestricoes._id == grupoExcluir._id) {
indexDelete = index;
}
index++;
});
if (indexDelete > -1) {
$scope.gruposComRestricoes.splice(indexDelete, 1);
}
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
$scope.msgSalvandoHidden = true;
});
}
/**
* @method editarPermissaoAreaAtuacao
* @param {*} permissaoAreaAtuacao
*/
function editarPermissaoAreaAtuacao(permissaoAreaAtuacao) {
if ($scope.permissaoAreaAtuacao) {
$scope.permissaoAreaAtuacao.val = false;
}
permissaoAreaAtuacao.val = true;
$scope.permissaoAreaAtuacao = permissaoAreaAtuacao;
reiniciarObjetosPermissao();
_.each(permissaoAreaAtuacao.objetosPermissao, function (objetoPermissao) {
if (objetoPermissao.objeto == 'CRIAR_INCIDENTE') {
$scope.objetoIncidente = true;
}
if (objetoPermissao.objeto == 'CRIAR_BASE_CONHECIMENTO') {
$scope.objetoBaseConhecimento = true;
}
if (objetoPermissao.objeto == 'CRIAR_PLANEJAMENTO') {
$scope.objetoPlanejamento = true;
}
if (objetoPermissao.objeto == 'CRIAR_ROTA') {
$scope.objetoRota = true;
}
if (objetoPermissao.objeto == 'CRIAR_ZONA_OBSERVACAO') {
$scope.objetoZonaObservacao = true;
}
});
}
/**
* @method reiniciarObjetosPermissao
*/
function reiniciarObjetosPermissao() {
$scope.objetoIncidente = false;
$scope.objetoBaseConhecimento = false;
$scope.objetoPlanejamento = false;
$scope.objetoRota = false;
$scope.objetoZonaObservacao = false;
}
$scope.disable = false;
/**
* @method salvar
*/
function salvar() {
if (!$scope.grupoUsuarioEdicao || !$scope.grupoUsuarioEdicao.permissoesAreaAtuacao) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_SELECIONAR_GRUPO'))
.ok($scope.res('COMUM_OK')));
return;
}
if ($scope.grupoUsuarioEdicao.permissoesAreaAtuacao.length == 0) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_NAO_INFORMADA'))
.ok($scope.res('COMUM_OK')));
return;
}
$scope.msgSalvandoHidden = false;
$scope.permissaoAreaAtuacao.objetosPermissao = [];
if ($scope.objetoIncidente) {
var objetoPermissao = { objeto: 'CRIAR_INCIDENTE' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoBaseConhecimento) {
var objetoPermissao = { objeto: 'CRIAR_BASE_CONHECIMENTO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoPlanejamento) {
var objetoPermissao = { objeto: 'CRIAR_PLANEJAMENTO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoRota) {
var objetoPermissao = { objeto: 'CRIAR_ROTA' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
if ($scope.objetoZonaObservacao) {
var objetoPermissao = { objeto: 'CRIAR_ZONA_OBSERVACAO' };
$scope.permissaoAreaAtuacao.objetosPermissao.push(objetoPermissao);
}
$scope.grupoUsuarioEdicao.permissoesAreaAtuacao = [];
$scope.grupoUsuarioEdicao.permissoesAreaAtuacao.push($scope.permissaoAreaAtuacao);
$scope.disable = true;
$http.post("/grupo_usuarios/restricaoAreaAtuacao", $scope.grupoUsuarioEdicao)
.then(function (data) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('PERMISSAO_AREAATUACAO_SALVA'))
.ok($scope.res('COMUM_OK')));
$scope.editar = false;
$scope.incluirGrupo = false;
$scope.grupoUsuarioEdicao = {};
reiniciarObjetosPermissao();
carregarGruposComRestricoes();
$scope.msgSalvandoHidden = true;
$scope.disable = false;
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
$scope.msgSalvandoHidden = true;
});
}
/**
* @method carregarAreas
*/
function carregarAreas() {
$http.get(API_ENDPOINT + "area_atuacao")
.then(function (result) {
$scope.areasAtuacao = result.data;
_.each($scope.areasAtuacao, function (areaAtuacao) {
areaAtuacao._id = _.uniqueId();
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method carregarRegioes
* @param {*} areaAtuacaoId
*/
function carregarRegioes(areaAtuacaoId) {
$http.get(API_ENDPOINT + "regiao/area_atuacao/" + areaAtuacaoId)
.then(function (result) {
var todasRegioes = { id: -1, nome: $scope.res('COMUM_TODOS') };
$scope.regioes = [];
$scope.regioes.push(todasRegioes);
$scope.regiao = null;
_.each(result.data, function (item) {
$scope.regioes.push(item);
});
$scope.regioesSelecionadas = angular.copy($scope.regioes);
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method carregarGruposComRestricoes
*/
function carregarGruposComRestricoes() {
$http.get(API_ENDPOINT + "grupo_usuarios/restricaoAreaAtuacao")
.then(function (result) {
$scope.gruposComRestricoes = result.data;
_.each($scope.gruposComRestricoes, function (grupoComRestricoes) {
grupoComRestricoes._id = _.uniqueId();
_.each(grupoComRestricoes.permissoesAreaAtuacao, function (permissaoAreaAtuacao) {
permissaoAreaAtuacao._id = _.uniqueId();
});
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method carregarGruposSemRestricoes
*/
function carregarGruposSemRestricoes() {
$http.get(API_ENDPOINT + "grupo_usuarios/semRestricaoAreaAtuacao")
.then(function (result) {
$scope.gruposUsuarios = result.data;
_.each($scope.gruposUsuarios, function (grupoUsuarios) {
grupoUsuarios._id = _.uniqueId();
});
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
/**
* @method searchGrupos
* @param {*} e
*/
function searchGrupos(e) {
e.stopPropagation();
}
/**
* @method searchRegioes
* @param {*} e
*/
function searchRegioes(e) {
e.stopPropagation();
}
angular.extend($scope, {
adicionarGrupo: adicionarGrupo,
callCarregarRegioes: callCarregarRegioes,
adicionarPermissaoAreaAtuacao: adicionarPermissaoAreaAtuacao,
deletePermissaoAreaAtuacao: deletePermissaoAreaAtuacao,
editGrupoUsuariosRestricao: editGrupoUsuariosRestricao,
deleteGrupoUsuariosRestricao: deleteGrupoUsuariosRestricao,
editarPermissaoAreaAtuacao: editarPermissaoAreaAtuacao,
selecionaGrupoUsuario: selecionaGrupoUsuario,
searchGrupos: searchGrupos,
searchRegioes: searchRegioes,
salvar: salvar
});
}
}());