Commit bffe3b7e authored by Odair M.'s avatar Odair M.

mudanças na junçaode turma e horarios

Arrumando separação de horários

add relatin before merge turma
parent c4fbcba6
Subproject commit 0218b69b045f5b0c11e1eb695d93735a314be66f
Subproject commit ac1b7c80fc9984fbf4798880ae82c89308d88cf0
......@@ -6,6 +6,21 @@ function get_time(name,t) {
console.log(name+": "+i);
}
module.exports = function(Horario) {
Horario.observe("before save", function(ctx,next) {
var instance = ctx.data
//veriffica se a sala foi setada e o bloco não, caso positivo encontra
//o bloco da sala e seta
if( instance && instance.salaCode && !instance.blocoCod) {
app.models.Sala.findById(instance.salaCode, ( err,obj)=>{
if(err || !obj)
return next(true)
ctx.data.blocoCod = obj.blocoCod
return next( )
})
} else
return next()
})
Horario.getCode = async function(horario_id,turmas, cb){
......@@ -162,7 +177,7 @@ module.exports = function(Horario) {
new_r["disciplina"] = {}
new_r["disciplina"]["codigo"] = "reserva"
new_r["disciplina"]["nome"] = "Reserva"
new_r["disciplina"]["nome"] = r.observacao
new_r["disciplina"]["equivalenced"] = false
new_r["disciplina"]["carga_horaria"] = 0
new_r["disciplina"]["duracao"] = 'semestral'
......@@ -172,7 +187,7 @@ module.exports = function(Horario) {
new_r["disciplina"]["departamentoCod"] = null
let curso = {}
curso["nome"] = "Reserva"
curso["nome"] = r.motivo
curso["codigo"] = 'Reserva'
curso["_id"] = data_date.getTime()
curso["localizacao"] = null
......
......@@ -49,8 +49,12 @@
"horario": {
"type": "belongsTo",
"model": "Horario",
"foreignKey": "mergedCod",
"invert": true
"foreignKey": "mergedCod"
},
"horario_merge": {
"type": "hasMany",
"model": "Horario",
"foreignKey": "mergedCod"
},
"ensalamento": {
"type": "belongsTo",
......
......@@ -69,6 +69,21 @@ module.exports = function(Turma) {
return false;
}
// salva as relacoes de um modelo m em outra relacao de m, para poder
// juntar com as relacoes de de outro modelo
// Parametros:
// _model: modelo do banco ex curso
// modelname: nome da relacao que vai ser utilizado para salvar: // ex cursos_before_merged
// index: nome do atributo de indexacao do models_b
// models_b: lista de modelos que deverao sel salvo em modelname
async function set_model_before_merge(_model, modelname,index, models_b) {
// verifica se os parametros de entrada sao validos
if( models_b && models_b.length && _model && _model[modelname])
for(var i=0; i< models_b.length; i++) {
await _model[modelname].add( models_b[i][index])
}
}
Turma.juntar = async function(_turma_x,_turma_y) {
var turma_x = await app.models.Turma.findById(_turma_x)
......@@ -102,23 +117,39 @@ module.exports = function(Turma) {
await turma_y.updateAttribute("merged",true)
await turma_y.updateAttribute("mergedCod",turma_x.id)
// salva os cursos da turma x antes do merge
var cursos_x = await turma_x.cursos.find()
await set_model_before_merge(turma_x, "cursos_before_merged","codigo",cursos_x)
// salva os professores da turma x antes do merge
var professores_x = await turma_x.professores.find()
await set_model_before_merge(turma_x, "professores_before_merged","codigo",professores_x)
//adiciona os cursos da turma y na turma x
var cursos_y = await turma_y.cursos.find()
cursos_y.map((curso)=>{turma_x.cursos.add(curso.codigo)})
await set_model_before_merge(turma_y, "cursos_before_merged","codigo",cursos_y)
for( var i=0; i< cursos_y.length; i++) {
var curso = cursos_y[i]
await turma_x.cursos.add( curso.codigo)
}
//adiciona os professores da turma y na turma x
var professores_y = await turma_y.professores.find()
await set_model_before_merge(turma_y, "professores_before_merged","codigo",professores_y)
professores_y.map((professor)=>{turma_x.professores.add(professor.codigo)})
for( var i=0; i< professores_y.length; i++) {
var professor = professores_y[i]
await turma_x.professores.add( professor.codigo)
}
turma_x.save()
return turma_x;
};
async function check_horario_merge(horario_x,horario_y) {
function check_horario_merge(horario_x,horario_y) {
var horarios_iguais = true
if (horario_x.horario_inicial != horario_y.horario_inicial ||
horario_x.horario_final != horario_y.horario_final ||
horario_x.dia != horario_y.dia)
if (horario_x.horario_inicial !== horario_y.horario_inicial ||
horario_x.horario_final !== horario_y.horario_final ||
horario_x.dia !== horario_y.dia)
horarios_iguais = false;
return horarios_iguais;
......@@ -156,11 +187,34 @@ module.exports = function(Turma) {
//remove os cursos da turma y na turma x
var cursos_y = await turma_y.cursos.find()
cursos_y.map((curso)=>{turma_x.cursos.remove(curso.codigo)})
cursos_y = cursos_y.map(( curso)=> {return curso.codigo})
var cursos_x_before_merge = await turma_x.cursos_before_merged.find()
var cursos_x = {}
cursos_x_before_merge.map( ( curso) => {
cursos_x[curso.codigo] = curso.codigo
})
// itera cada curso da turma y e verifica se esta no conjunto de cursos
// antes do merge da turma x se nao estiver entao remove da turma y
console.log("Cursos x: " ,cursos_x)
console.log("cursos Y: ", cursos_y)
for(var i=0; i<cursos_y.length; i++) {
var curso = cursos_y[i]
console.log( "Curso: ",curso)
if( !cursos_x[curso])
await turma_x.cursos.remove(curso)
}
//remove os professores da turma y na turma x
var professores_y = await turma_y.professores.find()
professores_y.map((professor)=>{turma_x.professores.remove(professor.codigo)})
var professores_x = await turma_x.professores_before_merged.find()
for(var i=0; i<professores_y.length; i++) {
var professor = professores_y[i]
// verifica se professor não eh um professor em comun com os professores antes
// da juncao das turmas
var professores_b = await turma_x.professores_before_merged.findById(professor.codigo)
if( !professores_b)
await turma_x.professores.remove(professor.codigo)
}
return {"code":0, "msg": "Turma dividida com sucesso", "turmas": [turma_x,turma_y]};
}
/**
......@@ -174,28 +228,29 @@ module.exports = function(Turma) {
Turma.mergehorario = async function(_turma_x,_turma_y) {
// verifica se a turma x existe
var turma_x = await app.models.Turma.findById(_turma_x.turmaid)
if(!turma_x) return {"code":1, "msg": "Turma "+_turma_x.turmaid +" não encontrado."}
if(!turma_x) return {"code":1, "msg": "Turma "+_turma_x.turmaid +" não encontrada."}
// verifica se a turma y existe
var turma_y = await app.models.Turma.findById(_turma_y.turmaid)
if(!turma_y) return {"code":1, "msg": "Turma "+_turma_y.turmaid +" não encontrado."}
if(!turma_y) return {"code":1, "msg": "Turma "+_turma_y.turmaid +" não encontrada."}
// verifica se o horario x existe
var horario_x = await app.models.Horario.findById(_turma_x.horarioid)
if(!horario_x) return {"code":2, "msg": "Horario "+_turma_x.horarioid +" não encontrado."}
if(!horario_x) return {"code":2, "msg": "Horário "+_turma_x.horarioid +" não encontrado."}
// verifica se o horario y eyiste
var horario_y = await app.models.Horario.findById(_turma_y.horarioid)
if(!horario_y) return {"code":2, "msg": "Horario "+_turma_y.horarioid +" não encontrado."}
if(!horario_y) return {"code":2, "msg": "Horário "+_turma_y.horarioid +" não encontrado."}
// verifica se todos os horarios são no mesmo dia e possui a mesma hora
// de inicio e fim. se sim então une, caso contrário retorna mensagem
// dizendo que os horarios são diferentes
if (!check_horario_merge(horario_x,horario_y))
return {"code":3, "msg":"horarios são divergentes no dia ou hora de inicio ou fim"}
return {"code":3, "msg":"O dia, a hora de início ou de fim são diferentes."}
if(!check_disciplina(turma_x,turma_y)) return {"code":5, "msg": "disciplinas divergentes"}
if(!check_disciplina(turma_x,turma_y))
return {"code":5, "msg": "Disciplinas divergentes."}
await horario_y.updateAttribute("visible",false)
await turma_y.horarios.add(horario_x.id)
......@@ -204,29 +259,30 @@ module.exports = function(Turma) {
await horario_x.updateAttribute("mergedCod",horario_y.id)
await horario_x.updateAttribute("vagas",vagas_x+vagas_y)
return {"code":4,"msg":"união de horarios feita com sucesso"};
return {"code":4,"msg":"União de horários feita com sucesso."};
};
Turma.splithorario = async function(_turma_x, _turma_y) {
// verifica se a turma x existe
var turma_x = await app.models.Turma.findById(_turma_x.turmaid)
if(!turma_x) return {"code":1, "msg": "Turma "+_turma_x.turmaid +" não encontrado."}
if(!turma_x) return {"code":1, "msg": "Turma "+_turma_x.turmaid +" não encontrada."}
// verifica se a turma y existe
var turma_y = await app.models.Turma.findById(_turma_y.turmaid)
if(!turma_y) return {"code":1, "msg": "Turma "+_turma_y.turmaid +" não encontrado."}
if(!turma_y) return {"code":1, "msg": "Turma "+_turma_y.turmaid +" não encontrada."}
// verifica se o horario x existe
var horario_x = await app.models.Horario.findById(_turma_x.horarioid)
if(!horario_x) return {"code":2, "msg": "Horario "+_turma_x.horarioid +" não encontrado."}
if(!horario_x) return {"code":2, "msg": "Horário "+_turma_x.horarioid +" não encontrado."}
var horario_y = await app.models.Horario.findById(horario_x.mergedCod)
if(!horario_y) return {"code":2, "msg": "Horario "+horario_x.mergedCod +" não encontrado."}
if(!horario_y) return {"code":2, "msg": "Horário "+horario_x.mergedCod +" não encontrado."}
await horario_y.updateAttribute("visible",true)
await turma_y.horarios.remove(horario_x.id)
await horario_x.updateAttribute("mergedCod",null)
await horario_y.updateAttribute("vagas",0)
await horario_x.updateAttribute("vagas",0)
return {"code":0, "msg": "divisão de horarios feita com sucesso"}
return {"code":0, "msg": "Divisão de horários feita com sucesso."}
}
// dado uma lista de valores de um atributo verifica se a instancia do
......
......@@ -46,6 +46,10 @@
"model": "Curso",
"foreignKey": "cursosCod"
},
"cursos_before_merged": {
"type": "hasAndBelongsToMany",
"model": "Curso"
},
"turmasMergeds": {
"type": "belongsTo",
"model": "Turma",
......@@ -61,6 +65,10 @@
"model": "Professor",
"foreignKey": ""
},
"professores_before_merged": {
"type": "hasAndBelongsToMany",
"model": "Professor"
},
"horarios": {
"type": "hasAndBelongsToMany",
"model": "Horario"
......
......@@ -2,13 +2,13 @@
set -e
if [ "$1" = 'DEVELOPMENT' ]; then
/usr/local/bin/node /app/bin/automigrate.js
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
#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
......
......@@ -32,7 +32,7 @@ function getScheduleInstance(h, cb){
lat: horarioCoord.lat,
course: horarioCurso,
department: "dinf",
klass_id: 1
klass_id: 1,
assigned: horario.salaCode
});
cb(null,schedule);
......@@ -44,7 +44,7 @@ async function getAllSchedulesInstances(newEnsalamento,cb){
var Horario = app.models.Horario;
// TODO: Filter by parameters specified by user
var queryHorario = {where:{and:[{"visible":true},"livre":true]}};
var queryHorario = {where:{and:[{"visible":true},{"livre":true}]}};
var queryTurma = {
include: ["horarios","cursos"]
......
......@@ -62,7 +62,7 @@ async function handle_line(line) {
var horario = {
"livre":false,
"livre":true,
"dia": parseInt(row.dia_semana,10),
"horario_inicial":row.horario_ini,
"horario_final":row.horario_fim,
......
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