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

Merge branch '42-atualiza-o-schema-do-bancos-de-dados' into 'development'

atualiza script de upload para não adicionar turmas que não possua todos os campos na planilha

Closes #42

See merge request !46
parents 01bacd41 5f608b0e
......@@ -254,19 +254,23 @@ function criaTipodesala(cb){
function criaSecretario(cb){
var secretarios = [
{email:'secretario_curso@secretario.com',vinculo: 'curso'},
{email:'secretario_dpto@secretario.com',vinculo: 'departamento'},
{email:'secretario_setor@secretario.com',vinculo: 'setor'}
{email:'bcc@secretario.com',vinculo: 'curso',valor_vinculo:"21A"},
{email:'informatica@secretario.com',vinculo: 'departamento',valor_vinculo:"informatica"},
{email:'exatas@secretario.com',vinculo: 'setor',valor_vinculo:"exatas",}
]
async.each(secretarios, function(secretario, callback) {
app.models.Usuario.findOne({where:{email: secretario.email}}, function(err, user){
user.secretario.create( {vinculo: secretario.vinculo},function(err,secre) {
if (err) throw err;
if(LOG_CREATE) console.log('Created Secretario:', secre);
callback(err);
});
});
app.models.Secretario.create(secretario, (err,s)=>{
app.models.Usuario.findOne({where:{email: secretario.email}}, ( err,user)=>{
if (err && !user ) throw err;
user.updateAttribute("secretarioCod",s.id,(err)=>{
if (err) throw err;
if(LOG_CREATE) console.log('Created Secretario:', secre);
callback(err);
})
})
})
}, function(err) {
if (err) throw err;
cb(err);
......@@ -302,9 +306,9 @@ function atribuiRoles(cb){
var atribuicoes = [
{email:'admin@admin.com',role: 'admin'},
{email:'comissao@comissao.com',role: 'comissao'},
{email:'secretario_setor@secretario.com',role: 'secretario_setor'},
{email:'secretario_dpto@secretario.com',role: 'secretario_dpto'},
{email:'secretario_curso@secretario.com',role: 'secretario_curso'}
{email:'exatas@secretario.com',role: 'secretario_setor'},
{email:'informatica@secretario.com',role: 'secretario_dpto'},
{email:'bcc@secretario.com',role: 'secretario_curso'}
]
......@@ -329,9 +333,9 @@ function criaUsuario(cb){
var usuarios = [
{username: 'admin',nome:'Administrador do Sistema', email: 'admin@admin.com', password: '123mudar'},
{username: 'comissao',nome:'Comissão de Ensalamento', email: 'comissao@comissao.com', password: '123mudar'},
{username: 'secretario_setor',nome:'Secretário do Setor', email: 'secretario_setor@secretario.com', password: '123mudar'},
{username: 'secretario_dpto',nome:'Secretário de Departamento,', email: 'secretario_dpto@secretario.com', password: '123mudar'},
{username: 'secretario_curso',nome:'Secretário de Curso', email: 'secretario_curso@secretario.com', password: '123mudar'}
{username: 'exatas',nome:'Secretário do Setor', email: 'exatas@secretario.com', password: '123mudar'},
{username: 'informatica',nome:'Secretário de Departamento,', email: 'informatica@secretario.com', password: '123mudar'},
{username: 'bcc',nome:'Secretário de Curso', email: 'bcc@secretario.com', password: '123mudar'}
];
......
......@@ -144,4 +144,37 @@ module.exports = function(Horario) {
}
return _t;
};
/**
* pesquisa por bloco
* @param {string} query query
* @param {Function(Error, array)} callback
*/
Horario.searchByBloco = async function(query) {
var _query = { ilike: "%" + query + "%" };
var turmas = await app.models.Turma.find({
where: { merged: false },
include: [
"professores",
"disciplina",
"cursos",
{
relation: "horarios",
scope: {
where: { blocoCod: _query }
}
}
]
});
var _t = [];
for (var i = 0; i < turmas.length; i++) {
var horarios = await turmas[i].horarios.find();
if (horarios && horarios.length) {
await _t.push(turmas[i]);
}
}
return _t;
};
};
......@@ -51,6 +51,11 @@
"type": "hasMany",
"model": "Turma",
"foreignKey": "turmaCod"
},
"bloco": {
"type": "belongsTo",
"model": "Bloco",
"foreignKey": "blocoCod"
}
},
"acls": [
......@@ -104,6 +109,31 @@
"verb": "get"
}
]
},
"searchByBloco": {
"accepts": [
{
"arg": "query",
"type": "string",
"required": false,
"description": "query"
}
],
"returns": [
{
"arg": "turmas",
"type": "array",
"root": false,
"description": "lista de turmas que estão ensaladas nos blocos correspondente a query"
}
],
"description": "pesquisa por bloco",
"http": [
{
"path": "/searchbloco",
"verb": "get"
}
]
}
}
}
'use strict';
var app = require('../../server/server');
const async = require('async');
module.exports = function(Secretario) {
Secretario.observe('after save', async function(ctx) {
if(ctx.instance) { // se instancia é valido então adiciona secretario a departamento ou setor
var modelo = ctx.instance.vinculo
modelo = modelo.charAt(0).toUpperCase() + modelo.slice(1)
if(app.models[modelo]) {// verifica se o modelo existe
var model = await app.models[modelo].findById(ctx.instance.valor_vinculo)
if(model) {
await model.updateAttribute("secretarioId",ctx.instance.id)
}
}
}
})
};
......@@ -10,6 +10,10 @@
"type": "string",
"required": true,
"default": "departamento"
},
"valor_vinculo": {
"type": "string",
"required": true
}
},
"validations": [],
......
......@@ -12,8 +12,13 @@ module.exports = function(Semestre) {
var horarios = await turma.horarios.find( )
for( var j=0; j<horarios.length; j++ ) {
// remove a sala
if(horarios[j].sala)
await horarios[j].sala.destroy()
// remove o bloco
if(horarios[j].blocoCod)
await horarios[j].updateAttribute("blocoCod",null)
}
}
......@@ -35,7 +40,7 @@ module.exports = function(Semestre) {
turma.destroy()
}
// remove o arquivo, caso ele exista
if(semestre.fileUploads) {
if(semestre.fileUploadId) {
fileupload = await semestre.fileUploads.get( )
fileupload.destroy()
}
......
......@@ -234,16 +234,12 @@ module.exports = function(Turma) {
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)
})
......
......@@ -109,20 +109,8 @@ Usuario.create_usuario = async function(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)
var _secretario = await app.models.Secretario.replaceOrCreate(usuario.secretario)
await _usuario.updateAttribute("secretarioCod",_secretario.id)
return {"msg":"ok","usuario":_usuario,"code":0}
};
......
......@@ -19,9 +19,9 @@
"validations": [],
"relations": {
"secretario": {
"type": "embedsOne",
"type": "belongsTo",
"model": "Secretario",
"property": "secretario"
"foreignKey": "secretarioCod"
},
"ensalamentos": {
"type": "hasMany",
......
......@@ -2,14 +2,14 @@
set -e
#if [ "$1" = 'DEVELOPMENT' ]; then
# /usr/local/bin/node /app/bin/automigrate.js
# # echo "oi"
#fi
#
#if [ "$1" = 'PRODUCTION' ]; then
# /usr/local/bin/node /app/bin/automigrate.js
#fi
if [ "$1" = 'DEVELOPMENT' ]; then
/usr/local/bin/node /app/bin/automigrate.js
# echo "oi"
fi
if [ "$1" = 'PRODUCTION' ]; then
/usr/local/bin/node /app/bin/automigrate.js
fi
# echo "while true; do sleep 2; done" >> /app/test.sh && chmod +x /app/test.sh
# /bin/bash /app/test.sh
......
......@@ -134,15 +134,25 @@ function pre_ensalamento(cb) {
async.each(schedules,
(s,cb_s) => {
var query = {where:{id: s.id}};
Horario.findOne(query, (err, h) => {
if(err) return cb(err,null);
if(!s.assigned)
console.log(s);
else
h.updateAttribute("salaCode", s.assigned, err => {
cb_s(err);
});
app.models.Sala.findById(s.assigned, (err,sala)=>{
if(err) return cb(err,null)
h.updateAttribute("salaCode", s.assigned, (err) => {
if(err) return cb(err,null)
h.updateAttribute("blocoCod",sala.blocoCod, (err)=>{
cb_s(err);
})
});
})
});
},
(err) => {
// If everything is ok
......
......@@ -17,12 +17,28 @@ turma_import(options.container, options.file, options, function (err){
process.exit(err ? 1 : 0);
});
function check_fields(obj) {
var fields_missing = []
Object.entries(obj).forEach(([key,value]) =>{
if (!value)
fields_missing.push(key)
})
return fields_missing
}
async function handle_line(line) {
if (line.COD_DISCIPLINA === "" || line.NOME_DISCIPLINA === "")
return {"status":true,"msg":"nome ou código de disciplina vazia"};
var course = line.NOME_DISCIPLINA.replace('\n','');
var period_list = line.PERIODO.split(' ');
// verifica a quantidade de campos da linha, deve ter ao menos
var fields_missing = check_fields(line)
if(fields_missing.length) {
return {"status":true,"msg":"Campos faltando"}
}
var row = {
'ano': period_list[period_list.length -1],
'duracao': (period_list[0] == "Anual")? "Anual" : "Semestral",
......@@ -37,8 +53,6 @@ async function handle_line(line) {
'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" || row.dia_semana == "s") // sie não é consistente
......@@ -48,7 +62,6 @@ async function handle_line(line) {
// 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) {
// if(!obj || obj.length == 0)
......@@ -148,15 +161,14 @@ 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({
var _er = await FileUploadError.create({
"line":line_number,
"message":result.msg,
"fileUpload":fileupload.id
});
}
if (line_number % 10) {
if (line_number % 100) {
var completed = get_completed(line_number,total_line);
await fileupload.updateAttribute("completed",completed);
}
......
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