const { Op } = require('sequelize'); const validar = require('../../helper/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 TipoCarrito = require(`${dbPath}/TipoCarrito`); const TipoUsuario = require(`${dbPath}/TipoUsuario`); const Usuario = require(`${dbPath}/Usuario`); const historial = async (body) => { const pagina = validar.validarNumero(body.pagina, true); const usuario = body.usuario ? validar.validarNumeroCuenta(body.usuario) : ''; const idPrestamo = body.idPrestamo ? validar.validarId(body.idPrestamo) : ''; const numeroInventario = body.numeroInventario ? validar.validarAlfanumerico( body.numeroInventario, 'El numero de inventario', 20 ) : ''; const idModulo = body.idModulo ? validar.validarId(body.idModulo) : null; const idTipoCarrito = body.idTipoCarrito ? validar.validarId(body.idTipoCarrito) : null; let whereCarrito = []; if (idTipoCarrito) whereCarrito.push({ idTipoCarrito }); if (idModulo) whereCarrito.push({ idModulo }); return Prestamo.findAndCountAll({ where: { idPrestamo: { [Op.like]: `%${idPrestamo}%` }, [Op.or]: [ { activo: true }, { [Op.and]: [{ activo: false }, { horaEntrega: { [Op.not]: null } }] }, ], }, include: [ { model: Equipo, where: { numeroInventario: { [Op.like]: `%${numeroInventario}%` } }, include: [ { model: Carrito, where: { [Op.and]: whereCarrito }, include: [{ model: TipoCarrito }, { model: Modulo }], }, ], }, { model: Usuario, where: { usuario: { [Op.like]: `%${usuario}%` } }, include: [{ model: TipoUsuario }, { model: Carrera }], }, { model: Operador, as: 'OperadorRegreso' }, { model: Operador, as: 'OperadorEntrega' }, ], limit: 25, offset: 25 * (pagina - 1), order: [['createdAt', 'DESC']], }).then((res) => { for (let i = 0; i < res.rows.length; i++) { delete res.rows[i].dataValues.idUsuario; delete res.rows[i].dataValues.idOperadorEntrega; delete res.rows[i].dataValues.idOperadorRegreso; delete res.rows[i].dataValues.idEquipo; delete res.rows[i].dataValues.idOperadorCancelacion; delete res.rows[i].dataValues.Equipo.dataValues.idPrograma; delete res.rows[i].dataValues.Equipo.dataValues.idStatus; delete res.rows[i].dataValues.Equipo.dataValues.idCarrito; delete res.rows[i].dataValues.Equipo.dataValues.updatedAt; delete res.rows[i].dataValues.Equipo.dataValues.Carrito.dataValues .idTipoCarrito; delete res.rows[i].dataValues.Equipo.dataValues.Carrito.dataValues .idModulo; delete res.rows[i].dataValues.Equipo.dataValues.Carrito.dataValues.activo; delete res.rows[i].dataValues.Usuario.dataValues.idTipoUsuario; delete res.rows[i].dataValues.Usuario.dataValues.idCarrera; delete res.rows[i].dataValues.Usuario.dataValues.password; delete res.rows[i].dataValues.Usuario.dataValues.activo; delete res.rows[i].dataValues.Usuario.dataValues.multa; if (res.rows[i].OperadorEntrega) { delete res.rows[i].dataValues.OperadorEntrega.dataValues.password; delete res.rows[i].dataValues.OperadorEntrega.dataValues.activo; delete res.rows[i].dataValues.OperadorEntrega.dataValues.idTipoUsuario; } if (res.rows[i].OperadorRegreso) { delete res.rows[i].dataValues.OperadorRegreso.dataValues.password; delete res.rows[i].dataValues.OperadorRegreso.dataValues.activo; delete res.rows[i].dataValues.OperadorRegreso.dataValues.idTipoUsuario; } } return { count: res.count, historial: res.rows }; }); }; module.exports = historial;