from flask import Flask, Blueprint, render_template, request, redirect, url_for
|
|
|
|
from datetime import date, timedelta, time
|
|
|
|
from padel.basededatos import get_db
|
|
from flask_login import login_required, current_user
|
|
from flask_mail import Mail, Message
|
|
import os
|
|
import sqlite3
|
|
|
|
|
|
bp = Blueprint("reservas", __name__)
|
|
|
|
# Parámetros para el envío de correos
|
|
|
|
#MAIL_SERVER= 'smtp.gmail.com'
|
|
#MAIL_PORT=587
|
|
#MAIL_USERNAME='devesaparkpadel@gmail.com'
|
|
#MAIL_PASSWORD='mzgvprepqhlkuxgy'
|
|
#MAIL_USE_TLS='True'
|
|
#MAIL_USE_SSL='False'
|
|
|
|
app = Flask(__name__)
|
|
app.config['MAIL_SERVER']= 'smtp.gmail.com'
|
|
app.config['MAIL_PORT'] = 587
|
|
app.config['MAIL_USERNAME'] = 'devesaparkpadel@gmail.com'
|
|
app.config['MAIL_PASSWORD'] = 'mzgvprepqhlkuxgy'
|
|
app.config['MAIL_USE_TLS'] = True
|
|
app.config['MAIL_USE_SSL'] = False
|
|
mail = Mail(app)
|
|
|
|
# Ruta para mostrar las reservas del usuario.
|
|
|
|
@bp.route("/misreservas")
|
|
@login_required
|
|
def misreservas():
|
|
hoy = date.today()
|
|
|
|
db = get_db()
|
|
|
|
db.execute(
|
|
"DELETE FROM reservas WHERE fecha<? AND nombre=?", (hoy,current_user.name,)
|
|
)
|
|
db.commit()
|
|
|
|
reservas = db.execute(
|
|
"SELECT id, nombre, fecha, hora FROM reservas WHERE nombre=? ORDER BY fecha DESC", (current_user.name,)
|
|
).fetchall()
|
|
|
|
return render_template("reservas/misreservas.html", reservas=reservas, name=current_user.name)
|
|
|
|
# ruta para mostrar la tabla del día en concreto con todas las horas
|
|
# las horas no usadas aparecen con el botón "Reservar" y las horas reservadas por el usuario
|
|
# aparecen con el botón "Eliminar"
|
|
|
|
@bp.route("/reservar/<diaelegido>")
|
|
@login_required
|
|
def reservar(diaelegido):
|
|
|
|
db = get_db()
|
|
|
|
reservas = db.execute(
|
|
"SELECT id, nombre, fecha, hora FROM reservas WHERE fecha=? ORDER BY fecha DESC", (diaelegido,)
|
|
).fetchall()
|
|
|
|
return render_template("reservas/reservar.html", diaelegido=diaelegido, name=current_user.name, reservas=reservas)
|
|
|
|
# Ruta para eliminar una reserva
|
|
#
|
|
@bp.route('/eliminar_reserva/<int:id>', methods=['POST'])
|
|
@login_required
|
|
def eliminar_reserva(id):
|
|
|
|
db = get_db()
|
|
db.execute(
|
|
"DELETE FROM reservas WHERE id=?", (id,)
|
|
)
|
|
db.commit()
|
|
|
|
return redirect(url_for('reservas.misreservas'))
|
|
|
|
# ruta para actualizar la reserva. Actualiza porque en la bd están todas las horas de un día
|
|
# y lo que se hace es simplemente colocar el nombre del usuario en la hora elegida
|
|
|
|
@bp.route('/actualizar_reserva/<int:id>', methods=['POST'])
|
|
@login_required
|
|
def actualizar_reserva(id):
|
|
|
|
db = get_db()
|
|
db.execute(
|
|
"UPDATE reservas SET nombre=? WHERE id=?", (current_user.name, id,)
|
|
)
|
|
db.commit()
|
|
|
|
eleccion = db.execute(
|
|
"SELECT fecha, hora FROM reservas WHERE id=?", (id,)
|
|
)
|
|
db.commit()
|
|
|
|
for fila in eleccion:
|
|
fechareserva = fila["fecha"]
|
|
horareserva = fila["hora"]
|
|
|
|
msg = Message('Reserva de pista de padel confirmada.', sender='devesaparkpadel@gmail.com', recipients=[current_user.email])
|
|
msg.body = "Hola, " + current_user.name + ",\n\n te confirmo que has reservado la pista de Devesa Park.\n\n\t Fecha: "+str(fechareserva)+".\n\t Hora: "+str(horareserva)
|
|
mail.send(msg)
|
|
|
|
|
|
return redirect(url_for('reservas.misreservas'))
|
|
|
|
# Ruta para elegir el día en el que se va a efectuar la reserva
|
|
# Se ofrece el día actual y los dos siguientes.
|
|
# si el día que se elige no está en la base de datos, se crean los registros de todas las horas para ese día.
|
|
|
|
@bp.route("/eligedia", methods=['GET', 'POST'])
|
|
@login_required
|
|
def eligedia():
|
|
horas = ["09:30","10:30","11:30","12:30","13:30","14:30","17:00","18:00","19:00","20:00","21:00","22:00"]
|
|
#horas = [9,10,11,12,13,14,17,18,19,20,21]
|
|
|
|
hoy = date.today()
|
|
manana = hoy + timedelta(days=1)
|
|
pasado = hoy + timedelta(days=2)
|
|
ayer = hoy - timedelta(days=1)
|
|
|
|
print("Ayer fue: ", ayer)
|
|
print("Hoy es: ", hoy)
|
|
print("Mañana será: ", manana)
|
|
print("Pasado será: ", pasado)
|
|
|
|
# borra los registros del día anterior al de hoy
|
|
|
|
db = get_db()
|
|
|
|
# pero antes, mete uno a una hora no usada por si acaso no hubiera
|
|
|
|
# db.execute(
|
|
# "INSERT INTO reservas (nombre, fecha, hora) VALUES (?, ?, ?)", ("-", ayer, "00:00",),
|
|
# )
|
|
# db.commit()
|
|
|
|
try:
|
|
db.execute(
|
|
"DELETE FROM reservas WHERE fecha=?", (ayer,)
|
|
)
|
|
db.commit()
|
|
except sqlite3.Error as er:
|
|
print("SQLite error: %s" %(' '.join(er.args)))
|
|
|
|
if request.method == "POST":
|
|
diaelegido = request.form['dias']
|
|
|
|
print("Día elegido:", diaelegido)
|
|
|
|
db = get_db()
|
|
|
|
horashoy = db.execute(
|
|
"SELECT * FROM reservas WHERE fecha=?", (diaelegido,)
|
|
).fetchall()
|
|
|
|
db.commit()
|
|
|
|
if not horashoy:
|
|
print("No hay horas para hoy")
|
|
db = get_db()
|
|
|
|
for hora in horas:
|
|
#print("hora: %02d" % hora)
|
|
db.execute(
|
|
"INSERT INTO reservas (nombre, fecha, hora) VALUES (?, ?, ?)", ("-", diaelegido, hora,),
|
|
)
|
|
|
|
db.commit()
|
|
|
|
horashoy = db.execute(
|
|
"SELECT * FROM reservas WHERE fecha=?", (diaelegido,)
|
|
).fetchall()
|
|
|
|
db.commit()
|
|
|
|
return redirect(url_for("reservas.reservar",diaelegido=diaelegido))
|
|
|
|
return render_template("reservas/eligedia.html",hoy=hoy,manana=manana,pasado=pasado)
|