Commit f6900616 authored by ns17's avatar ns17 Committed by vgm18
Browse files

create arquive model

parent 376096b6
Subproject commit ab01c16d143be58383730beed9b9c3253f71179c
Subproject commit f99702150228ab533c4cb1e982faf96b708aae01
......@@ -352,7 +352,7 @@
{
"nome": "PRAE - Monitoria",
"codigo": "PRAE - Monitoria",
"setorCod": "PRAE/UFPR"
"setorCod": "PRAE-UFPR"
},
{
"nome": "departamento de biologia celular",
......
'use strict';
const yaml = require('js-yaml');
const fs = require('fs');
var app = require('../../server/server');
module.exports = function(Arquivo) {
/**
* metodo para abrir o arquivo
* @param {string} nome
* @param {Function(Error, object)} callback
*/
Arquivo.open = async function(nome, callback) {
var arquivo_aberto;
var arquivo;
console.log("nome",nome)
if (nome == "rooms"){
arquivo = await app.models.Arquivo.findById("1")}
else if (nome == "schedules"){
arquivo = await app.models.Arquivo.findById("2")}
try {
var fileContents = await fs.readFileSync(arquivo.caminho, 'utf8');
var arquivo_aberto = await yaml.load(fileContents);
return (arquivo_aberto);
} catch (e) {
console.log(e);
}
};
};
\ No newline at end of file
{
"name": "Arquivo",
"plural": "Arquivos",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"nome": {
"type": "string",
"required": true
},
"caminho": {
"type": "string",
"required": true
},
"data_modificacao": {
"type": "date"
},
"dados": {
"type": "object"
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {
"open": {
"accepts": [
{
"arg": "nome",
"type": "string",
"required": true,
"description": ""
}
],
"returns": [
{
"arg": "arquivo_aberto",
"type": "object",
"root": true,
"description": ""
}
],
"description": "metodo para abrir o arquivo",
"http": [
{
"path": "/open",
"verb": "post"
}
]
}
}
}
......@@ -20,7 +20,7 @@ along with ensalamento-back If not, see <https://www.gnu.org/licenses/>.
"use strict";
const _ = require("lodash");
const { fork } = require("child_process");
const { fork, exec } = require("child_process");
const loopback = require("loopback");
var async = require("async");
......@@ -55,8 +55,35 @@ module.exports = function (Ensalamento) {
var Horario = app.models.Horario;
// TODO: insert user id when create ensalamento instance
fork("/app/server/pre_ensalamento.js", [JSON.stringify({})]).send(_filtros);
cb(null, "requisição submetida");
};
Ensalamento.suggest = function (cb) {
//var Horario = app.models.Horario;
//// TODO: insert user id when create ensalamento instance
fork("/app/server/mid_ensalamento.js");
cb(null, "sugestões aceitas");
};
Ensalamento.execute = function (cb) {
//var Horario = app.models.Horario;
//// TODO: insert user id when create ensalamento instance
//fork("/app/server/execute_ensalamento.js", [JSON.stringify({})]).send("");
fork("/app/server/execute_ensalamento.js");
cb(null, "execução sendo feita");
};
Ensalamento.executepoli = function (cb) {
//var Horario = app.models.Horario;
//// TODO: insert user id when create ensalamento instance
//fork("/app/server/execute_ensalamento.js", [JSON.stringify({})]).send("");
fork("/app/server/execute_poli_ensalamento.js");
cb(null, "execução sendo feita para o politécnico");
};
/**
* upload planilha do sie
* @param {string} delimiter separador de campos do csv
......
......@@ -66,6 +66,39 @@
"path": "/ensalar"
}
},
"suggest": {
"returns": {
"type": "object",
"root": true
},
"description": "aceita sugestões",
"http": {
"verb": "post",
"path": "/suggest"
}
},
"execute": {
"returns": {
"type": "object",
"root": true
},
"description": "executa",
"http": {
"verb": "post",
"path": "/execute"
}
},
"executepoli": {
"returns": {
"type": "object",
"root": true
},
"description": "executa para o politecnico",
"http": {
"verb": "post",
"path": "/executepoli"
}
},
"upload": {
"accepts": [
{
......
const path = require('path');
const app = require(path.resolve(__dirname, '../server/server'));
var async = require('async');
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);
}
mid_ensalamento(function(err){
process.exit(err ? 1 : 0);
})
// function getScheduleInstance(h, cb){
// var Horario = app.models.Horario;
// Horario.iterate(h.id, _turmas, (err, horarioCode, horarioSize, horarioCoord, horarioCurso, bloco) =>
// {
// if(err) return cb(err,null);
// var schedule = new Schedule({
// code: horarioCode,
// id: h.id,
// day: h.dia,
// ini: parseInt(h.horario_inicial),
// end: parseInt(h.horario_final),
// size: horarioSize,
// type: 0,
// log: horarioCoord.lng,
// block: bloco,
// lat: horarioCoord.lat,
// course: horarioCurso,
// department: "",
// klass_id: 1,
// assigned: h.salaCode
// });
// 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.or.push({bloco_filtrado_query})// rever se n dá pra juntar isto com a iteração.
// blocos.forEach(bloco => query.where.and[1].or.push({blocoCod: bloco.codigo}));
// //{where:{and: [{and:[{"visible":true},{"livre":true}]}, {or: []}]}}
// }
//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 =>
// query.where.and[0].or.push({departamentoCod: departamento.codigo})
// //query.where.and.push({departamentoCod: departamento.codigo})
// )
// }
//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.and.push(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, filtroSetores, filtroPeriodo, filtroSalas, cb){
// var Horario = app.models.Horario;
// var queryHorario = {where:{and: [{and:[{"visible":true},{"livre":true}]}, {or: []}]}, include: ["bloco"]};
// //var queryHorario = {where:{and:[{"visible":true},{"livre":true}]}};
// var queryTurma = {where: {and: [{or: []}]}, include: ["horarios", "cursos"]}
// //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
// 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})
// }
// async function getAllRoomsInstances(newEnsalamento, filtroSalas, filtroSetor, userInfo, cb){
// var Sala = app.models.Sala;
// 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 => {
// s = s.toJSON();
//
// // TODO: type must be an integer, but the model Sala contains a string
// return new Room({
// code: s.codigo,
// id: s._id,
// type: 1,
// size: s.capacidade,
// block: s.blocoCod,
// lat: s.localizacao.lat,
// log: s.localizacao.lng
// });
// });
//
// cb(err, new RoomColection(newEnsalamento.id,rooms));
// });
// }
function mid_ensalamento(cb) {
var Horario = app.models.Horario;
process.on('message', (data) => {
try{
console.log('entrou no mid ensalamento');
// Heuristic used to execute
// Here you can specify the parameters of algorithm
var parts = [
new EnsaladorPart("Open", "open"),
new EnsaladorPart("Final", "accept"), // exec -- geral // terceiro -> ver script
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) => {
if(err) return cb(err,null)
h.updateAttribute("blocoCod",sala.blocoCod, (err)=>{
cb_s(err);
})
});
})
});
},
(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
module.exports = function(app) {
const Arquivo = app.models.Arquivo;
Arquivo.create({"nome": "rooms", "caminho": "/app/bin/ensalador/ensalador_executions/rooms.yaml", "dados": "teste"});
Arquivo.create({"nome": "schedules", "caminho": "/app/bin/ensalador/ensalador_executions/schedules.yaml", "dados": "teste"});
Arquivo.create({"nome": "current", "caminho": "/app/bin/ensalador/ensalador_executions/current.yaml", "dados": "teste"});
};
\ No newline at end of file
const path = require('path');
const app = require(path.resolve(__dirname, '../server/server'));
var async = require('async');
const {Ensalador, EnsaladorPart, RoomColection, ScheduleCollection, CurrentSchedule} = require(path.resolve(__dirname,'../bin/ensalador/ensalador.js'));
execute_ensalamento(function(err){
process.exit(err ? 1 : 0);
})
function execute_ensalamento(cb) {
var Horario = app.models.Horario;
try{
// Heuristic used to execute
// Here you can specify the parameters of algorithm
var parts = [
new EnsaladorPart("Open", "open"),
new EnsaladorPart("Final", "exec"), // exec -- geral // terceiro -> ver script
new EnsaladorPart("Close", "close")
];
// create variables to get the path for the files
var rooms = new RoomColection(1, []);
var schedules = new ScheduleCollection(1, []);
var current = new CurrentSchedule(1, []);
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) => {
// if(err) return cb(err,null)
// h.updateAttribute("blocoCod",sala.blocoCod, (err)=>{
// cb_s(err);
// })
// });
})
});
},
(err) => {
// If everything is ok
cb(err,schedules);
}
);
});
}
catch(e){
console.log("um erro aconteceu", e)
}
}
\ No newline at end of file
const path = require('path');
const app = require(path.resolve(__dirname, '../server/server'));
var async = require('async');
const {Ensalador, EnsaladorPart, RoomColection, ScheduleCollection, CurrentSchedule} = require(path.resolve(__dirname,'../bin/ensalador/ensalador.js'));
execute_poli_ensalamento(function(err){
process.exit(err ? 1 : 0);
})
function execute_poli_ensalamento(cb) {
var Horario = app.models.Horario;
try{
// Heuristic used to execute
// Here you can specify the parameters of algorithm
var parts = [
new EnsaladorPart("Open", "open"),
new EnsaladorPart("Final", "exec", "{ block: [pa,pc], course: [08B,11A,11B,16A,17A,19A,21A,26A,29A,96A,40001016041P1] }"),
new EnsaladorPart("Final", "exec", "{ block: [ct], course: [10F,15C,18F]}"),
new EnsaladorPart("Final", "exec", "{ block: [eq], course: [06A]}"),
new EnsaladorPart("Final", "exec", "{ block: [pd], course: [01A,01B]}"),
new EnsaladorPart("Final", "exec", "{ block: [pg], course: [05A,103A] }"),
new EnsaladorPart("Final", "exec", "{ block: [pk,pl], course: [03A,102A] }"),
new EnsaladorPart("Final", "exec", "{ block: [pq], course: [12E] }"),
new EnsaladorPart("Final", "exec", "{ block: [pf], course: [02B] }"),
new EnsaladorPart("Final", "exec", "{ block: [ph], course: [15C,09B] }"),
new EnsaladorPart("Final", "exec", "{ block: [pm], course: [20A,2020,23A] }"),
new EnsaladorPart("Final", "exec", "{ block: [ct,eq,pa,pc,pd,pf,pg,ph,pk,pl,pm,pq,pr], course: [04B,05A,06A,08B,09B,103A,104A,105A,10F,11A,11B,12E,13A,15C,16A,17A,18F,19A,2020,20A,21A,22B,23A,26A,29A,31C,32D,33A,35B,40001016041P1,40C,41A,45C,46A,60A,61A,64A,65A,67A,76B,95A,96A,ppgengprod,ppgq] }"),
new EnsaladorPart("Final", "exec", "{ block