92 lines
3.7 KiB
Python
92 lines
3.7 KiB
Python
from datetime import datetime
|
|
|
|
from urllib.parse import quote_plus
|
|
from sqlalchemy import create_engine, text
|
|
|
|
from flask import Flask
|
|
from flask import request
|
|
from flask import render_template
|
|
|
|
DB_USER = 'avsa_form'
|
|
DB_PASSWORD = '#4gvAwnUr5@MuZk9cYb!'
|
|
DB_HOST = 'avsa_form_db'
|
|
DB_PORT = '5432'
|
|
DB_NAME = 'avsa_form_db'
|
|
DB_TABLE = 'accounts'
|
|
|
|
class user_data:
|
|
def __init__(self, first_name, last_name, phone_number, request_at, start_availability, end_availability, user_type):
|
|
self.first_name = first_name
|
|
self.last_name = last_name
|
|
self.phone_number = phone_number
|
|
self.request_at = request_at
|
|
self.start_availability = start_availability
|
|
self.end_availability = end_availability
|
|
self.user_type = user_type
|
|
|
|
# new_data = current_data('lucas','royer','0612345678','2011-05-16 15:36:38','2011-05-16 15:36:38','2011-05-16 15:36:38','benevole')
|
|
|
|
def insert_db(current_data):
|
|
# Connect to DB
|
|
engine = create_engine(f"postgresql+psycopg2://{DB_USER}:%s@{DB_HOST}:{DB_PORT}/{DB_NAME}" % quote_plus(DB_PASSWORD))
|
|
conn = engine.connect()
|
|
|
|
|
|
|
|
data = {
|
|
'first_name': current_data.first_name,
|
|
'last_name': current_data.last_name,
|
|
'phone_number': current_data.phone_number,
|
|
'request_at': current_data.request_at,
|
|
'start_availability': current_data.start_availability,
|
|
'end_availability': current_data.end_availability,
|
|
'user_type': current_data.user_type,
|
|
}
|
|
|
|
# SQL query
|
|
query=text(f"INSERT INTO {DB_TABLE} (first_name, last_name, phone_number, request_at, start_availability, end_availability, user_type) VALUES (:first_name, :last_name, :phone_number, :request_at, :start_availability, :end_availability, :user_type);")
|
|
|
|
conn.execute(query, data)
|
|
conn.commit()
|
|
|
|
|
|
def create_app():
|
|
app = Flask(__name__)
|
|
app.config.from_mapping(
|
|
SECRET_KEY='dev',
|
|
)
|
|
|
|
@app.route("/")
|
|
def accueil():
|
|
return render_template('accueil.html')
|
|
|
|
@app.route('/formulaire', methods=['GET'])
|
|
def formulaire():
|
|
return render_template('formulaire.html', retry=False)
|
|
|
|
@app.route('/resultat', methods=['POST'])
|
|
def resultat():
|
|
if request.method == 'POST':
|
|
first_name = request.form['first_name']
|
|
last_name = request.form['last_name']
|
|
phone_number = request.form['phone_number']
|
|
request_at = datetime.now().strftime("%m-%d-%Y %H:%M:%S")
|
|
|
|
availability_date = request.form['availability_date']
|
|
start_availability_h = request.form['start_availability_h']
|
|
start_availability_m = request.form['start_availability_m']
|
|
end_availability_h = request.form['end_availability_h']
|
|
end_availability_m = request.form['end_availability_m']
|
|
|
|
start_availability = f'{availability_date} {start_availability_h}:{start_availability_m}:00'
|
|
end_availability = f'{availability_date} {end_availability_h}:{end_availability_m}:00'
|
|
user_type = request.form['user_type']
|
|
current_data = user_data(first_name, last_name, phone_number, request_at, start_availability, end_availability, user_type)
|
|
|
|
if any(value is None for value in current_data.__dict__.values()):
|
|
return render_template('formulaire.html', retry=True)
|
|
else:
|
|
insert_db(current_data)
|
|
return render_template('resultat.html', first_name=first_name, last_name=last_name, phone_number=phone_number, request_at=request_at, start_availability_h=start_availability_h, start_availability_m=start_availability_m, end_availability_h=end_availability_h, end_availability_m=end_availability_m, user_type=current_data.user_type)
|
|
|
|
return app |