from flask import ( Blueprint, render_template, request, redirect ) from models import ( Alquiler, Usuario, Taquilla, db ) import datetime from dateutil.relativedelta import relativedelta alquileres = Blueprint( "gestion_alquileres", __name__ ) @alquileres.route("/ver-alquileres") def ver_alquileres(info = None): alquileres = ( db.session.query( Usuario.id, Usuario.nombre, Usuario.dni, Taquilla.id, Taquilla.id_taquilla, Alquiler.validez ) .join(Alquiler, Alquiler.id_usuario == Usuario.id) .join(Taquilla, Alquiler.id_taquilla == Taquilla.id) .all() ) alquileres = [ { "id_usuario": id_usuario, "id_taquilla": id_taquilla, "nombre_persona": nombre, "dni_persona": dni, "taquilla": numero_taquilla, "validez": datetime.datetime.fromtimestamp(int(validez)).strftime("%d/%m/%Y %H:%M:%S") } for id_usuario, nombre, dni, id_taquilla, numero_taquilla, validez in alquileres ] return render_template("ver_alquileres.html", alquileres=alquileres, info=info) @alquileres.route("/renovar/") def renovar_alquiler(id_taquilla): if not id_taquilla: return redirect("/") alquiler = ( db.session.query(Alquiler) .filter(Alquiler.id_taquilla == id_taquilla) .first() ) current_date = datetime.datetime.now() validez = current_date + relativedelta(months=3) validez = validez.replace(hour=23, minute=59, second=0, microsecond=0) validez = int(validez.timestamp()) alquiler.validez = validez db.session.commit() usuario = ( db.session.query(Usuario) .filter(Usuario.id == alquiler.id_usuario) .first() ) return ver_alquileres(info=f"Alquiler renovado correctamente para {usuario.nombre}") @alquileres.route("/confirmar-baja/") def confirmar_baja(id_taquilla): info_taquilla = ( db.session.query( Taquilla.id_taquilla, Usuario.nombre ) .join(Alquiler, Alquiler.id_taquilla == Taquilla.id) .join(Usuario, Alquiler.id_usuario == Usuario.id) .filter(Taquilla.id == id_taquilla) .first() ) info_taquilla = { "numero_taquilla": info_taquilla[0], "nombre_persona": info_taquilla[1] } return render_template( "confirmar_baja.html", info_taquilla=info_taquilla, id_taquilla=id_taquilla ) @alquileres.route("/baja/") def dar_baja(id_taquilla): alquiler = ( db.session.query(Alquiler) .filter(Alquiler.id_taquilla == id_taquilla) .first() ) usuario = ( db.session.query(Usuario) .filter(Usuario.id == alquiler.id_usuario) .first() ) taquilla = ( db.session.query(Taquilla) .filter(Taquilla.id == id_taquilla) .first() ) if alquiler and usuario and taquilla: nombre_usuario = usuario.nombre id_taquilla = taquilla.id_taquilla db.session.delete(alquiler) db.session.delete(usuario) db.session.commit() return ver_alquileres(info=f"Se ha dado de baja el alquiler para {nombre_usuario} en la taquilla {id_taquilla}") else: return ver_alquileres(info="No existe este alquiler")