Files
api/dist/controller/Reservacion.js
T
2020-09-11 10:24:48 -05:00

165 lines
6.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const typeorm_1 = require("typeorm");
const Prestamo_1 = require("../entity/Prestamo");
const moment = require("moment");
const Horario_1 = require("../entity/Horario");
const Usuario_1 = require("../entity/Usuario");
const Equipo_1 = require("../entity/Equipo");
const Operador_1 = require("../entity/Operador");
const Mesa_1 = require("../entity/Mesa");
class ResevacionController {
static async espaciosDisponibles(req, res) {
const repository = typeorm_1.getRepository(Horario_1.Horario);
const fecha = moment().format('L');
console.log(fecha);
const espacios = await repository
.createQueryBuilder('horario')
.leftJoinAndSelect('horario.prestamos', 'prestamo')
.where('prestamo.createdAt >= :fecha', { fecha })
.groupBy('horario.hora')
.getMany();
return res.status(200).json(espacios);
}
static async reservar(req, res) {
const prestamoRepository = typeorm_1.getRepository(Prestamo_1.Prestamo);
const horarioRepository = typeorm_1.getRepository(Horario_1.Horario);
const usuarioRepository = typeorm_1.getRepository(Usuario_1.Usuario);
const equipoRepository = typeorm_1.getRepository(Equipo_1.Equipo);
const { usuarioId, tipoId, horarioId } = req.body;
const usuario = await usuarioRepository.findOne(usuarioId, {
select: ['id', 'baja', 'multa']
});
if (!usuario) {
res.status(400).json({ err: 'Usuario no encontrado' });
return;
}
if (usuario.baja) {
res.status(400).json({ err: 'El usuario esta dado de baja' });
return;
}
const horario = await horarioRepository.findOne(horarioId);
if (!horario) {
res.status(400).json({ err: 'El horario no existe' });
return;
}
const prestamoActivo = await prestamoRepository
.createQueryBuilder('prestamo')
.where('prestamo.usuarioId = :idUsuario', { idUsuario: usuario.id })
.andWhere('prestamo.activo = true')
.orWhere('prestamo.reservado = true')
.getOne();
if (prestamoActivo) {
res.status(400).json({ err: 'El usuario tiene un prestamo activo' });
return;
}
const equipo = await equipoRepository
.createQueryBuilder('equipo')
.leftJoinAndSelect('equipo.carrito', 'carrito')
.leftJoinAndSelect('carrito.tipo', 'tipo')
.where('equipo.activo = :activo', { activo: false })
.andWhere('carrito.kiosko = :kiosko', { kiosko: 3 })
.andWhere('tipo.id = :tipoId', { tipoId })
.orderBy('equipo.updatedAt', 'ASC')
.getOne();
if (!equipo) {
res.status(400).json({ err: 'Ya no hay equipos' });
return;
}
const prestamo = new Prestamo_1.Prestamo();
const horamax = horario.hora.split('-')[1].split(':')[0];
const m = moment()
.hour(+horamax)
.minute(0)
.toLocaleString();
equipo.activo = true;
prestamo.equipo = equipo;
prestamo.usuario = usuario;
prestamo.horaMaxEntrega = m;
prestamo.horario = horario;
await equipoRepository.save(equipo);
await prestamoRepository.save(prestamo);
prestamo.qr = `https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=${prestamo.id}`;
console.log(prestamo);
res.status(200).json({
prestamo
});
}
static async confirmar(req, res) {
const prestamoRepository = typeorm_1.getRepository(Prestamo_1.Prestamo);
const operadorRepository = typeorm_1.getRepository(Operador_1.Operador);
const mesaRepository = typeorm_1.getRepository(Mesa_1.Mesa);
const mesa = await mesaRepository
.createQueryBuilder('mesa')
.where('mesa.activo = :activo', { activo: false })
.orderBy('mesa.updatedAt', 'ASC')
.getOne();
const { prestamoId, operadorId } = req.body;
if (!mesa) {
res.status(400).json({
err: 'Ya no hay mesas disponbles'
});
return;
}
const prestamo = await prestamoRepository.findOne(prestamoId, {
relations: ['equipo']
});
if (!prestamo) {
res.status(400).json({
err: 'El prestamo no existe'
});
return;
}
const operador = await operadorRepository.findOne(operadorId);
if (!operador) {
res.status(400).json({
err: 'El operador no existe'
});
return;
}
mesa.activo = true;
prestamo.operadorEntrega = operador;
prestamo.reservado = false;
prestamo.activo = true;
prestamo.mesa = mesa;
try {
await mesaRepository.save(mesa);
await prestamoRepository.save(prestamo);
res.status(200).json(prestamo);
}
catch (err) {
res.status(400).json({ err: err.message });
}
}
static async regreso(req, res) {
const equipoRepository = typeorm_1.getRepository(Equipo_1.Equipo);
const prestamoRepository = typeorm_1.getRepository(Prestamo_1.Prestamo);
const operadorRepository = typeorm_1.getRepository(Operador_1.Operador);
const mesaRepository = typeorm_1.getRepository(Mesa_1.Mesa);
const prestamo = await prestamoRepository.findOne(req.body.prestamoId, {
relations: ['equipo', 'mesa']
});
if (!prestamo) {
res.status(400).json({ err: 'Prestamo no encontrado' });
}
const operador = await operadorRepository.findOne(req.body.operadorId);
if (!operador) {
res.status(400).json({ err: 'Operador no encontrado' });
}
prestamo.activo = false;
prestamo.equipo.activo = false;
prestamo.operadorRegreso = operador;
prestamo.mesa.activo = false;
try {
await equipoRepository.save(prestamo.equipo);
await mesaRepository.save(prestamo.mesa);
await prestamoRepository.save(prestamo);
res.status(200).json(prestamo);
}
catch (err) {
res.status(400).json({ err: err.message });
}
}
}
exports.ResevacionController = ResevacionController;
//# sourceMappingURL=Reservacion.js.map