/**
* @ngdoc controllers
* @name PermissaoAcesso
* @module s4c.components.admin.controllers.PermissaoAcesso
*
* @description
* `AdminPermissaoAcessoCtrl` Controller da tela de Permissão de Acesso do módulo de administração
*
*
*/
(function () {
'use strict';
function AdminPermissaoAcessoCtrl($scope, $http, $q, $mdDialog, API_ENDPOINT, PermissaoAcesso, Perfil, localize) {
$http.get(API_ENDPOINT + 'departamentos')
.then(function (response) {
if (typeof response.data === 'object') {
console.log(response.data);
$scope.departamentos = response.data;
} else {
$scope.departamentos = [];
}
});
//Permissoes de Acesso
/**
* @method NovaPermissaoAcessoCtrl
*
* @param {*} $scope
* @param {*} $http
* @param {*} PermissaoAcesso
* @param {*} $mdDialog
* @param {*} fim
*/
function NovaPermissaoAcessoCtrl($scope, $http, PermissaoAcesso, $mdDialog, fim) {
$scope.res = $scope.$root.res;
$http.get(API_ENDPOINT + 'permissaoacesso')
.then(function (response) {
if (typeof response.data === 'object') {
$scope.permissoesAcesso = response.data;
} else {
$scope.permissoesAcesso = [];
}
});
/**
*
* @method cancelar
*/
$scope.cancelar = function () {
$mdDialog.hide();
};
/**
* @method criar
*/
$scope.criar = function () {
PermissaoAcesso.save($scope.permissaoAcesso).$promise.then(function (u) {
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('Permissão de Acesso salva com sucesso.')
.ok('OK'));
fim();
$mdDialog.hide(u);
});
};
$scope.permissaoAcesso = {};
}
/**
* @method popularPermissoesAcesso
* @param {*} event
*/
function popularPermissoesAcesso(event) {
PermissaoAcesso.query()
.$promise
.then(function (permissoesAcesso) {
$scope.permissoesAcesso = permissoesAcesso;
})
.then(function () {
organizarPermissoesAcesso();
});
}
/**
* @method novaPermissaoAcesso
* @param {*} event
*/
function novaPermissaoAcesso(event) {
$mdDialog.show({
templateUrl: 'NovaPermissaoAcesso.html',
controller: NovaPermissaoAcessoCtrl,
targetEvent: event,
scope: $scope,
locals: {
fim: popularPermissoesAcesso
}
});
}
popularPermissoesAcesso();
//Perfis
/**
* @method NovoPerfilCtrl
*
* @param {*} $scope
* @param {*} $http
* @param {*} Perfil
* @param {*} $mdDialog
* @param {*} fim
*/
function NovoPerfilCtrl($scope, $http, Perfil, $mdDialog, fim) {
$scope.res = $scope.$root.res;
/**
* @method cancelar
*/
$scope.cancelar = function () {
$mdDialog.hide();
};
/**
* @method criar
*/
$scope.criar = function () {
Perfil.crud().save($scope.perfil).$promise.then(function (u) {
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('Perfil salvo com sucesso.')
.ok('OK'));
fim();
$mdDialog.hide(u);
});
};
$scope.perfil = {};
}
/**
* @method popularPerfis
* @param {*} event
*/
function popularPerfis(event) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'perfil/')
.then(function (response) {
if (typeof response.data === 'object') {
$scope.perfis = _.map(response.data, function (perfil) {
return {
id: perfil.id,
nome: perfil.nome,
val: false,
permissoesAcesso: perfil.PermissaoAcessos,
departamentoId: perfil.DepartamentoId
};
});
if ($scope.perfis.length > 0) {
selecionarPerfil($scope.perfis[0]);
}
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method novoPerfil
* @param {*} event
*/
function novoPerfil(event) {
$mdDialog.show({
templateUrl: 'NovoPerfil.html',
controller: NovoPerfilCtrl,
scope: $scope,
targetEvent: event,
locals: {
fim: popularPerfis
}
});
}
var salvarPerfil = _.debounce(function (perfil) {
$http.post(API_ENDPOINT + 'perfil/' + perfil.id + '/permissaoacessos', {
permissoesAcesso: perfil.permissoesAcesso
});
}, 800);
/**
* @method deletePerfil
*
* @param {*} event
* @param {*} perfil
*/
function deletePerfil(event, perfil) {
var confirm = $mdDialog.confirm()
.title('Tem certeza que deseja deletar o perfil ' + perfil.nome + ' ?')
.content('Esta ação é irreversível.')
.ariaLabel('Deletar Perfil')
.ok('Sim')
.cancel('Cancelar')
.targetEvent(event);
$mdDialog.show(confirm).then(function () {
Perfil.crud().delete({
id: perfil.id
})
.$promise.then(function () {
popularPerfis();
});
}, function () {
});
}
/**
* @method escolherPermissoes
*/
function escolherPermissoes() {
$scope.perfilSelecionado.permissoesAcesso = [];
var permissoesEscolhidas = _.filter($scope.permissoesAcesso, 'val');
$scope.perfilSelecionado.permissoesAcesso = permissoesEscolhidas;
_.each(permissoesEscolhidas, function (permissao) {
//permissao.valG = true;
});
salvarPerfil($scope.perfilSelecionado);
}
/**
* @method removerPermissaoPerfil
*
* @param {*} permissao
* @param {*} perfil
*/
function removerPermissaoPerfil(permissao, perfil) {
_.remove(perfil.permissoesAcesso, { 'id': permissao.id });
salvarPerfil(perfil);
}
/**
* @method selecionarPerfil
* @param {*} perfil
*/
function selecionarPerfil(perfil) {
if ($scope.perfilSelecionado === undefined) {
$scope.perfilSelecionado = $scope.perfis[0];
$scope.perfilSelecionado.val = true;
}
if (perfil !== $scope.perfilSelecionado) {
$scope.perfilSelecionado.val = false;
$scope.perfilSelecionado = perfil;
perfil.val = true;
}
organizarPermissoesAcesso();
}
/**
* @method organizarPermissoesAcesso
*/
function organizarPermissoesAcesso() {
$scope.permissoesAcesso = _.map($scope.permissoesAcesso, function (permissao) {
if (_.find($scope.perfilSelecionado.permissoesAcesso,
{
'descricao': permissao.descricao
})) {
permissao.val = true;
//permissao.valG = true;
} else {
permissao.val = false;
//permissao.valG = false;
}
return permissao;
});
}
angular.extend($scope, {
novaPermissaoAcesso: novaPermissaoAcesso,
novoPerfil: novoPerfil,
deletePerfil: deletePerfil,
selecionarPerfil: selecionarPerfil,
escolherPermissoes: escolherPermissoes,
removerPermissaoPerfil: removerPermissaoPerfil,
permissoesAcesso: [],
perfis: [],
departamentos: []
});
popularPerfis()
.then(function () {
popularPermissoesAcesso();
});
}
angular.module('s4c.controllers.AdminPermissaoAcessoCtrl', [
'ngMaterial',
's4c.services.PermissaoAcesso',
's4c.services.Perfil'
])
.controller('AdminPermissaoAcessoCtrl', AdminPermissaoAcessoCtrl);
AdminPermissaoAcessoCtrl.$inject = [
'$scope',
'$http',
'$q',
'$mdDialog',
'API_ENDPOINT',
'PermissaoAcesso',
'Perfil',
'localize'
];
}());