167 lines
4.6 KiB
Python

from flask import (
Blueprint,
render_template,
request
)
from models import (
Seccion,
Taquilla,
Alquiler,
Usuario,
db
)
import time
import datetime
from dateutil.relativedelta import relativedelta
taquillas = Blueprint(
"gestion_taquillas",
__name__
)
@taquillas.route("/secciones")
def ver_secciones():
secciones = db.session.query(
Seccion
)
return render_template(
"ver_secciones.html",
secciones=secciones
)
@taquillas.route("/secciones/<id_seccion>")
def ver_taquillas_seccion(id_seccion):
taquillas = (
db.session.query(Taquilla.id_taquilla, Alquiler.id_usuario)
.join(Alquiler, Taquilla.id == Alquiler.id_taquilla, isouter=True)
.filter(Taquilla.id_seccion == int(id_seccion))
.all()
)
print(taquillas)
taquillas_result = [
{
"id_taquilla": id_taquilla,
"alquilado": id_usuario is not None
} for id_taquilla, id_usuario in taquillas
]
return render_template(
"ver_taquillas.html",
taquillas=taquillas_result
)
@taquillas.route("/alquilar/<id_taquilla>", methods=["GET", "POST"])
def alquilar_taquilla(id_taquilla):
if request.method == "GET":
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla
)
else:
error = None
nombre = request.form.get("nombre_usuario").upper()
dni = request.form.get("dni_usuario").upper()
correo = request.form.get("correo_electronico")
fecha_caducidad = request.form.get("fecha_caducidad")
agreement = request.form.get("agreement")
try:
fecha_caducidad = datetime.datetime.strptime(fecha_caducidad, "%Y-%m-%d")
except Exception:
error = "No se ha introducido la fecha de forma correcta."
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
if not (dni and correo and nombre):
error = "Faltan datos."
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
if not agreement:
error = "No está de acuerdo con las políticas."
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
user = (
db.session.query(Usuario)
.filter(Usuario.dni == dni)
.first()
)
if not user:
user = Usuario()
user.correo = correo
user.dni = dni
user.nombre = nombre
db.session.add(user)
alquiler_user = (
db.session.query(Alquiler)
.filter(Alquiler.id_usuario == user.id)
.first()
)
if alquiler_user:
error = "Usuario ya tiene una taquilla alquilada. Debe renovar o dar de baja el alquiler."
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
taquilla = (
db.session.query(Taquilla)
.filter(Taquilla.id_taquilla == id_taquilla)
.first()
)
if not taquilla:
error = "La taquilla en cuestión no existe"
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
current_date = datetime.datetime.now()
if not fecha_caducidad > current_date:
error = "La fecha introducida no es válida. Tiene que ser mayor que la fecha actual."
return render_template(
"alquilar_taquilla.html",
id_taquilla=id_taquilla,
info=error
)
alquiler_user = Alquiler()
alquiler_user.id_usuario = user.id
alquiler_user.id_taquilla = taquilla.id
alquiler_user.validez = int(fecha_caducidad.timestamp())
db.session.add(alquiler_user)
db.session.commit()
return render_template(
"pagina_principal.html",
info=f"¡La taquilla {id_taquilla} ha sido alquilada a {nombre}!"
)