Commit e14458f3 authored by Matheus Horstmann's avatar Matheus Horstmann 🐴

Merge branch 'development' into 'pesquisaPorSala'

# Conflicts:
#   ensalamento-entrypoint.sh
parents ba071555 f5d0f2a9
'use strict';
var acl_custom = require("../../server/acl_custom");
module.exports = function(Bloco) {
Bloco.observe("before save", function(ctx,next) {
acl_custom.aclSecretarioSetor(["bloco","Bloco"],ctx,next)
})
};
......@@ -63,13 +63,13 @@
},
{
"principalType": "ROLE",
"principalId": "admin",
"principalId": "secretario_setor",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_setor",
"principalId": "admin",
"permission": "ALLOW",
"property": "*"
}
......
......@@ -52,6 +52,12 @@
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "comissao",
......
'use strict';
var app = require('../../server/server');
var acl_custom = require("../../server/acl_custom");
module.exports = function(Disciplina) {
Disciplina.observe("before save", function(ctx,next) {
ctx.instance.codigo = (ctx && ctx.instance && ctx.instance.codigo) ? ctx.instance.codigo.toLowerCase() : ctx.instance.codigo
acl_custom.aclSecretarioDpto(["Disciplina","codigo"],ctx,next)
})
// The follow remote methods was constructed because there is many problems
// in the Model Self Relation in LoopBack API 3
// The model EquivalenciaDisciplina was created to implement this relation
......
......@@ -94,6 +94,12 @@
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW",
"property": "*"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
......
'use strict';
var app = require('../../server/server');
var acl_custom = require("../../server/acl_custom");
const async = require('async');
module.exports = function(Professor) {
Professor.observe("before save", function(ctx,next) {
acl_custom.aclSecretarioDpto(["Professor","professor"],ctx,next)
})
/**
* search turma by professor query
* @param {string} query query
......@@ -16,6 +23,7 @@ module.exports = function(Professor) {
{codigo: _query},
{email: _query},
{website: _query}
]}})
for (var i=0; i< professores.length; i++) {
......
......@@ -54,6 +54,12 @@
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW",
"property": "*"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
......
......@@ -40,13 +40,45 @@
"model": "Departamento",
"foreignKey": "departamentoCod"
},
"departamento": {
"sala": {
"type": "belongsTo",
"model": "Sala",
"foreignKey": "salaCod"
}
},
"acls": [],
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "secretario_setor",
"permission": "ALLOW"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "comissao",
"permission": "ALLOW"
}
],
"methods": {
"reservar": {
"accepts": [
......
'use strict';
var app = require('../../server/server');
const async = require('async');
module.exports = function(Sala) {
Sala.observe("before save", function(ctx,next) {
if(!ctx.options || !ctx.options.accessToken || !ctx.options.accessToken.userId)
return next()
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.instance)
})
},
function(user,instance,callback) { // pega a role
user.getRole((err,obj)=>{
return callback(err,user,instance,obj);
})
},
function(user,instance,role,callback) { // verifica a role, se for secretario então pega o secretario
if(role == "secretario_setor")
return callback(null,user,instance,user._secretario)
else
return callback(true,{"code":1}) // quer dizer que a role não é de secretario
},
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models.Sala.findById(instance.codigo,(err,obj)=>{
if(obj)
return callback(err,user,instance,secretario,obj)
else
return callback(err,user,instance,secretario,instance)
})
},
function(user,instance,secretario,modelo,callback) { // pega o bloco da instancia
app.models.Bloco.findById(modelo.blocoCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":4,"msg":"Bloco não existe"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,bloco,callback) { // pega o setor da instancia
app.models.Setor.findById(bloco.setorCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Setor não existe"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,setor,callback) { // verifica se o setor da instancia é igual a do secretario
if(secretario.vinculo == "setor" )
if (setor.codigo == secretario.valor_vinculo)
return callback(true,{"code":2}) // pode salvar
else
return callback(true,{"code":3,"msg":"O secretário não possui permissao para alterar este modelo"}) // não salva, setor diferentes
}
], function(err,result){
if(err) {
if(result) {
if(result.code == 3) //não salva
return next(new Error(result.msg))
if(result.code == 2 || result.code == 1)
return next()
}
}
return next()
})
})
Sala.search = async function(query) {
var _query = {ilike:"%"+query+"%"}
......
......@@ -95,6 +95,12 @@
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_setor",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "admin",
......
......@@ -4,10 +4,15 @@ var app = require('../../server/server');
const async = require('async');
const { fork } = require('child_process');
const loopback = require('loopback');
var acl_custom = require("../../server/acl_custom");
const Disciplina = app.models.Disciplina;
const DEBUG = true
module.exports = function(Turma) {
Turma.observe("before save", function(ctx,next) {
acl_custom.aclSecretarioDpto(["Turma","codigo"],ctx,next)
})
Turma.validatesPresenceOf('disciplinaCod');
/**
* junta turmas
......@@ -227,6 +232,21 @@ module.exports = function(Turma) {
* @param {Function(Error, object)} callback
*/
Turma.beforeRemote("create_turma", function(ctx,a,next){
console.log("Antes do ctx",ctx.req,"aaaaaaaaaaaaaaaaaaaa")
const _ctx = {
"options": {
"accessToken": {"userId":ctx.req.accessToken.userId }
},
"instance": ctx.args.turma
}
console.log("---------------------- Inicio -----------------------")
console.log("Meu ctx",_ctx)
console.log("---------------------- Fim -----------------------")
acl_custom.aclSecretarioDpto(["Turma","codigo"],_ctx,next)
})
Turma.create_turma = async function(turma) {
//verifica se existe o campo id, se sim encontra modelo correspondente,
//caso contrário cria
......
......@@ -87,4 +87,44 @@ module.exports = function(Usuario) {
});
});
};
/**
* cria um usuario com valor de secretario
* @param {object} usuario objeto com as informacoes de usuarios
* @param {Function(Error, object)} callback
*/
Usuario.create_usuario = async function(usuario) {
// caso esteja editando, coloca senha que está no banco
if(usuario.id && !usuario.password ) {
var _user = await app.models.Usuario.findById(usuario.id)
usuario.password = _user.password
}
var _usuario = await app.models.Usuario.replaceOrCreate(usuario)
if(!_usuario)
return {"code":1, "msg":"erro ao tentar criar ou atualizar o usuario"}
if(!usuario.secretario) // se não tiver o campo do dicionario retorna mensagem de ok
return {"msg":"usuário criado ou atualizado com sucesso","usuario":_usuario,"code":0}
var _model = null
if(usuario.secretario.vinculo == "setor") //setor
_model = ["setor","Setor","setores","setorCod"]
else if(usuario.secretario.vinculo == "departamento") // departamento
_model = ["departamento","Departamento","departamentos","departamentoCod"]
if(usuario.secretario.id || usuario.secretario._id)
await _usuario.secretario.update(usuario.secretario)
else
await _usuario.secretario.create(usuario.secretario)
// verifica se secretario possui id, se sim tenta recuperar a instancia,
// caso contrário cria
//var _secretario = await check_existence("Secretario",usuario.secretario)
return {"msg":"ok","usuario":_usuario,"code":0}
};
};
......@@ -48,12 +48,6 @@
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "comissao",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
......@@ -62,7 +56,7 @@
},
{
"principalType": "ROLE",
"principalId": "secretario_curso",
"principalId": "comissao",
"permission": "ALLOW",
"property": "*"
}
......@@ -127,6 +121,31 @@
"verb": "delete",
"path": "/role"
}
},
"create_usuario": {
"accepts": [
{
"arg": "usuario",
"type": "object",
"required": true,
"description": "objeto com as informacoes de usuarios"
}
],
"returns": [
{
"arg": "status",
"type": "object",
"root": false,
"description": "objeto de retorno"
}
],
"description": "cria um usuario com valor de secretario",
"http": [
{
"path": "/create_usuario",
"verb": "post"
}
]
}
}
}
......@@ -4,6 +4,7 @@ set -e
#if [ "$1" = 'DEVELOPMENT' ]; then
# /usr/local/bin/node /app/bin/automigrate.js
# # echo "oi"
#fi
#
#if [ "$1" = 'PRODUCTION' ]; then
......
'use strict';
var app = require('./server');
const async = require('async');
async function aclSecretarioDpto(_model,ctx,next) {
if(!ctx.options || !ctx.options.accessToken || !ctx.options.accessToken.userId)
return next()
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.instance)
})
},
function(user,instance,callback) { // pega a role
user.getRole((err,obj)=>{
return callback(err,user,instance,obj);
})
},
function(user,instance,role,callback) { // verifica a role, se for secretario então pega o secretario
if(role == "secretario_dpto")
return callback(null,user,instance,user._secretario)
else
return callback(true,{"code":1}) // quer dizer que a role não é de secretario
},
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models[_model[0]].findById(instance[_model[1]],(err,obj)=>{
console.log("obj",obj)
if(obj)
return callback(err,user,instance,secretario,obj)
else
return callback(null,user,instance,secretario,instance)
})
},
function(user,instance,secretario,modelo,callback) { // pega o departamento da instancia
console.log("modelo",modelo)
app.models.Departamento.findById(modelo.departamentoCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Departamento não existe"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,departamento,callback) { // verifica se o departamento da instancia é igual a do secretario
if (departamento.codigo == secretario.valor_vinculo)
return callback(true,{"code":2}) // pode salvar
else
return callback(true,{"code":3,"msg":"O secretário não possui permissao para alterar este modelo"}) // não salva, departamento diferentes
}
], function(err,result){
if(err) {
if(result) {
if(result.code == 3){//não salva
console.log("code 333")
return next(new Error(result.msg))
}
if(result.code == 2 || result.code == 1)
return next()
}
}
console.log("como entrei aqui")
return next()
})
}
function aclSecretarioSetor(_model,ctx,next) {
if(!ctx.options || !ctx.options.accessToken || !ctx.options.accessToken.userId)
return next()
async.waterfall([
function(callback) { // pega os dados do ctx
app.models.Usuario.findById(ctx.options.accessToken.userId,(err,obj)=>{
return callback(err,obj,ctx.instance)
})
},
function(user,instance,callback) { // pega a role
user.getRole((err,obj)=>{
return callback(err,user,instance,obj);
})
},
function(user,instance,role,callback) { // verifica a role, se for secretario então pega o secretario
if(role == "secretario_setor")
return callback(null,user,instance,user._secretario)
else
return callback(true,{"code":1}) // quer dizer que a role não é de secretario
},
function(user,instance,secretario,callback) { // pega a instancia no banco
app.models[_model[0]].findById(instance[_model[1]],(err,obj)=>{
if(obj)
return callback(err,user,instance,secretario,obj)
else
return callback(err,user,instance,secretario,instance)
})
},
function(user,instance,secretario,modelo,callback) { // pega o setor da instancia
app.models.Setor.findById(modelo.setorCod,(err,obj)=>{
if(!obj)
return callback(true,{"code":3,"msg":"Setor não existe"})
return callback(err,user,instance,secretario,obj)
})
},
function(user,instance,secretario,setor,callback) { // verifica se o setor da instancia é igual a do secretario
if(secretario.vinculo == "setor" )
if (setor.codigo == secretario.valor_vinculo)
return callback(true,{"code":2}) // pode salvar
else
return callback(true,{"code":3,"msg":"O secretário não possui permissao para alterar este modelo"}) // não salva, setor diferentes
}
], function(err,result){
if(err) {
if(result) {
if(result.code == 3) //não salva
return next(new Error(result.msg))
if(result.code == 2 || result.code == 1)
return next()
}
}
return next()
})
}
module.exports.aclSecretarioDpto = aclSecretarioDpto;
module.exports.aclSecretarioSetor = aclSecretarioSetor;
......@@ -70,7 +70,7 @@
},
"Secretario": {
"dataSource": "ensalamento",
"public": false
"public": true
},
"Setor": {
"dataSource": "ensalamento",
......
......@@ -33,18 +33,21 @@ async function handle_line(line) {
'horario_ini': line.HR_INICIO,
'departamento': line.NOME_DEPTO,
'horario_fim': line.HR_FIM,
'curso_cod': line.COD_CURSO,
'curso_cod': line.COD_CURSO.toUpperCase(),
'turma_cod': line.COD_TURMA,
'periodo': (period_list[0] == "Anual")? 0 : period_list[0].charAt(0)
};
if(row.disciplina_cod == "bc037" || row.disciplina_cod == "BC037")
console.log("\n------------------------\nrow:",row,"\n ---------------\n")
// change value 'sabado' to a number 7
if (row.dia_semana == "S")
if (row.dia_semana == "S" || row.dia_semana == "s") // sie não é consistente
row.dia_semana = 7;
// TODO<Odair M. - odairmario45@gmail.com - 12/10/2019>: popular corretamente o
// departamento, o nome do departamento no csv é diferente do que está
// na base de dados
//
//return cb(null,row,{"codigo":row.departamento});
var departamento = {"codigo":row.departamento};
//Departamento.find({where:{"nome":row.departamento}},function(err,obj) {
......@@ -59,6 +62,7 @@ async function handle_line(line) {
// erro para o callback
if (row.dia_semana == "")
return {"status":true,"msg":"dia da semana vazio","row":row};
var horario = {
"livre":false,
......@@ -144,6 +148,7 @@ async function turma_import(container, file, options, callback) {
var result = await handle_line(row);
// write error msg in fileupload
if(result.status == true) {
console.log("error:",result, " linha: ",line_number)
await FileUploadError.create({
"line":line_number,
"message":result.msg,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment