"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