nacataquillas/endpoints/alquileres.py

141 lines
3.6 KiB
Python

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/<id_taquilla>")
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/<id_taquilla>")
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/<id_taquilla>")
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")