/**
* @ngdoc controllers
* @name UsuarioGrupoUsuariosPerfil
* @module s4c.components.admin.controllers.UsuarioGrupoUsuariosPerfil
*
* @description
* `AdminUsuarioGrupoUsuariosPerfilCtrl` Controller da tela de integração de Grupo de Usuários e Perfis do módulo de administração
*
*
*/
(function () {
'use strict';
function AdminUsuarioGrupoUsuariosPerfilCtrl($scope, $http, $q, $mdDialog, API_ENDPOINT,
Usuario, GrupoUsuarios, PermissaoAcesso, Perfil, Base, localize, FileUploader, MainService, $filter, PermissoesService, MainState) {
/**
* @method salvarPerfil
*/
function salvarPerfil() {
$scope.nomeExists = false;
var perfis = angular.copy($scope.perfis);
_.remove(perfis, { id: $scope.perfilSelecionado.id });
if (_.includes(_.map(perfis, 'nome'), $scope.perfilSelecionado.nome)) {
$scope.nomeExists = true;
}
if ($scope.nomeExists) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('PERFIL_NOME_EXISTENTE'))
.ok($scope.res('COMUM_OK')));
return;
}
delete $scope.perfilSelecionado.PermissaoAcessos;
$scope.perfilSelecionado.permissaoAcessos = _.filter($scope.permissoesAcesso, 'val');
if (!$scope.perfilSelecionado || (!$scope.perfilSelecionado.nome || _.isEmpty($scope.perfilSelecionado.nome))) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('COMUM_FAVOR_INSERIR_NOME'))
.ok($scope.res('COMUM_OK')));
}
else {
$scope.perfilSelecionado.GrupoUsuarioId = $scope.grupoUsuariosSelecionado.id;
Perfil.crud().save($scope.perfilSelecionado)
.$promise.then(function (perfil) {
PermissoesService.atualizarPermissoes($scope.perfilSelecionado);
popularPerfis();
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('PERFIL_SALVOCOMSUCESSO'))
.ok($scope.res('COMUM_OK')));
$scope.editandoPerfil = false;
$scope.perfilSelecionado = undefined;
});
}
}
/**
* @method salvarGrupo
*/
function salvarGrupo() {
$scope.nomeExists = false;
var grupos = angular.copy($scope.grupoUsuarios);
_.remove(grupos, { id: $scope.grupoUsuariosSelecionado.id });
if (_.includes(_.map(grupos, 'nome'), $scope.grupoUsuariosSelecionado.nome)) {
$scope.nomeExists = true;
}
if (!$scope.nomeExists) {
if (!$scope.grupoUsuariosSelecionado || (!$scope.grupoUsuariosSelecionado.nome || _.isEmpty($scope.grupoUsuariosSelecionado.nome))) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('COMUM_FAVOR_INSERIR_NOME'))
.ok($scope.res('COMUM_OK')));
}
else {
GrupoUsuarios.save($scope.grupoUsuariosSelecionado)
.$promise.then(function (grupoUsuarios) {
popularGrupoUsuarios();
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('COMUM_GRUPO') + ' ' + $scope.res('COMUM_MENSAGEM_SALVOCOMSUCESSO'))
.ok($scope.res('COMUM_OK')));
$scope.editandoGrupo = false;
});
}
} else {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('GRUPO_NOME_EXISTENTE'))
.ok($scope.res('COMUM_OK')));
}
}
/**
* @method novoGrupoUsuarios
*/
function novoGrupoUsuarios() {
$scope.editandoPerfil = false;
$scope.editandoGrupo = true;
$scope.grupoUsuariosSelecionado = {};
}
/**
* @method novoPerfil
*/
function novoPerfil() {
$scope.editandoPerfil = true;
$scope.editandoGrupo = false;
$scope.perfilSelecionado = {};
_.each($scope.modulos, function (modulo) {
$scope.todasPublicas[modulo] = false;
});
$scope.checked = false;
$scope.permissoesAcesso = _.map($scope.permissoesAcesso, function (permissao) {
permissao.val = false;
return permissao;
});
$scope.usuarios = [];
}
/**
* @method deletePerfil
*/
function deletePerfil(event, perfil) {
var confirm = $mdDialog.confirm()
.title($scope.res('PERFIL_MENSAGEM_CONFIRMACAODELECAO') + ' ' + perfil.nome + ' ?')
.content($scope.res('COMUM_MENSAGEM_ACAOIRREVERSIVEL'))
.ariaLabel($scope.res('COMUM_DELETAR') + ' ' + $scope.res('COMUM_PERFIL_SINGULAR'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'))
.targetEvent(event);
$mdDialog.show(confirm).then(function () {
Perfil.crud().delete({
id: perfil.id
})
.$promise.then(function () {
$scope.perfisSelecionados.splice($scope.perfisSelecionados.indexOf(perfil), 1);
if ($scope.perfilSelecionado && $scope.perfilSelecionado.id == perfil.id) {
$scope.perfilSelecionado = undefined;
}
});
}, function () {
});
}
/**
* @method editGrupoUsuarios
*/
function editGrupoUsuarios(grupo) {
$scope.editandoPerfil = false;
$scope.editandoGrupo = true;
$scope.grupoUsuariosSelecionado = angular.copy(grupo);
}
/**
* @method editarPerfil
* @param {*} perfil
*/
function editarPerfil(perfil) {
selecionarPerfil(perfil);
$scope.editandoPerfil = true;
$scope.editandoGrupo = false;
$scope.perfilSelecionado = angular.copy(perfil);
}
/**
* @method deleteGrupoUsuarios
*
* @param {*} event
* @param {*} grupoUsuarios
*/
function deleteGrupoUsuarios(event, grupoUsuarios) {
var confirm = $mdDialog.confirm()
.title($scope.res('GRUPO_MENSAGEM_CONFIRMACAODELECAO') + ' ' + grupoUsuarios.nome + ' ?')
.content($scope.res('COMUM_MENSAGEM_ACAOIRREVERSIVEL'))
.ariaLabel($scope.res('COMUM_DELETAR') + ' ' + $scope.res('GRUPOUSUARIO_TITULO'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'))
.targetEvent(event);
$mdDialog.show(confirm).then(function () {
var promises = [];
$q.all(promises)
.then(function () {
GrupoUsuarios.delete({
id: grupoUsuarios.id
})
.$promise.then(function () {
$scope.gruposSelecionados.splice($scope.gruposSelecionados.indexOf(grupoUsuarios), 1);
$scope.grupoUsuarios.splice($scope.grupoUsuarios.indexOf(grupoUsuarios), 1);
if ($scope.grupoUsuariosSelecionado && $scope.grupoUsuariosSelecionado.id == grupoUsuarios.id) {
$scope.grupoUsuariosSelecionado = undefined;
$scope.perfilSelecionado = false;
}
})
}, function (err) {
alert($scope.res('COMUM_HOUVEUMERROAODELETAR') + ' ' + $scope.res("COMUM_GRUPO") + '. ' + $scope.res('COMUM_DEVEHAVERUSUARIOSOUPERMISSOESVINCULADAS'));
});
}, function (err) {
console.log(err);
});
}
/**
* @method isLdapLogin
*/
function isLdapLogin() {
Base.obter('ldap/authenticatedUser').then(function (response) {
if (response.ldapAuthenticatedUser != null && response.ldapAuthenticatedUser) {
$scope.isLdapAuthenticatedUser = true;
} else {
$scope.isLdapAuthenticatedUser = false;
}
});
}
$scope.gruposSelecionados = [];
/**
* @method popularGrupoUsuarios
*/
function popularGrupoUsuarios() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuarios/adm')
.then(function (responseGruposUsuarios) {
if (typeof responseGruposUsuarios.data === 'object') {
$scope.grupoUsuarios = _.map(responseGruposUsuarios.data, function (grupoUsuarios) {
return {
id: grupoUsuarios.id,
nome: grupoUsuarios.nome
};
});
$scope.gruposSelecionados = angular.copy($scope.grupoUsuarios);
} else {
return deferred.reject(responseGruposUsuarios.data);
}
}, function (responseGruposUsuarios) {
return deferred.reject(responseGruposUsuarios.data);
});
return deferred.promise;
}
$scope.perfisSelecionados = [];
/**
* @method popularPerfis
* @param {*} event
*/
function popularPerfis(event) {
var deferred = $q.defer();
var url = $scope.grupoUsuariosSelecionado ? 'perfil/grupo_usuario/' + $scope.grupoUsuariosSelecionado.id : 'perfil/';
$http.get(API_ENDPOINT + url)
.then(function (response) {
if (typeof response.data === 'object') {
$scope.perfis = _.map(response.data, function (perfil) {
if ($scope.grupoUsuariosSelecionado) {
response.data = _.filter(response.data, function (perfil) {
return perfil.GrupoUsuarioId == $scope.grupoUsuariosSelecionado.id;
})
}
return {
id: perfil.id,
nome: perfil.nome,
descricao: perfil.descricao,
val: false,
PermissaoAcessos: perfil.PermissaoAcessos,
grupoUsuarioId: perfil.GrupoUsuarioId,
usuarios: _.chain(perfil.Usuarios)
.filter(function (usuario) {
if (usuario.ativo)
return usuario;
})
.map(function (usuario) {
return {
id: usuario.id,
nome: usuario.nome,
GruposUsuarioIds: _.map(usuario.GrupoUsuarios, 'id')
}
})
.value()
};
});
$scope.perfisSelecionados = $scope.perfis;
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method selecionarPerfil
* @param {*} perfil
*/
function selecionarPerfil(perfil) {
if ($scope.perfilSelecionado == undefined) {
$scope.perfilSelecionado = perfil;
perfil.val = true;
}
else {
if (perfil !== $scope.perfilSelecionado) {
$scope.perfilSelecionado.val = false;
$scope.perfilSelecionado = perfil;
perfil.val = true;
}
else {
if (perfil.val == false) {
perfil.val == true;
$scope.perfilSelecionado.val = true;
}
else {
$scope.perfilSelecionado.val = false;
$scope.perfilSelecionado = undefined;
perfil.val = false;
}
}
}
carregarUsuarios(perfil);
organizarPermissoesAcesso();
}
$scope.usuarios = [];
/**
* @method carregarUsuarios
* @param {*} perfil
*/
function carregarUsuarios(perfil) {
var deferred = $q.defer();
var url = 'usuarios/perfil/' + perfil.id;
$http.get(API_ENDPOINT + url)
.then(function (response) {
if (typeof response.data === 'object') {
$scope.usuarios = response.data;
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method selecionarGrupoUsuarios
* @param {*} grupoUsuarios
*/
function selecionarGrupoUsuarios(grupoUsuarios) {
$scope.editandoPerfil = false;
$scope.editandoGrupo = false;
$scope.perfilSelecionado = undefined;
if ($scope.grupoUsuariosSelecionado === undefined) {
$scope.grupoUsuariosSelecionado = $scope.grupoUsuarios[0];
$scope.grupoUsuariosSelecionado.val = true;
}
if (grupoUsuarios !== $scope.grupoUsuariosSelecionado) {
$scope.grupoUsuariosSelecionado.val = false;
$scope.grupoUsuariosSelecionado = grupoUsuarios;
grupoUsuarios.val = true;
}
popularPerfis();
}
$scope.textoBuscaGrupo;
/**
* @method executeSearchGrupo
*/
function executeSearchGrupo() {
$scope.gruposSelecionados = [];
if (!$scope.textoBuscaGrupo || $scope.textoBuscaGrupo.length == 0) {
$scope.gruposSelecionados = angular.copy($scope.grupoUsuarios);
return;
}
var texto = $filter('latinize')($scope.textoBuscaGrupo.toLowerCase());
angular.forEach($scope.grupoUsuarios, function (grupo) {
var nome = $filter('latinize')(grupo.nome.toLowerCase());
if (nome.indexOf(texto) !== -1) {
$scope.gruposSelecionados.push(grupo);
}
});
}
$scope.textoBuscaPerfil;
/**
* @method executeSearchPerfil
*/
function executeSearchPerfil() {
$scope.perfisSelecionados = [];
if (!$scope.textoBuscaPerfil || $scope.textoBuscaPerfil.length == 0) {
$scope.perfisSelecionados = angular.copy($scope.perfis);
return;
}
var texto = $filter('latinize')($scope.textoBuscaPerfil.toLowerCase());
angular.forEach($scope.perfis, function (perfil) {
var nome = $filter('latinize')(perfil.nome.toLowerCase());
if (nome.indexOf(texto) !== -1) {
$scope.perfisSelecionados.push(perfil);
}
});
}
/**
* @method popularPermissoesAcesso
*/
function popularPermissoesAcesso() {
PermissaoAcesso.query()
.$promise
.then(function (permissoesAcesso) {
permissoesAcesso = _.filter(permissoesAcesso, function (perm) {
return isNotInABlackList(perm);
});
$scope.permissoesPublicas = _.filter(permissoesAcesso, function (perm) { return perm.tipoPermissao != 'Extra'; });
$scope.permissoesExtras = _.filter(permissoesAcesso, function (perm) { return perm.tipoPermissao == 'Extra'; });
translateNames($scope.permissoesPublicas);
translateNames($scope.permissoesExtras);
$scope.tiposPermissao = _.uniq(_.map(permissoesAcesso, 'tipoPermissao'), false);
$scope.modulos = _.uniq(_.map($scope.permissoesPublicas, 'modulo'), false);
$scope.modulosExtra = _.uniq(_.map($scope.permissoesExtras, 'modulo'), false);
$scope.permissoesAcesso = permissoesAcesso.concat($scope.permissoesExtras);
organizarPermissoesAcesso();
});
}
/**
* @method translateNames
* @param {*} names
*/
function translateNames(names) {
for (var index in names) {
switch (names[index].modulo) {
case 'Briefing':
names[index].modulo = $scope.res('TITULO_BRIEFING');
break;
case 'Incidentes':
names[index].modulo = $scope.res('INCIDENTES_TITULO');
break;
case 'Base de Conhecimento':
names[index].modulo = $scope.res('BASECONHECIMENTO_TITULO_PLURAL');
break;
case 'Planejamento':
names[index].modulo = $scope.res('Planejamento');
break;
case 'Zona de Observação':
names[index].modulo = $scope.res('ZONAOBSERVACAO_TITULO');
break;
case 'Rota':
names[index].modulo = $scope.res('Rota');
break;
case 'Pontos de Interesse':
names[index].modulo = $scope.res('PONTOSDEINTERESSE_TITULO');
break;
default:
break;
}
}
}
/**
* @method isNotInABlackList
*
* @param {*} o
*/
function isNotInABlackList(o) {
if (o.modulo == 'Zona de Observação' && !MainState.isToShow('zona_mapa')) {
return false;
}
if (o.modulo == 'Incidentes' && !MainState.isToShow('incidentes_mapa')) {
return false;
}
if (o.modulo == 'Base de Conhecimento' && !MainState.isToShow('base_mapa')) {
return false;
}
if (o.modulo == 'Planejamento' && !MainState.isToShow('planejamento_mapa')) {
return false;
}
if (o.modulo == 'Rota' && !MainState.isToShow('rota_mapa')) {
return false;
}
return true;
}
/**
* @method organizarPermissoesAcesso
*/
function organizarPermissoesAcesso() {
if (!$scope.perfilSelecionado) {
return;
}
$scope.permissoesAcesso = _.map($scope.permissoesAcesso, function (permissao) {
if (_.find($scope.perfilSelecionado.PermissaoAcessos, {
'id': permissao.id
})) {
permissao.val = true;
return permissao;
}
permissao.val = false;
return permissao;
});
$scope.permissoesPublicasPerfil = _.filter($scope.permissoesAcesso, function (o) { return _.includes(o.descricao, 'blic') });
$scope.permissoesExtrasPerfil = _.filter($scope.permissoesAcesso, function (o) { return o.tipoPermissao == 'Extra'; });
$scope.todasPublicas = [];
_.each($scope.modulos, function (modulo) {
$scope.todasPublicas[modulo] = false;
});
}
$scope.checked = true;
/**
* @method marcarTodas
*/
function marcarTodas() {
_.each($scope.permissoesPublicas, function (permissao) {
permissao.val = angular.copy($scope.checked);
});
_.each($scope.permissoesExtras, function (permissao) {
permissao.val = angular.copy($scope.checked);
});
$scope.todasPublicas['Planejamento'] = angular.copy($scope.checked);
$scope.checked = !$scope.checked;
}
$scope.cancelado = true;
$scope.editandoPerfil = false;
$scope.editandoGrupo = false;
/**
* @method cancelar
*/
function cancelar() {
$scope.cancelado = true;
$scope.editandoPerfil = false;
$scope.editandoGrupo = false;
}
/**
* @method deleteUsuarioFromPerfil
* @param {*} usuario
*/
function deleteUsuarioFromPerfil(usuario) {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_CONFIRMACAO'))
.content($scope.res('COMUM_MENSAGEMCONFIRMACAOREMOVERDOPERFIL') + ' ' + usuario.nome + '?')
.ariaLabel($scope.res('COMUM_CONFIRMACAO'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_NAO'));
$mdDialog.show(confirm)
.then(function () {
Usuario.removeFromProfile(usuario.id, $scope.perfilSelecionado.id).then(function () {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('REMOVER_USUARIO_SUCESSO'))
.ok($scope.res('COMUM_OK')));
$scope.usuarios.splice($scope.usuarios.indexOf(usuario), 1);
});
});
}
popularPermissoesAcesso();
angular.extend($scope, {
selecionarGrupoUsuarios: selecionarGrupoUsuarios,
selecionarPerfil: selecionarPerfil,
novoGrupoUsuarios: novoGrupoUsuarios,
editGrupoUsuarios: editGrupoUsuarios,
deleteGrupoUsuarios: deleteGrupoUsuarios,
novoPerfil: novoPerfil,
deletePerfil: deletePerfil,
executeSearchPerfil: executeSearchPerfil,
executeSearchGrupo: executeSearchGrupo,
marcarTodas: marcarTodas,
cancelar: cancelar,
deleteUsuarioFromPerfil: deleteUsuarioFromPerfil,
salvarGrupo: salvarGrupo,
salvarPerfil: salvarPerfil,
editarPerfil: editarPerfil
});
popularGrupoUsuarios();
isLdapLogin();
}
AdminUsuarioGrupoUsuariosPerfilCtrl.$inject = [
'$scope',
'$http',
'$q',
'$mdDialog',
'API_ENDPOINT',
'Usuario',
'GrupoUsuarios',
'PermissaoAcesso',
'Perfil',
'Base',
'localize',
'FileUploader',
'MainService',
'$filter',
'PermissoesService',
'MainState'
];
angular.module('s4c.controllers.AdminUsuarioGrupoUsuariosPerfilCtrl', [
'ngMaterial',
's4c.services.Usuario',
's4c.services.GrupoUsuarios'
])
.controller('AdminUsuarioGrupoUsuariosPerfilCtrl', AdminUsuarioGrupoUsuariosPerfilCtrl);
}());