/**
* @ngdoc controllers
* @name GrupoUsuarios
* @module s4c.components.admin.controllers.GrupoUsuarios
*
* @description
* `AdminGrupoUsuariosCtrl` Controller da tela de Grupos de Usuários do módulo de administração
*
*
*/
(function () {
'use strict';
function AdminGrupoUsuariosCtrl($scope, $http, $q, API_ENDPOINT, GrupoUsuarios, MainState, CamadasService, Menu) {
/**
* @method popularGrupos
*/
function popularGrupos() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupos/')
.then(function (response) {
if (typeof response.data === 'object') {
$scope.grupos = _.map(response.data, function (grupo) {
return {
id: grupo.id,
nome: grupo.nome,
acervos: _.map(grupo.Acervos, function (acervo) {
acervo.AcervoGrupoUsuarios = {
administrador: false
};
return acervo;
})
};
});
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method popularAtivosMoveis
*/
function popularAtivosMoveis() {
var deferred = $q.defer();
/* Módulos */
$http.get(API_ENDPOINT + 'viaturas/permissoes')
.then(function (response) {
$scope.ativosMoveis = response.data
deferred.resolve();
});
return deferred.promise;
}
/**
* @method isNotInABlackList
* @param {*} modulo
*/
function isNotInABlackList(modulo) {
if (modulo.template == 'app/components/modulos/modulo-zonas-de-observacao.html' && !MainState.isToShow('zona_mapa')) {
return false;
}
if (modulo.template == 'app/components/modulos/modulo-msi.html' && !MainState.isToShow('incidentes_mapa')) {
return false;
}
if (modulo.template == 'app/components/modulos/modulo-cameras.html' && !MainState.isToShow('camera_mapa')) {
return false;
}
if (modulo.template == 'app/components/modulos/modulo-rotas-unificadas.html' && !MainState.isToShow('rota_mapa')) {
return false;
}
return true;
}
/**
* @method popularFaces
*/
function popularFaces() {
/* Módulos */
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'faces/')
.then(function (response) {
if (typeof response.data === 'object') {
response.data = _.filter(response.data, function (modulo) {
return isNotInABlackList(modulo);
});
$scope.faces = _.map(response.data, function (faces) {
return {
id: faces.id,
name: faces.name,
val: false,
FaceGrupoUsuarios: {
administrador: false
}
};
});
deferred.resolve();
} else {
return deferred.reject(response.data);
}
}, function (response) {
return deferred.reject(response.data);
});
return deferred.promise;
}
/**
* @method popularGruposUsuarios
*/
function popularGruposUsuarios() {
var deferred = $q.defer();
GrupoUsuarios.query().$promise
.then(function (_gruposUsuarios) {
$scope.gruposUsuarios = _.map(_gruposUsuarios, function (grupoUsuarios) {
return {
id: grupoUsuarios.id,
nome: grupoUsuarios.nome,
val: false,
faces: grupoUsuarios.Faces,
acervos: grupoUsuarios.Acervos,
ativosMoveis: grupoUsuarios.OrganizacaoViaturas
};
});
deferred.resolve();
});
return deferred.promise;
}
/**
* @method selecionarGrupo
* @param {*} grupo
*/
function selecionarGrupo(grupo) {
if ($scope.grupoSelecionado === undefined) {
$scope.grupoSelecionado = $scope.gruposUsuarios[0];
$scope.grupoSelecionado.val = true;
}
if (grupo !== $scope.grupoSelecionado) {
$scope.grupoSelecionado.val = false;
$scope.grupoSelecionado = grupo;
grupo.val = true;
}
organizarFacesAcervos();
}
/**
* @method organizarFacesAcervos
*/
function organizarFacesAcervos() {
$scope.faces = _.map($scope.faces, function (face) {
if (_.find($scope.grupoSelecionado.faces, {
'id': face.id
})) {
face.val = true;
face.valG = true;
} else {
face.val = false;
face.valG = false;
}
return face;
});
$scope.grupos = _.map($scope.grupos, function (grupo) {
_.each(grupo.acervos, function (acervo) {
if (_.find($scope.grupoSelecionado.acervos, {
'id': acervo.id
})) {
acervo.val = true;
acervo.valG = true;
} else {
acervo.val = false;
acervo.valG = false;
}
});
return grupo;
});
$scope.ativosMoveisSelecionados = $scope.grupoSelecionado.ativosMoveis;
tratarArvoreAtivosMoveis($scope.ativosMoveis);
}
/**
* @method escolherFacesAcervos
*/
function escolherFacesAcervos() {
$scope.grupoSelecionado.faces = [];
var facesEscolhidas = _.filter($scope.faces, 'val');
_.each($scope.grupos, function (grupo) {
_.each(grupo.acervos, function (acervo) {
if (acervo.val && !acervo.valG) {
acervo.valG = true;
if (!$scope.grupoSelecionado.acervos) {
$scope.grupoSelecionado.acervos = [];
}
$scope.grupoSelecionado.acervos.push(acervo);
}
});
});
$scope.grupoSelecionado.faces = facesEscolhidas;
$scope.grupoSelecionado.ativosMoveis = $scope.ativosMoveisSelecionados;
_.each(facesEscolhidas, function (face) {
face.valG = true;
});
savePermissions().then(function () {
Menu.clearPromise();
CamadasService.getInstance('camadas-service').trigger('reloadMenuCamada');
});
}
/**
* @method savePermissions
*/
function savePermissions() {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'grupo_usuarios/savePermissions', {
grupoUsuarios: $scope.grupoSelecionado
})
.then(function (response) {
deferred.resolve(response);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method atualizarAcervo
*/
function atualizarAcervo() {
savePermissions();
}
/**
* @method atualizarFace
*/
function atualizarFace() {
savePermissions();
}
/**
* @method removerAcervo
* @param {*} acervo
*/
function removerAcervo(acervo) {
var _acervo = _.find($scope.grupoSelecionado.acervos, {
id: acervo.id
});
if (_acervo) {
var index = $scope.grupoSelecionado.acervos.indexOf(_acervo);
$scope.grupoSelecionado.acervos.splice(index, 1);
savePermissions();
}
}
/**
* @method removerFace
* @param {*} face
*/
function removerFace(face) {
var _face = _.find($scope.grupoSelecionado.faces, {
id: face.id
});
if (_face) {
var index = $scope.grupoSelecionado.faces.indexOf(_face);
$scope.grupoSelecionado.faces.splice(index, 1);
savePermissions();
}
}
/**
* @method removerAtivoMovel
* @param {*} ativo
*/
function removerAtivoMovel(ativo) {
var _ativo = _.find($scope.grupoSelecionado.ativosMoveis, {
id: ativo.id
});
if (_ativo) {
var index = $scope.grupoSelecionado.ativosMoveis.indexOf(_ativo);
$scope.grupoSelecionado.ativosMoveis.splice(index, 1);
savePermissions();
}
}
/**
* @method toggleAtivo
* @param {*} ativo
*/
function toggleAtivo(ativo) {
_.remove($scope.ativosMoveisSelecionados, { chave_estrangeira: ativo.chave_estrangeira });
if (ativo.ativo) {
$scope.ativosMoveisSelecionados.push(ativo);
}
_.each(ativo.subOrganizacoes, function (subOrganizacao) {
subOrganizacao.ativo = ativo.ativo;
toggleAtivo(subOrganizacao);
});
}
/**
* @method tratarArvoreAtivosMoveis
* @param {*} ativos
*/
function tratarArvoreAtivosMoveis(ativos) {
_.each(ativos, function (ativoMovel) {
if (ativoMovel.subOrganizacoes.length) {
tratarArvoreAtivosMoveis(ativoMovel.subOrganizacoes);
}
var ativoSelecionado = _.find($scope.grupoSelecionado.ativosMoveis,
{ chave_estrangeira: ativoMovel.chave_estrangeira });
if (ativoSelecionado) {
ativoMovel.ativo = true;
} else {
ativoMovel.ativo = false;
}
})
}
popularAtivosMoveis().then(function () {
popularFaces().then(function () {
popularGrupos().then(function () {
popularGruposUsuarios().then(function () {
selecionarGrupo($scope.gruposUsuarios[0]);
});
});
});
});
$scope.faces = [];
$scope.grupos = [];
$scope.gruposUsuarios = [];
$scope.ativosMoveisSelecionados = [];
$scope.selecionarGrupo = selecionarGrupo;
$scope.escolherFacesAcervos = escolherFacesAcervos;
$scope.atualizarAcervo = atualizarAcervo;
$scope.removerAcervo = removerAcervo;
$scope.atualizarFace = atualizarFace;
$scope.removerFace = removerFace;
$scope.removerAtivoMovel = removerAtivoMovel;
$scope.toggleAtivo = toggleAtivo;
$scope.treeOptions = {
nodeChildren: 'subOrganizacoes',
defaultCollapsed: false
}
}
AdminGrupoUsuariosCtrl.$inject = ['$scope', '$http', '$q', 'API_ENDPOINT', 'GrupoUsuarios', 'MainState',
'CamadasService', 'Menu'];
angular.module('s4c.controllers.AdminGrupoUsuariosCtrl', ['ngMaterial'])
.controller('AdminGrupoUsuariosCtrl', AdminGrupoUsuariosCtrl);
}());