Files
pcpuma_acatlan_api/server/controller/Prestamo/status.js
T

88 lines
2.7 KiB
JavaScript

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;