const moment = require('moment'); const { convertArrayToCSV } = require('convert-array-to-csv'); const { Op } = require('sequelize'); const helperPath = '../../helper'; const helper = require(`${helperPath}/helper`); const validar = require(`${helperPath}/validar`); const dbPath = '../../db/tablas'; const Carrera = require(`${dbPath}/Carrera`); const Carrito = require(`${dbPath}/Carrito`); const Equipo = require(`${dbPath}/Equipo`); const Modulo = require(`${dbPath}/Modulo`); const Operador = require(`${dbPath}/Operador`); const Prestamo = require(`${dbPath}/Prestamo`); const Programa = require(`${dbPath}/Programa`); const TipoCarrito = require(`${dbPath}/TipoCarrito`); const TipoUsuario = require(`${dbPath}/TipoUsuario`); const Usuario = require(`${dbPath}/Usuario`); const reporte = async (body) => { const inicio = validar.validarFecha(body.inicio, 'fecha de inicio', false); const fin = validar.validarFecha(body.fin, 'fecha fin', false); const idCarrera = body.idCarrera ? validar.validarNumeroEntero(body.idCarrera, 'id carrera', true) : ''; const idTipoUsuario = body.idTipoUsuario ? validar.validarNumeroEntero(body.idTipoUsuario, 'id tipo usuario', true) : ''; const idTipoCarrito = body.idTipoCarrito ? validar.validarNumeroEntero(body.idTipoCarrito, 'id tipo carrito', true) : ''; const path = `server/uploads/reporte.csv`; const data = []; return Prestamo.findAll({ where: { [Op.and]: [ { createdAt: { [Op.gte]: inicio.format('YYYY-MM-DD') } }, { createdAt: { [Op.lte]: fin.format('YYYY-MM-DD') } }, ], }, include: [ { model: Equipo, include: [ { model: Carrito, include: [{ model: TipoCarrito }, { model: Modulo }], }, { model: Programa }, ], }, { model: Usuario, include: [{ model: Carrera }, { model: TipoUsuario }], }, { model: Operador, as: 'OperadorEntrega', }, { model: Operador, as: 'OperadorRegreso', }, ], }) .then(async (res) => { for (let i = 0; i < res.length; i++) { let agregar = false; if (idTipoCarrito) { if (idTipoCarrito === res[i].Equipo.Carrito.idTipoCarrito) { if (idTipoUsuario) { if (idTipoUsuario === res[i].Usuario.idTipoUsuario) { if (idCarrera) { if (idCarrera === res[i].Usuario.idCarrera) agregar = true; } else agregar = true; } } else if (idCarrera) { if (idCarrera === res[i].Usuario.idCarrera) agregar = true; } else agregar = true; } } else if (idTipoUsuario) { if (idTipoUsuario === res[i].Usuario.idTipoUsuario) { if (idCarrera) { if (idCarrera === res[i].Usuario.idCarrera) agregar = true; } else agregar = true; } } else if (idCarrera) { if (idCarrera === res[i].Usuario.idCarrera) agregar = true; } else agregar = true; if (agregar) data.push({ idPrestamo: res[i].idPrestamo, activo: res[i].activo, fecha: moment(res[i].createdAt).format('YYYY-MM-DD'), hora: moment(res[i].createdAt).format('HH:mm'), horaMaxRecoger: moment(res[i].horaMaxRecoger).format('HH:mm'), horaInicio: res[i].horaInicio ? moment(res[i].horaInicio).format('HH:mm') : '', horaFin: res[i].horaFin ? moment(res[i].horaFin).format('HH:mm') : '', fechaEntrega: res[i].horaEntrega ? moment(res[i].horaEntrega).format('YYYY-MM-DD') : '', horaEntrega: res[i].horaEntrega ? moment(res[i].horaEntrega).format('HH:mm') : '', modulo: res[i].Equipo.Carrito.Modulo.modulo, carrito: res[i].Equipo.Carrito.carrito, equipo: res[i].Equipo.equipo, tipoCarrito: res[i].Equipo.Carrito.TipoCarrito.tipoCarrito, programa: res[i].Equipo.Programa ? res[i].Equipo.Programa.programa : '', numeroInventario: res[i].Equipo.numeroInventario, numeroSerie: res[i].Equipo.numeroSerie, tipoUsuario: res[i].Usuario.TipoUsuario.tipoUsuario, usuario: res[i].Usuario.usuario, nombre: res[i].Usuario.nombre, carrera: res[i].Usuario.Carrera ? res[i].Usuario.Carrera.carrera : '', operadorEntrega: res[i].OperadorEntrega ? res[i].OperadorEntrega.operador : '', operadorRegreso: res[i].OperadorRegreso ? res[i].OperadorRegreso.operador : '', canceladoUsuario: res[i].canceladoUsuario ? 'si' : 'no', canceladoOperador: res[i].canceladoOperador ? 'si' : 'no', }); } await helper.eliminarArchivo(path).catch((err) => {}); return helper.crearArchivo(path, convertArrayToCSV(data)); }) .then(() => path); }; module.exports = reporte;