95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
|
|
import { Request, Response } from 'express'
|
||
|
|
import { getRepository } from 'typeorm'
|
||
|
|
import { Prestamo } from '@src/entity/Prestamo'
|
||
|
|
import * as moment from 'moment'
|
||
|
|
import { Horario } from '@src/entity/Horario'
|
||
|
|
import { Usuario } from '@src/entity/Usuario'
|
||
|
|
import { Equipo } from '@src/entity/Equipo'
|
||
|
|
|
||
|
|
export class ResevacionController {
|
||
|
|
static async espaciosDisponibles (req: Request, res: Response) {
|
||
|
|
const repository = getRepository(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: Request, res: Response) {
|
||
|
|
const prestamoRepository = getRepository(Prestamo)
|
||
|
|
const horarioRepository = getRepository(Horario)
|
||
|
|
const usuarioRepository = getRepository(Usuario)
|
||
|
|
const equipoRepository = getRepository(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' })
|
||
|
|
}
|
||
|
|
|
||
|
|
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' })
|
||
|
|
}
|
||
|
|
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()
|
||
|
|
|
||
|
|
const prestamo = new 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
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|