require('../config/config'); const { Op } = require('sequelize'); const moment = require('moment'); const colors = require('colors'); const Carrera = require('./tablas/Carrera'); const CarreraHorario = require('./tablas/CarreraHorario'); const Grupo = require('./tablas/Grupo'); const GrupoHorario = require('./tablas/GrupoHorario'); const Horario = require('./tablas/Horario'); const PrimerSemestre = require('./tablas/PrimerSemestre'); const TercerSemestre = require('./tablas/TercerSemestre'); const drop = async () => { console.log('\nPaso 1) Desinstalando la db.'.bold.blue); await TercerSemestre.drop(); console.log('La tabla TercerSemestre se desinstalo correctamente.'.magenta); await PrimerSemestre.drop(); console.log('La tabla PrimerSemestre se desinstalo correctamente.'.magenta); await GrupoHorario.drop(); console.log('La tabla GrupoHorario se desinstalo correctamente.'.magenta); await CarreraHorario.drop(); console.log('La tabla CarreraHorario se desinstalo correctamente.'.magenta); await Grupo.drop(); console.log('La tabla Grupo se desinstalo correctamente.'.magenta); await Horario.drop(); console.log('La tabla Horario se desinstalo correctamente.'.magenta); await Carrera.drop(); console.log('La tabla Carrera se desinstalo correctamente.'.magenta); }; const sync = async () => { console.log('\nPaso 2) Instalando la db.'.bold.blue); await Carrera.sync(); console.log('La tabla Carrera se instalo correctamente.'.magenta); await Horario.sync(); console.log('La tabla Horario se instalo correctamente.'.magenta); await Grupo.sync(); console.log('La tabla Grupo se instalo correctamente.'.magenta); await CarreraHorario.sync(); console.log('La tabla CarreraHorario se instalo correctamente.'.magenta); await GrupoHorario.sync(); console.log('La tabla GrupoHorario se instalo correctamente.'.magenta); await PrimerSemestre.sync(); console.log('La tabla PrimerSemestre se instalo correctamente.'.magenta); await TercerSemestre.sync(); console.log('La tabla TercerSemestre se instalo correctamente.'.magenta); }; const data = [ { carrera: 'ACTUARÍA', matutino: 4, despertino: 3, horarioAsignado: { dia: '2021/08/12', horaInicio: '08:00' }, horariosAsignados: [{ dia: '2021/08/06', horaInicio: '08:00', turnos: 7 }], }, { carrera: 'ARQUITECTURA', matutino: 4, despertino: 3, horarioAsignado: { dia: '2021/08/10', horaInicio: '10:40' }, horariosAsignados: [{ dia: '2021/08/03', horaInicio: '10:40', turnos: 7 }], }, { carrera: 'CIENCIAS POLÍTICAS Y ADMON. PÚBLICA', matutino: 3, despertino: 2, horarioAsignado: { dia: '2021/08/12', horaInicio: '13:00' }, horariosAsignados: [{ dia: '2021/08/06', horaInicio: '13:00', turnos: 5 }], }, { carrera: 'COMUNICACIÓN', matutino: 4, despertino: 4, horarioAsignado: { dia: '2021/08/11', horaInicio: '08:00' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '08:00', turnos: 8 }], }, { carrera: 'DERECHO', matutino: 9, despertino: 9, horarioAsignado: { dia: '2021/08/09', horaInicio: '08:00' }, horariosAsignados: [{ dia: '2021/08/02', horaInicio: '08:00', turnos: 18 }], }, { carrera: 'DISEÑO GRÁFICO', matutino: 4, despertino: 4, horarioAsignado: { dia: '2021/08/10', horaInicio: '08:00' }, horariosAsignados: [{ dia: '2021/08/03', horaInicio: '08:00', turnos: 8 }], }, { carrera: 'ECONOMÍA', matutino: 3, despertino: 2, horarioAsignado: { dia: '2021/08/13', horaInicio: '08:00' }, horariosAsignados: [ { dia: '2021/08/04', horaInicio: '15:20', turnos: 1 }, { dia: '2021/08/05', horaInicio: '08:00', turnos: 4 }, ], }, { carrera: 'ENSEÑANZA DE INGLÉS', matutino: 1, despertino: 1, horarioAsignado: { dia: '2021/08/11', horaInicio: '15:00' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '15:00', turnos: 1 }], }, { carrera: 'FILOSOFÍA', matutino: 1, despertino: 1, horarioAsignado: { dia: '2021/08/11', horaInicio: '12:40' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '12:40', turnos: 2 }], }, { carrera: 'HISTORIA', matutino: 2, despertino: 1, horarioAsignado: { dia: '2021/08/11', horaInicio: '14:00' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '14:00', turnos: 3 }], }, { carrera: 'INGENIERÍA CIVIL', matutino: 3, despertino: 2, horarioAsignado: { dia: '2021/08/09', horaInicio: '14:00' }, horariosAsignados: [{ dia: '2021/08/02', horaInicio: '14:00', turnos: 5 }], }, { carrera: 'LENGUA Y LITERATURA HISPÁNICAS', matutino: 1, despertino: 1, horarioAsignado: { dia: '2021/08/11', horaInicio: '13:20' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '13:20', turnos: 2 }], }, { carrera: 'MATEMÁTICAS. APL. Y COMP. (1999)', matutino: 4, despertino: 4, horarioAsignado: { dia: '2021/08/12', horaInicio: '10:20' }, horariosAsignados: [{ dia: '2021/08/06', horaInicio: '10:20', turnos: 8 }], }, { carrera: 'PEDAGOGÍA', matutino: 4, despertino: 2, horarioAsignado: { dia: '2021/08/11', horaInicio: '10:40' }, horariosAsignados: [{ dia: '2021/08/04', horaInicio: '10:40', turnos: 6 }], }, { carrera: 'RELACIONES INTERNACIONALES', matutino: 3, despertino: 3, horarioAsignado: { dia: '2021/08/10', horaInicio: '13:00' }, horariosAsignados: [{ dia: '2021/08/03', horaInicio: '13:00', turnos: 6 }], }, { carrera: 'SOCIOLOGÍA', matutino: 2, despertino: 2, horarioAsignado: { dia: '2021/08/13', horaInicio: '09:40' }, horariosAsignados: [ { dia: '2021/08/03', horaInicio: '15:00', turnos: 2 }, { dia: '2021/08/06', horaInicio: '14:40', turnos: 2 }, ], }, // { // carrera: 'DERECHO (SUA)', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, // { // carrera: 'ENSEÑANZA DE ESPAÑOL(LENG EXTRANJERA)SUA', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, // { // carrera: 'ENSEÑANZA DE FRANCES(LENG EXTRANJERA)SUA', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, // { // carrera: 'ENSEÑANZA DE INGLES (LENG EXTRANJERA)SUA', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, // { // carrera: 'ENSEÑANZA DE ITALIANO(LENG EXTRANJ.)SUA', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, // { // carrera: 'RELACIONES INTERNACIONALES (SUA)', // matutino: 0, // despertino: 0, // horarioAsignado:{dia:'',horaInicio:''} // }, ]; const dataCarrera = async () => { console.log('\nPaso 3) Instalando catalogo Carrera.'.bold.blue); for (let i = 0; i < data.length; i++) { await Carrera.create({ carrera: data[i].carrera }); console.log( `Se agrego la carrera ${data[i].carrera} correctamente.`.magenta ); } }; const dataGrupo = async () => { console.log('\nPaso 4) Instalando catalogo Grupo.'.bold.blue); for (let i = 0; i < data.length; i++) { for (let j = 1; j <= data[i].matutino; j++) { const grupo = `110${j}`; await Grupo.create({ grupo, idCarrera: i + 1 }); console.log( `Se agrego el grupo ${grupo} a la carrera ${data[i].carrera} correctamente.` .magenta ); } console.log(); for (let j = 1; j <= data[i].despertino; j++) { const grupo = `115${j}`; await Grupo.create({ grupo, idCarrera: i + 1 }); console.log( `Se agrego el grupo ${grupo} a la carrera ${data[i].carrera} correctamente.` .magenta ); } console.log(); for (let j = 1; j <= data[i].matutino; j++) { const grupo = `220${j}`; await Grupo.create({ grupo, idCarrera: i + 1 }); console.log( `Se agrego el grupo ${grupo} a la carrera ${data[i].carrera} correctamente.` .magenta ); } console.log(); for (let j = 1; j <= data[i].despertino; j++) { const grupo = `225${j}`; await Grupo.create({ grupo, idCarrera: i + 1 }); console.log( `Se agrego el grupo ${grupo} a la carrera ${data[i].carrera} correctamente.` .magenta ); } console.log('\n'); } }; const dataHorario = async () => { const diaFin = 13; const diaInicio = 2; console.log('\nPaso 5) Instalando catalogo Horario.'.bold.blue); for (let i = diaInicio; i <= diaFin; i++) { const dia = `2021/08/${i < 10 ? '0' + i : i}`; const horaFin = 15; const minutoFin = 20; let horaInicio = 8; let minutoInicio = 0; let parar = false; if (i === 7 || i === 8) continue; while (!parar) { const hora = `${horaInicio < 10 ? '0' + horaInicio : horaInicio}:${ minutoInicio < 10 ? '0' + minutoInicio : minutoInicio }`; await Horario.create({ horario: `${dia} ${hora}` }); console.log(`Se agrego el horario ${dia} ${hora} correctamente.`.magenta); if (horaInicio === horaFin && minutoInicio === minutoFin) parar = true; else { minutoInicio += 20; if (minutoInicio == 60) { horaInicio++; minutoInicio = 0; } } } } }; const dataGrupoHorario = async () => { console.log('\nPaso 6) Instalando catalogo GrupoHorario.'.bold.blue); for (let i = 0; i < data.length; i++) { const gruposCarrera = await Grupo.findAll({ where: { grupo: { [Op.like]: '22%' }, idCarrera: i + 1 }, }); let idHorario = await Horario.findOne({ where: { horario: new Date( `${data[i].horarioAsignado.dia} ${data[i].horarioAsignado.horaInicio}` ), }, }).then((res) => res.idHorario); for (let j = 0; j < gruposCarrera.length; j++) { await GrupoHorario.create({ idHorario, idGrupo: gruposCarrera[j].idGrupo, }) .then((res) => GrupoHorario.findOne({ where: { idGrupoHorario: res.idGrupoHorario }, include: [ { model: Grupo, include: [{ model: Carrera }] }, { model: Horario }, ], }) ) .then((res) => { console.log( `Se le asigno al grupo ${res.Grupo.grupo} de la carrera ${ res.Grupo.Carrera.carrera } el horario ${moment(res.Horario.horario).format()}`.magenta ); idHorario++; }); } console.log(); } }; const dataCarreraHorario = async () => { console.log('\nPaso 7) Instalando catalogo CarreraHorario.'.bold.blue); for (let i = 0; i < data.length; i++) { for (let j = 0; j < data[i].horariosAsignados.length; j++) { let idHorario = await Horario.findOne({ where: { horario: new Date( `${data[i].horariosAsignados[j].dia} ${data[i].horariosAsignados[j].horaInicio}` ), }, }).then((res) => res.idHorario); for (let k = 0; k < data[i].horariosAsignados[j].turnos; k++) { await CarreraHorario.create({ idHorario, idCarrera: i + 1, }) .then((res) => CarreraHorario.findOne({ where: { idCarreraHorario: res.idCarreraHorario }, include: [{ model: Carrera }, { model: Horario }], }) ) .then((res) => { console.log( `Se le asigno a la carrera ${ res.Carrera.carrera } el horario ${moment(res.Horario.horario).format()}`.magenta ); idHorario++; }); } } console.log(); } }; const exe = async () => { await drop(); await sync(); await dataCarrera(); await dataGrupo(); await dataHorario(); await dataGrupoHorario(); await dataCarreraHorario(); console.log( '\nSe ha instalado exitosamente la base de datos.\n'.underline.bold.green ); process.exit(); }; exe();