Commit 475ddea5 authored by Gabriel Silva Hermida's avatar Gabriel Silva Hermida Committed by Rafael S Castilho
Browse files

print removed


Signed-off-by: Gabriel Silva Hermida's avatarGabriel Silva Hermida <gash18@inf.ufpr.br>
parent fe0b2b25
......@@ -77,12 +77,6 @@
"principalId": "admin",
"permission": "ALLOW",
"property": "*"
},
{
"principalType": "ROLE",
"principalId": "secretario_dpto",
"permission": "ALLOW",
"property": "*"
}
],
"methods": {}
......
'use strict';
const _ = require('lodash');
const { fork } = require('child_process');
const loopback = require('loopback');
"use strict";
const _ = require("lodash");
const { fork } = require("child_process");
const loopback = require("loopback");
var async = require('async');
var async = require("async");
var path = require("path");
var app = require('../../server/server');
var app = require("../../server/server");
const {Ensalador, EnsaladorPart, Schedule, ScheduleCollection, Room, RoomColection, CurrentSchedule} = require(path.resolve(__dirname,'../../bin/ensalador/ensalador.js'));
var _turmas = []
function get_time(name,t) {
var i = (Date.now()-t) / 1000
console.log(name+": "+i);
const {
Ensalador,
EnsaladorPart,
Schedule,
ScheduleCollection,
Room,
RoomColection,
CurrentSchedule,
} = require(path.resolve(__dirname, "../../bin/ensalador/ensalador.js"));
var _turmas = [];
function get_time(name, t) {
var i = (Date.now() - t) / 1000;
console.log(name + ": " + i);
}
async function get_user(res) {
var user_id = res.req.accessToken.userId;
const Usuario = app.models.Usuario;
return await Usuario.findById(user_id);
var user_id = res.req.accessToken.userId;
const Usuario = app.models.Usuario;
return await Usuario.findById(user_id);
}
module.exports = function(Ensalamento) {
Ensalamento.ensalar = function(cb) {
module.exports = function (Ensalamento) {
Ensalamento.ensalar = function (_filtros, cb) {
var Horario = app.models.Horario;
// TODO: insert user id when create ensalamento instance
fork("/app/server/pre_ensalamento.js",[JSON.stringify({})]);
cb(null, "requisição submetida");
fork("/app/server/pre_ensalamento.js", [JSON.stringify({})]).send(_filtros);
cb(null, "requisição submetida");
};
/**
* upload planilha do sie
* @param {string} delimiter separador de campos do csv
* @param {string} semester semestre label
* @param {date} letiveInit inicio do periodo letivo
* @param {date} letiveEnd fim do periodo letivo
* @param {Function(Error, string)} callback
*/
/**
* upload planilha do sie
* @param {string} delimiter separador de campos do csv
* @param {string} semester semestre label
* @param {date} letiveInit inicio do periodo letivo
* @param {date} letiveEnd fim do periodo letivo
* @param {Function(Error, string)} callback
*/
Ensalamento.upload = async function(req, res) {
Ensalamento.upload = async function (req, res) {
var status = "ok";
const Container = app.models.container;
const FileUpload = app.models.FileUpload;
const Semestre = app.models.Semestre;
const container_name = `turma-${Math.round(Date.now())}-${Math.round(Math.random() * 1000)}`;
const container_name = `turma-${Math.round(Date.now())}-${Math.round(
Math.random() * 1000
)}`;
// create a container (directory) for upload file
var container = await Container.createContainer({name:container_name});
var container = await Container.createContainer({ name: container_name });
// upload file (copy file in request to container)
var arg1 = await Container.upload(req,res,{container:container.name});
var args = arg1.fields //arguments as semester, letiveinit ... etc
console.log(args)
var arg1 = await Container.upload(req, res, { container: container.name });
var args = arg1.fields; //arguments as semester, letiveinit ... etc
// create semester instance
var semestre = {"semestre":args.semester}
var semestre = { semestre: args.semester };
var s = await Semestre.create(semestre);
var file = await Container.getFiles(container.name,{});
var file = await Container.getFiles(container.name, {});
// create a instance of models FileUpload
var file_upload = await s.fileUploads.create({
'date': new Date(),
'container_name':container.name,
'letive_init': new Date(args.letiveInit),
'letive_end': new Date(args.letiveEnd),
"semestre": s.semestre,
'status':"Em andamento"
date: new Date(),
container_name: container.name,
letive_init: new Date(args.letiveInit),
letive_end: new Date(args.letiveEnd),
semestre: s.semestre,
status: "Em andamento",
});
//get user by token
var user = await get_user(res);
// fork process of populate data
var param = {
"fileUpload": file_upload.id,
"root": app.datasources.container.settings.root,
"container": container.name,
"letive_init": file_upload.letive_init,
"letive_end": file_upload.letive_end,
"delimiter": (args.delimiter) ?args.delimiter : ";",
"user": user.nome,
"semester": semestre.semestre,
"file": file[0].name
fileUpload: file_upload.id,
root: app.datasources.container.settings.root,
container: container.name,
letive_init: file_upload.letive_init,
letive_end: file_upload.letive_end,
delimiter: args.delimiter ? args.delimiter : ";",
user: user.nome,
semester: semestre.semestre,
file: file[0].name,
};
fork("/app/server/turma-import.js",[JSON.stringify(param)]);
fork("/app/server/turma-import.js", [JSON.stringify(param)]);
return file_upload;
};
};
};
......@@ -48,7 +48,14 @@
],
"methods": {
"ensalar": {
"accepts": [],
"accepts":
{
"arg": "_filtros",
"type": "object",
"required": true,
"description": "os filtros que serão aplicados para ensalar"
}
,
"returns": {
"type": "object",
"root": true
......
......@@ -38,6 +38,12 @@ module.exports = function(Sala) {
else
return callback(true, {"code": 3, "msg": "Não foi possível encontrar um departamento com o ID passado"})
})
// 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(err,result){
......
......@@ -65,7 +65,7 @@
"property": "*"
},
{
"principalType": "READ",
"principalType": "ROLE",
"principalId": "secretario_setor",
"permission": "ALLOW",
"property": "*"
......
......@@ -12,13 +12,9 @@ pre_ensalamento(function(err){
})
function getScheduleInstance(h, cb){
var Horario = app.models.Horario;
Horario.iterate(h.id,_turmas, (err,horarioCode,horarioSize,horarioCoord,horarioCurso,bloco) => {
//Horario.getCode(h.id,_turmas, (err,horarioCode) => {
Horario.iterate(h.id,_turmas, (err,horarioCode,horarioSize,horarioCoord,horarioCurso,bloco) =>
{
if(err) return cb(err,null);
//console.log("Codes: ",horarioCode,"\tId: ",h.id);
//Horario.getTotalSize(h.id,_turmas, (err,horarioSize) => {
//if(err) return cb(err,null);
// TODO: Type, klass_id, department and course must be corrected
var schedule = new Schedule({
code: horarioCode,
id: h.id,
......@@ -38,34 +34,137 @@ function getScheduleInstance(h, cb){
cb(null,schedule);
});
}
//relação de setor e blocos q ele contem com o horario -- so pega horarios que estejam em blocos do setor.
async function ajustaQueryHorarioSetores(filtro, query){
let query_setor_cod = [];
filtro.forEach(setor => {
query_setor_cod.push({setorCod: setor.codigo})
})
let blocos = await app.models.Bloco.find({where: {or: query_setor_cod}})
let bloco_filtrado_query = [];
blocos.forEach(bloco => bloco_filtrado_query.push({blocoCod: bloco.codigo}));
query.where.and.push({or: bloco_filtrado_query})// rever se n dá pra juntar isto com a iteração.
}
//relação do setor e dptos q ele contem com o dpto da turma -- esse aquyi ver o q oferta e pede
async function ajustaQueryTurmaSetores(filtro, query){
let query_setor_cod = []
// faz a query
filtro.forEach(setor => {
query_setor_cod.push({setorCod: setor.codigo})
})
let dptos = await app.models.Departamento.find({where: {or: query_setor_cod}})
dptos.forEach(departamento => tmp.push({departamentoCod: departamento.codigo}))
query.where.and.push(tmp)
}
//relação do semestre com a turma -- verifica se a turma est[a no semestre filtrado]
async function ajustaQueryTurmaSemestre(filtro, query){
let queryPeriodo = [];
filtro.forEach(semestre => {
queryPeriodo.push({semestre: semestre.semestre})
})
queryPeriodo.forEach(clause => {
query.where.or.push(clause)
})
}
//pega os codigos das disciplinas das turmas
function getTurmasDisciplinasCod(turmas) {
let dis = []
turmas.forEach(x => {
let a = 0;
for(let i = 0; i < dis.length; i++){
if(x.disciplinaCod === dis[i].codigo)
a = 1;
}
if (a === 0) dis.push({codigo: x.disciplinaCod});
})
return dis;
}
// relação entre turmas e salas -- verifica os recursos das salas.
async function ajustaTurmasSalas(turmas, filtro) {
let dis = getTurmasDisciplinasCod(turmas)
var disciplinas = await app.models.Disciplina.find({where: {or: dis}})
let disciplinas_filtradas = [];
disciplinas.forEach((disciplina, index) => {
filtro.forEach(filtro => {
if(disciplina.tipodesalaId === filtro.nome)
disciplinas_filtradas.push(disciplina)
})
})
let tmp = [];
turmas.forEach(turma => {
disciplinas_filtradas.forEach(disciplina => {
if(turma.disciplinaCod === disciplina.codigo){
tmp.push(turma);
}
})
})
return tmp
}
async function getAllSchedulesInstances(newEnsalamento,cb){
async function getAllSchedulesInstances(newEnsalamento, filtroSetores, filtroPeriodo, filtroSalas, cb){
var Horario = app.models.Horario;
// TODO: Filter by parameters specified by user
var queryHorario = {where:{and:[{"visible":true},{"livre":true}]}};
var queryTurma = {
include: ["horarios","cursos"]
};
var turmas = await app.models.Turma.find(queryTurma);
_turmas = turmas
var queryTurma = {where: {and: []}, include: ["horarios", "cursos"]}
// TODO: Filter by parameters specified by user
if(filtroSetores.length > 0){
await ajustaQueryHorarioSetores(filtroSetores, queryHorario);
await ajustaQueryTurmaSetores(filtroSetores, queryTurma);
}
if(filtroPeriodo.length > 0){
await ajustaQueryTurmaSemestre(filtroPeriodo, queryTurma);
}
var turmas = await app.models.Turma.find(queryTurma);
if(filtroSalas.length > 0){
_turmas = await ajustaTurmasSalas(turmas, filtroSalas)
}
else {
_turmas = turmas;
}
try{
Horario.find(queryHorario, function(err, horarios){
// Transform the horarios to objects
horarios = horarios.map(h => {return h.toJSON()});
// Transform all Horario instances in Schedule (Ensalador)
async.map(horarios, getScheduleInstance, (err, schedules) => {
cb(err, new ScheduleCollection(newEnsalamento.id,schedules));
});
// Transform the horarios to objects
let _horarios = horarios.map(h => {return h.toJSON()});
// Transform all Horario instances in Schedule (Ensalador)
async.map(_horarios, getScheduleInstance, (err, schedules) => {
cb(err, new ScheduleCollection(newEnsalamento.id,schedules));
});
});
}
catch(e){
console.log("HOUVE UM ERRO", e)
}
}
// ajusta a query pra chamada em Salas com o filtro do tipo das salas
function ajustaQuerySala(filtro, query) {
let tmp = [];
filtro.forEach(x => {
tmp.push({tipo: x.nome})
})
query.where.and.push({or: tmp})
}
//relação entre salas e setor, com os blocos pertencentes a ele -- garantir que as salas usadas estejam no setor.
async function ajustaQuerySalaSetor(filtro, query){
let tmp = [];
filtro.forEach(setor => tmp.push({setorCod: setor.codigo}));
let blocos = await app.models.Bloco.find({where: {or: tmp}})
let bloco_tmp = [];
blocos.forEach(bloco => bloco_tmp.push({blocoCod: bloco.codigo}))
query.where.and.push({or: bloco_tmp})
}
function getAllRoomsInstances(newEnsalamento,cb){
async function getAllRoomsInstances(newEnsalamento, filtroSalas, filtroSetor, userInfo, cb){
var Sala = app.models.Sala;
var querySala = {};
var querySala = {where: {and: []}};
if(filtroSalas.length > 0){
ajustaQuerySala(filtroSalas, querySala)
}
if(filtroSetor.length > 0){
await ajustaQuerySalaSetor(filtroSetor, querySala)
}
Sala.find(querySala, function(err, salas){
if(err) return cb(err,null);
var rooms = salas.map(s => {
......@@ -96,72 +195,101 @@ async function get_user(res) {
function pre_ensalamento(cb) {
var Horario = app.models.Horario;
// TODO: insert user id when create ensalamento instance
app.models.Ensalamento.create({}, function(err, newEnsalamento){
if(err) return cb(err,null);
getAllRoomsInstances(newEnsalamento,(err, rooms) => {
process.on('message', (data) => {
try{
// TODO: insert user id when create ensalamento instance
app.models.Ensalamento.create({}, function(err, newEnsalamento){
if(err) return cb(err,null);
getAllSchedulesInstances(newEnsalamento,(err,schedules) => {
if(err) return cb(err,null);
// Save the files into ensalador/ensalador_executions
// The id of new ensalamento is the identifier of
// yaml new files
rooms.save();
schedules.save();
var dataCurrent = schedules.toJSON().schedules.map(s =>{
return new Schedule(s)
});
var current = new CurrentSchedule(newEnsalamento.id, dataCurrent);
current.save();
// Heuristic used to execute
// Here you can specify the parameters of algorithm
var parts = [
new EnsaladorPart("Open", "open"),
new EnsaladorPart("Final", "exec",{day: [2,3,4,5,6,7]}),
new EnsaladorPart("Close", "close")
];
var e = new Ensalador(
parts,
rooms.getFilePath(),
schedules.getFilePath(),
current.getFilePath(),
);
e.execute((err,schedules) => {
getAllRoomsInstances(newEnsalamento, data.TipoSala, data.Setor, data.UserInfo, (err, rooms) => {
if(err) return cb(err,null);
async.each(schedules,
(s,cb_s) => {
var query = {where:{id: s.id}};
getAllSchedulesInstances(newEnsalamento, data.Setor, data.Periodo, data.TipoSala, (err,schedules) => {
if(err) return cb(err,null);
// Save the files into ensalador/ensalador_executions
// The id of new ensalamento is the identifier of
// yaml new files
rooms.save();
schedules.save();
var dataCurrent = schedules.toJSON().schedules.map(s =>{
return new Schedule(s)
});
var current = new CurrentSchedule(newEnsalamento.id, dataCurrent);
current.save();
// Heuristic used to execute
// Here you can specify the parameters of algorithm
var parts = [
new EnsaladorPart("Open", "open"),
new EnsaladorPart("Final", "exec",{day: [2,3,4,5,6,7]}),
new EnsaladorPart("Close", "close")
];
var e = new Ensalador(
parts,
rooms.getFilePath(),
schedules.getFilePath(),
current.getFilePath(),
);
e.execute((err,schedules) => {
if(err) return cb(err,null);
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
app.models.Sala.findById(s.assigned, (err,sala)=>{
if(err) return cb(err,null)
h.updateAttribute("salaCode", s.assigned, (err) => {
Horario.findOne(query, (err, h) => {
if(err) return cb(err,null);
if(!s.assigned)
console.log(s);
else
app.models.Sala.findById(s.assigned, (err,sala)=>{
if(err) return cb(err,null)
h.updateAttribute("blocoCod",sala.blocoCod, (err)=>{
cb_s(err);
})
});
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
cb(err,schedules);
}
);
});
})
});
});
},
(err) => {
// If everything is ok
cb(err,schedules);
}
);
});
})
});
});
}
catch(e){
console.log("um erro aconteceu", e)
}
})
}
//PEGAR INFO DO USUARIO DO FRONT PARA COMPOARAR O OWNERID
//Algo assim pode ser feito para a simulação com os usuários.
//query para só pegar as salas que estiverem sob o dominio de quem requisitou o ensalamento.
//pode-se fazer algumas validações ainda.
// async function ajustaQuerySalaOwner(filtro, userInfo, query){
// if(userInfo.vinculo === "departamento"){
// let dpto = await app.models.Departamento.find({where: {codigo: userInfo.valor_vinculo}})
// query.where.and.push({or: [{ownerId: dpto[0]._id}]})
// }
// else if (userInfo.vinculo === "setor"){
// let setor = await app.models.Setor.find({where: {codigo: userInfo.valor_vinculo}})
// query.where.and.push({or: [{ownerId: setor[0]._id}]})
// }
// // let query_pra_dpto = [];
// // filtro.forEach(setor => query_pra_dpto.push({setorCod: setor.codigo}));
// // let dptos = await app.models.Departamento.find({where: {or: query_pra_dpto}})
// // let tmp = [];
// // //pega os ids dos ptos pra comparar com o ownerId
// // dptos.forEach(departamento => {
// // tmp.push(departamento._id)
// // })
// }
\ No newline at end of file
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