const csv = require('csvtojson'); const { Op } = require('sequelize'); const { eliminarArchivo } = require('../../helper/helper'); const dbPath = '../../db/tablas'; const Equipo = require(`${dbPath}/Equipo`); const Carrito = require(`${dbPath}/Carrito`); const TipoCarrito = require(`${dbPath}/TipoCarrito`); const Programa = require(`${dbPath}/Programa`); const Modulo = require(`${dbPath}/Modulo`); const cargaMasiva = async (file) => { const path = `server/uploads/${file}`; const equiposNuevos = []; const errores = []; const avisos = []; await csv() .fromFile(path) .then(async (equipos) => { for (let i = 0; i < equipos.length; i++) { const existeModulo = await Modulo.findOne({ where: { idModulo: equipos[i].modulo }, }); const existeTipoCarrito = await TipoCarrito.findOne({ where: { tipoCarrito: equipos[i].tipo }, }); const existePrograma = equipos[i].programa ? await Programa.findOne({ where: { programa: equipos[i].programa } }) : {}; let existeCarrito = await Carrito.findOne({ where: { sobrenombre: equipos[i].carritoSobrenombre, idModulo: existeModulo.idModulo, }, }); let existeEquipo = await Equipo.findOne({ where: { [Op.or]: [ { numeroSerie: equipos[i].numeroSerie }, { numeroInventario: equipos[i].numeroInventario }, ], }, }); if ( existeEquipo || !existeModulo || !existeTipoCarrito || (equipos[i].programa && !existePrograma) ) { let error = ''; if (existeEquipo) error += `El equipo con numero de serie ${existeEquipo.numeroSerie} ya existe. `; else if (!existeModulo) error += `El modulo ${equipos[i].modulo} no existe. `; else if (!existeTipoCarrito) error += `El tipo de equipo ${equipos[i].tipo} no existe. `; else error += `El programa ${equipos[i].programa} no existe. `; error += `Se salto esta linea.\n`; errores.push(error); continue; } if (!existeCarrito) { existeCarrito = await Carrito.create({ sobrenombre: equipos[i].carritoSobrenombre, idTipoCarrito: existeTipoCarrito.idTipoCarrito, idModulo: existeModulo.idModulo, }); avisos.push( `Se creo el carrito ${existeCarrito.sobrenombre} que pretenece al modulo ${existeModulo.idModulo}` ); } existeEquipo = await Equipo.findAll({ where: { idCarrito: existeCarrito.idCarrito }, }) .then((res) => Equipo.create({ numeroSerie: equipos[i].numeroSerie, numeroInventario: equipos[i].numeroInventario, sobrenombre: `${existeTipoCarrito.letra}${ res.length < 9 ? '0' + (res.length + 1) : res.length + 1 }`, idCarrito: existeCarrito.idCarrito, idPrograma: existePrograma.idPrograma ? existePrograma.idPrograma : null, }) ) .then((res) => Equipo.findOne({ where: { idEquipo: res.idEquipo }, include: [ { model: Programa }, { model: Carrito, include: [{ model: TipoCarrito }, { model: Modulo }], }, ], }) ); delete existeEquipo.dataValues.idStatus; delete existeEquipo.dataValues.idCarrito; delete existeEquipo.dataValues.idPrograma; delete existeEquipo.dataValues.Carrito.dataValues.idModulo; delete existeEquipo.dataValues.Carrito.dataValues.idTipoCarrito; equiposNuevos.push(existeEquipo); } await eliminarArchivo(path); }); return { message: 'Se subio correctamente el archivo csv.', equiposNuevos, errores, avisos, }; }; module.exports = cargaMasiva;