diff --git a/server/controller/Prestamo/pedir.js b/server/controller/Prestamo/pedir.js index e69de29..2545191 100644 --- a/server/controller/Prestamo/pedir.js +++ b/server/controller/Prestamo/pedir.js @@ -0,0 +1,81 @@ +const moment = require('moment'); +const validar = require('../../helper/validar'); +const Prestamo = require('../../db/tablas/Prestamo'); +const Usuario = require('../../db/tablas/Carrera'); +const TipoUsuario = require('../../db/tablas/TipoUsuario'); +const TipoCarrito = require('../../db/tablas/TipoCarrito'); +const Carrito = require('../../db/tablas/Carrito'); +const Equipo = require('../../db/tablas/Equipo'); +const Status = require('../../db/tablas/Status'); +const Programa = require('../../db/tablas/Programa'); +const Modulo = require('../../db/tablas/Modulo'); + +const pedir = async (body) => { + const ahora = moment(); + const idUsuario = validar.validarId(body.idUsuario); + const idTipoCarrito = validar.validarId(body.idTipoCarrito); + const idPrograma = body.idPrograma + ? validar.validarId(body.idPrograma) + : null; + const idModulo = idPrograma ? 1 : validar.validarId(body.idModulo); + let equipo = {}; + + return Usuario.findOne({ where: { idUsuario } }) + .then((res) => { + if (!res) throw new Error('Ese usuario no existe.'); + if (res.multa) + throw new Error( + 'Este usuario tiene una multa activa, no puede solicitar un equipo de computo.' + ); + return Prestamo.findOne({ + where: { idUsuario }, + include: [{ model: Equipo, where: { activo: true } }], + }); + }) + .then((res) => { + if (res) + throw new Error( + 'Este usuario ya cuenta con un prestamo activo. No sepuede solicitar otro equipo de computo.' + ); + return Equipo.findOne({ + where: { activo: false }, + include: [ + { + model: Carrito, + include: [ + { model: TipoCarrito, where: { idTipoCarrito } }, + { model: Modulo, where: { idModulo } }, + ], + }, + { model: Status, where: { idStatus: 1 } }, + { + model: Programa, + where: { idPrograma: idPrograma ? idPrograma : null }, + }, + ], + }); + }) + .then((res) => { + if (!res) + throw new Error( + 'No hay un equipo de computo con las características solicitadas disponible. Intenta más tarde o con otras características.' + ); + equipo = res; + equipo.activo = true; + return Equipo.update( + { activo: true }, + { where: { idEquipo: equipo.idEquipo } } + ); + }) + .then((res) => + Prestamo.create({ + horaInicio: ahora.add(10, 'm'), + horaFin: ahora.add(130, 'm'), + idUsuario, + idEquipo: equipo.idEquipo, + }) + ) + .then((res) => ({ equipo })); +}; + +module.exports = pedir; diff --git a/server/db/tablas/Prestamo.js b/server/db/tablas/Prestamo.js index a79281e..fd699f5 100644 --- a/server/db/tablas/Prestamo.js +++ b/server/db/tablas/Prestamo.js @@ -47,7 +47,8 @@ Prestamo.belongsTo(Operador, { foreignKey: { name: 'idOperadorEntrega', type: DataTypes.INTEGER, - allowNull: false, + allowNull: true, + defaultValue: null, }, });