from flask import Flask, Blueprint, render_template, request, redirect, url_for from datetime import date, timedelta 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 app = Flask(__name__) app.config['MAIL_SERVER']= 'smtp.mail.yahoo.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USERNAME'] = 'celestino_rey@ymail.com' app.config['MAIL_PASSWORD'] = 'kbryvwxkockqckss' app.config['MAIL_USE_TLS'] = False app.config['MAIL_USE_SSL'] = True mail = Mail(app) # Ruta para mostrar las reservas del usuario. @bp.route("/misreservas") @login_required def misreservas(): db = get_db() 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/") @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/', 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/', 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() enviar_correos = os.getenv("ENVIA_EMAIL", 'False').lower() in ('true', '1', 't') # print(f"Sending emails: ", my_env) if enviar_correos == True: msg = Message('Reserva de pista de padel confirmada', sender='celestino_rey@ymail.com', recipients=[current_user.email]) msg.body = "Hola, " + current_user.name + " te confirmo que has reservado la pista de Devesa Park" 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(): 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 range(8,18): print("hora: %2d", hora) db.execute( "INSERT INTO reservas (nombre, fecha, hora) VALUES (?, ?, ?)", ("-", diaelegido, "%02d:00" % 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)