const moment = require('moment'); const { validarId } = require('../../helper/validar'); const dbPath = '../../db/tablas'; const Carrito = require(`${dbPath}/Carrito`); const Equipo = require(`${dbPath}/Equipo`); const Modulo = require(`${dbPath}/Modulo`); const Prestamo = require(`${dbPath}/Prestamo`); const Programa = require(`${dbPath}/Programa`); const TipoCarrito = require(`${dbPath}/TipoCarrito`); const status = async (body) => { const ahora = moment(); const idPrestamo = validarId(body.idPrestamo); return Prestamo.findOne({ where: { idPrestamo }, include: [ { model: Equipo, include: [ { model: Carrito, include: [{ model: TipoCarrito }, { model: Modulo }], }, { model: Programa }, ], }, ], }).then(async (res) => { if (!res) throw new Error('No existe este prestamo.'); delete res.dataValues.idUsuario; delete res.dataValues.idOperadorEntrega; delete res.dataValues.idOperadorRegreso; delete res.dataValues.idOperadorCancelacion; delete res.dataValues.idEquipo; delete res.dataValues.Equipo.dataValues.idPrograma; delete res.dataValues.Equipo.dataValues.idStatus; delete res.dataValues.Equipo.dataValues.idCarrito; delete res.dataValues.Equipo.dataValues.updatedAt; delete res.dataValues.Equipo.dataValues.Carrito.dataValues.idTipoCarrito; delete res.dataValues.Equipo.dataValues.Carrito.dataValues.idModulo; delete res.dataValues.Equipo.dataValues.Carrito.dataValues.activo; if (!res.activo) { if (!res.horaEntrega) return { message: 'Este prestamo fue cancelado.', prestamo: res, }; return { message: 'Este prestamo no es encuentra activo.', prestamo: res, }; } else if (res.Equipo.enUso) { if (moment(res.horaFin) < ahora) { return { message: 'Ya paso la hora de entrega. El usuario puede ser acreedor a una multa por el retraso.', prestamo: res, atraso: true, }; } return { message: 'El equipo ya fue entregado al usuario.', prestamo: res, }; } else if (moment(res.horaMaxRecoger) < ahora) { await Equipo.update( { apartado: false }, { where: { idEquipo: res.Equipo.idEquipo } } ); await Prestamo.update({ activo: false }, { where: { idPrestamo } }); res.Equipo.apartado = false; res.activo = false; return { message: 'Ya paso el tiempo limite para recoger el dispositivo. Se ha cancelado tu prestamo.', prestamo: res, }; } return { message: 'Aun no se entrega el equipo al usuario.', prestamo: res, }; }); }; module.exports = status;