/**
* @ngdoc controllers
* @name Usuario
* @module s4c.components.admin.controllers.Usuario
*
* @description
* `AdminUsuarioCtrl` Controller da tela de Usuários do módulo de administração
*
*
*/
(function () {
'use strict';
function AdminUsuarioCtrl($scope, $http, $q, $mdDialog, API_ENDPOINT,
Usuario, GrupoUsuarios, localize, FileUploader) {
/**
* @method NovoUsuarioCtrl
*
* @param {*} $scope
* @param {*} $http
* @param {*} Usuario
* @param {*} $mdDialog
* @param {*} fim
* @param {*} localize
* @param {*} FileUploader
*/
function NovoUsuarioCtrl($scope, $http, Usuario, $mdDialog, fim, localize, FileUploader) {
$scope.res = $scope.$root.res;
$http.get(API_ENDPOINT + 'departamentos')
.then(function (response) {
if (typeof response.data === 'object') {
$scope.departamentos = response.data;
} else {
$scope.departamentos = [];
}
});
$scope.cancelar = function () {
$mdDialog.hide();
};
/**
* @method criar
* @memberof NovoUsuarioCtrl
*/
$scope.criar = function () {
Usuario.salvar($scope.user).then(function (u) {
enviarArquivo(u);
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('O Usuário foi salvo com sucesso.')
.ok('OK'));
fim();
$mdDialog.hide(u);
});
};
$scope.user = {};
var uploader = $scope.uploader = new FileUploader(),
uploadCallbackQueue = [];
uploader.clearQueue();
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
var megaByte = parseInt(item.size / 1000000) + "MB";
if (item.size <= 26214400) {
return item.size <= 26214400
} else {
$mdDialog
.show($mdDialog.alert()
.title('Tamanho de arquivo ultrapassado')
.content('O limite do tamanho de arquivos para upload é de 25MB. Seu arquivo possui ' + megaByte + ' - limite ultrapassado!')
.ok('OK'))
return item.size <= 26214400
}
}
});
$scope.uploader.onCompleteItem = function (item, response) {
$scope.mensagem = response;
};
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
item.novoNome = item.file.name;
//enviarArquivo(item.file.name);
}
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
item.file.name = item.novoNome + ext(item.file.name);
};
$scope.uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
//listaEquals = [];
};
$scope.uploader.onCompleteAll = function (result) {
_.each(uploadCallbackQueue, function (callback) {
callback();
});
};
function enviarArquivo(_usuario) {
$scope.isUploading = true;
uploader.url = '/usuarios/' + _usuario.id;
uploader.uploadAll();
uploadCallbackQueue.push(function () {
$scope.isUploading = false;
$scope.arquivosPraSubir = false;
});
}
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
setTimeout(function () {
$scope.input = angular.element('input.uploadArquivo');
}, 1000);
$scope.abrirUpload = function () {
$scope.input.click();
}
}
/**
* @method NovoGrupoUsuariosCtrl
*
* @param {*} $scope
* @param {*} GrupoUsuarios
* @param {*} $mdDialog
* @param {*} fim
*/
function NovoGrupoUsuariosCtrl($scope, GrupoUsuarios, $mdDialog, fim) {
$scope.res = $scope.$root.res;
$scope.cancelar = function () {
$mdDialog.hide();
};
$scope.criar = function () {
GrupoUsuarios.save($scope.grupo).$promise.then(function () {
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('O Grupo de Usuários foi salvo com sucesso.')
.ok('OK'));
fim();
$mdDialog.hide();
});
};
$scope.grupo = {};
}
/**
* @method novoUsuario
* @param {*} event
*/
function novoUsuario(event) {
$mdDialog.show({
templateUrl: 'NovoUsuario.html',
controller: NovoUsuarioCtrl,
targetEvent: event,
locals: {
fim: popularUsuarios
}
});
}
/**
* @method novoGrupoUsuarios
* @param {*} event
*/
function novoGrupoUsuarios(event) {
$mdDialog.show({
templateUrl: 'NovoGrupoUsuarios.html',
controller: NovoGrupoUsuariosCtrl,
targetEvent: event,
locals: {
fim: popularGruposUsuarios,
fim2: function () {
var grupo = $scope.gruposUsuario[0];
GrupoUsuarios.get({
id: grupo.id
})
.$promise.then(function (grupo) {
});
}
}
});
}
/**
* @method deleteGrupoUsuarios
*
* @param {*} event
* @param {*} grupo
*/
function deleteGrupoUsuarios(event, grupo) {
var confirm = $mdDialog.confirm()
.title('Tem certeza que deseja deletar o grupo ' + grupo.nome + ' ?')
.content('Esta ação é irreversível.')
.ariaLabel('Deletar Grupo')
.ok('Sim')
.cancel('Cancelar')
.targetEvent(event);
$mdDialog.show(confirm).then(function () {
GrupoUsuarios.delete({
id: grupo.id
})
.$promise.then(function () {
popularGruposUsuarios();
});
}, function () {
});
}
/**
* @method editGrupoUsuarios
*
* @param {*} event
* @param {*} grupo
*/
function editGrupoUsuarios(event, grupo) {
$mdDialog.show({
templateUrl: 'EditGrupoUsuarios.html',
controller: EditGrupoUsuariosCtrl,
targetEvent: event,
locals: {
grupo: grupo
}
}).then(function (_grupo) {
grupo.nome = _grupo.nome;
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('O Grupo de Usuários foi salvo com sucesso.')
.ok('OK'));
});
}
/**
* @method EditGrupoUsuariosCtrl
*
* @param {*} $scope
* @param {*} GrupoUsuarios
* @param {*} $mdDialog
* @param {*} grupo
*/
function EditGrupoUsuariosCtrl($scope, GrupoUsuarios, $mdDialog, grupo) {
$scope.res = $scope.$root.res;
$scope.grupo = _.clone(grupo);
/**
* @method salvar
* @memberof EditGrupoUsuariosCtrl
*/
function salvar() {
GrupoUsuarios.save($scope.grupo)
.$promise.then(function (grupo) {
$mdDialog.hide(grupo);
console.log(grupo);
});
}
function cancelar() {
$mdDialog.hide();
}
angular.extend($scope, {
salvar: salvar,
cancelar: cancelar,
grupo: _.clone(grupo)
});
}
/**
* @method popularGruposUsuarios
*/
function popularGruposUsuarios() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuarios/')
.then(function (response) {
console.log(response.data);
if (typeof response.data === 'object') {
$scope.gruposUsuario = _.map(response.data, function (grupoUsuarios) {
return {
id: grupoUsuarios.id,
nome: grupoUsuarios.nome,
val: false,
usuarios: _.filter(grupoUsuarios.Usuarios, function (usuario) {
return usuario.ativo;
})
};
});
if ($scope.gruposUsuario.length > 0) {
selecionarGrupo($scope.gruposUsuario[0]);
}
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method popularUsuarios
*/
function popularUsuarios() {
Usuario.obterShortUsers().then(function (usuarios) {
$scope.usuarios = _.map(usuarios, function (usuario) {
return {
nome: usuario.nome,
val: false,
id: usuario.id
};
});
organizarUsuarios();
});
}
var salvarGrupoUsuarios = _.debounce(function (grupoUsuarios) {
$http.post(API_ENDPOINT + 'grupo_usuarios/' + grupoUsuarios.id + '/usuarios', {
usuarios: grupoUsuarios.usuarios
});
}, 800);
/**
* @method removerUsuarioGrupo
*
* @param {*} usuario
* @param {*} grupo
*/
function removerUsuarioGrupo(usuario, grupo) {
_.remove(grupo.usuarios, { 'id': usuario.id });
salvarGrupoUsuarios(grupo);
}
/**
* @method escolherUsuarios
*/
function escolherUsuarios() {
$scope.grupoSelecionado.usuarios = [];
var usuariosEscolhidos = _.filter($scope.usuarios, 'val');
$scope.grupoSelecionado.usuarios = usuariosEscolhidos;
_.each(usuariosEscolhidos, function (usuario) {
usuario.valG = true;
});
salvarGrupoUsuarios($scope.grupoSelecionado);
}
/**
* @method selecionarGrupo
* @param {*} grupo
*/
function selecionarGrupo(grupo) {
if ($scope.grupoSelecionado === undefined) {
$scope.grupoSelecionado = $scope.gruposUsuario[0];
$scope.grupoSelecionado.val = true;
}
if (grupo !== $scope.grupoSelecionado) {
$scope.grupoSelecionado.val = false;
$scope.grupoSelecionado = grupo;
grupo.val = true;
}
organizarUsuarios();
}
/**
* @method organizarUsuarios
*/
function organizarUsuarios() {
$scope.usuarios = _.map($scope.usuarios, function (usuario) {
if (_.find($scope.grupoSelecionado.usuarios, {
'nome': usuario.nome
})) {
usuario.val = true;
usuario.valG = true;
} else {
usuario.val = false;
usuario.valG = false;
}
return usuario;
});
}
angular.extend($scope, {
selecionarGrupo: selecionarGrupo,
escolherUsuarios: escolherUsuarios,
novoUsuario: novoUsuario,
novoGrupoUsuarios: novoGrupoUsuarios,
editGrupoUsuarios: editGrupoUsuarios,
deleteGrupoUsuarios: deleteGrupoUsuarios,
removerUsuarioGrupo: removerUsuarioGrupo,
grupoUsuarios: [],
usuarios: [],
departamentos: []
});
popularGruposUsuarios()
.then(function () {
popularUsuarios();
});
}
AdminUsuarioCtrl.$inject = [
'$scope',
'$http',
'$q',
'$mdDialog',
'API_ENDPOINT',
'Usuario',
'GrupoUsuarios',
'localize',
'FileUploader'
];
angular.module('s4c.controllers.AdminUsuarioCtrl', [
'ngMaterial',
's4c.services.Usuario',
's4c.services.GrupoUsuarios'
])
.controller('AdminUsuarioCtrl', AdminUsuarioCtrl);
}());