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/") 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/", methods=["GET", "POST"]) def alquilar_taquilla(id_taquilla): if request.method == "GET": return render_template( "alquilar_taquilla.html", id_taquilla=id_taquilla ) else: nombre = request.form.get("nombre_usuario").upper() dni = request.form.get("dni_usuario").upper() correo = request.form.get("correo_electronico") agreement = request.form.get("agreement") print(nombre, dni, correo, agreement) error = None if not (dni and correo and nombre): error = "Faltan datos." if not agreement: error = "No está de acuerdo con las políticas." 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." taquilla = ( db.session.query(Taquilla) .filter(Taquilla.id_taquilla == id_taquilla) .first() ) if not taquilla: error = "La taquilla en cuestión no existe" if not error: alquiler_user = Alquiler() alquiler_user.id_usuario = user.id alquiler_user.id_taquilla = taquilla.id current_date = datetime.datetime.now() validez = current_date + relativedelta(months=3) validez = validez.replace(hour=23, minute=59, second=0, microsecond=0) alquiler_user.validez = int(validez.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}!" ) else: print(error) return render_template( "alquilar_taquilla.html", id_taquilla=id_taquilla, info=error )