const csv = require('csvtojson'); const helperPath = '../../helper'; const { validarObjetoVacio } = require(`${helperPath}/validar`); const { eliminarArchivo } = require(`${helperPath}/helper`); const dbPath = '../../db/tablas'; const Carrera = require(`${dbPath}/Carrera`); const TipoUsuario = require(`${dbPath}/TipoUsuario`); const Usuario = require(`${dbPath}/Usuario`); const cargaMasiva = async (file) => { const path = `server/uploads/${file}`; const alumnosNuevos = []; const alumnosUpdate = []; const errores = []; const avisos = []; await csv() .fromFile(path) .then(async (alumnos) => { for (let i = 0; i < alumnos.length; i++) { if (alumnos[i].cuenta.length === 8) alumnos[i].cuenta = '0' + alumnos[i].cuenta; await Usuario.findOne({ where: { usuario: alumnos[i].cuenta }, include: [{ model: Carrera }], }).then(async (res) => { let usuario = res; if (!usuario) { await Carrera.findOne({ where: { carrera: alumnos[i].nomplan }, }) .then((res) => { if (!res) { avisos.push( `Se añadio el posgrado ${alumnos[i].nomplan} al catalogo.` ); return Carrera.create({ carrera: alumnos[i].nomplan }); } return res; }) .then((res) => Usuario.create({ usuario: alumnos[i].cuenta, nombre: `${alumnos[i].apellidop} ${alumnos[i].apellidom} ${alumnos[i].nombrew}`, idCarrera: res.idCarrera, idTipoUsuario: 5, }) ) .then((res) => Usuario.findOne({ where: { idUsuario: res.idUsuario }, include: [{ model: Carrera }, { model: TipoUsuario }], }) ) .then((res) => { alumnosNuevos.push({ idUsuario: res.idUsuario, usuario: res.usuario, nombre: res.nombre, Carrera: { idCarrera: res.Carrera.idCarrera, carrera: res.Carrera.carrera, }, TipoUsuario: { idTipoUsuario: res.TipoUsuario.idTipoUsuario, tipoUsuario: res.TipoUsuario.tipoUsuario, }, }); }); } else { let update = {}; if (!usuario.activo) { update.activo = true; alumnosUpdate.push(`El alumno ${usuario.usuario} fue activado.`); } if (usuario.Carrera.carrera != alumnos[i].nomplan) { await Carrera.findOne({ where: { carrera: alumnos[i].nomplan }, }) .then((res) => { if (!res) { avisos.push( `Se añadio el posgrado ${alumnos[i].nomplan} al catalogo.` ); return Carrera.create({ carrera: alumnos[i].nomplan }); } return res; }) .then((res) => { update.idCarrera = res.idCarrera; alumnosUpdate.push( `Se cambio la carrera del alumno ${usuario.usuario} de ${usuario.Carrera.carrera} por ${res.carrera}.` ); }); } if (usuario.idTipoUsuario === 3) avisos.push( `El alumno con id ${usuario.idUsuario} y numero de cuenta ${usuario.usuario} tambien es profesor.` ); if (usuario.idTipoUsuario === 4) { update.idTipoUsuario = 5; alumnosUpdate.push( `Se cambio el tipo de usuario alumno con id ${usuario.idUsuario} y numero de cuenta ${usuario.usuario}.` ); } if (!validarObjetoVacio(update)) await Usuario.update(update, { where: { idUsuario: usuario.idUsuario }, }); } }); } await eliminarArchivo(path); }); return { message: 'Se subio correctamente el archivo csv.', alumnosNuevos, alumnosUpdate, errores, avisos, }; }; module.exports = cargaMasiva;