const { Op, where } = 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 Prestamo = require(`${dbPath}/Prestamo`); const Status = require(`${dbPath}/Status`); const TipoCarrito = require(`${dbPath}/TipoCarrito`); const TipoUsuario = require(`${dbPath}/TipoUsuario`); const Usuario = require(`${dbPath}/Usuario`); const activos = async (body) => { const pagina = validar.validarNumeroEntero(body.pagina, 'página', false); const idModulo = validar.validarNumeroEntero( body.idModulo, 'id modulo', true ); const idPrestamo = body.idPrestamo ? validar.validarNumeroEntero(body.idPrestamo, 'id préstamo', true) : ''; const idTipoCarrito = body.idTipoCarrito ? validar.validarNumeroEntero(body.idTipoCarrito, 'id tipo carrito', true) : ''; const usuario = body.usuario ? validar.validarNumeroCuenta(body.usuario) : ''; const numeroInventario = body.numeroInventario ? validar.validarAlfanumerico( body.numeroInventario, 'numero de inventario', true, 20 ) : ''; const carrito = body.carrito ? validar.validarAlfanumerico(body.carrito, 'carrito', true) : ''; const equipo = body.equipo ? validar.validarAlfanumerico(body.equipo, 'equipo', true) : ''; let wherePrestamo = { [Op.or]: [ { activo: true }, { [Op.and]: [{ regresoInmediato: true }, { idOperadorRegreso: null }], }, ], }; let whereCarrito = [{ idModulo }]; let whereEquipo = {}; if (equipo) whereEquipo.equipo = equipo; if (numeroInventario) whereEquipo.numeroInventario = { [Op.like]: `%${numeroInventario}%` }; if (carrito) whereCarrito.push({ carrito }); if (idTipoCarrito) whereCarrito.push({ idTipoCarrito }); if (idPrestamo) wherePrestamo.idPrestamo = { [Op.like]: `%${idPrestamo}%` }; return Modulo.findOne({ where: { idModulo } }).then((res) => { if (!res) throw new Error('No existe este módulo.'); return Prestamo.findAndCountAll({ where: wherePrestamo, include: [ { model: Equipo, where: whereEquipo, include: [ { model: Carrito, where: { [Op.and]: whereCarrito }, include: [{ model: TipoCarrito }, { model: Modulo }], attributes: ['idCarrito', 'carrito'], }, { model: Status }, ], attributes: ['idEquipo', 'numeroSerie', 'numeroInventario', 'equipo'], }, { model: Usuario, where: { usuario: { [Op.like]: `%${usuario}%` } }, include: [{ model: TipoUsuario }, { model: Carrera }], attributes: ['idUsuario', 'usuario', 'nombre'], }, ], attributes: [ 'idPrestamo', 'activo', 'horaMaxRecoger', 'horaInicio', 'horaFin', 'horaEntrega', 'regresoInmediato', 'createdAt', ], limit: 25, offset: 25 * (pagina - 1), order: [['idPrestamo', 'ASC']], }); }); }; module.exports = activos;