First commit
This commit is contained in:
commit
f83a061e39
9 changed files with 341 additions and 0 deletions
83
app.py
Normal file
83
app.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
import os
|
||||
import yaml
|
||||
import gspread
|
||||
from flask import Flask, render_template, request, redirect, url_for, abort
|
||||
from datetime import datetime
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Load Configuration
|
||||
def load_config():
|
||||
with open('events.yaml', 'r') as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
# Connect to Google Sheets
|
||||
def get_google_sheet(sheet_id):
|
||||
gc = gspread.service_account(filename='credentials.json')
|
||||
try:
|
||||
sh = gc.open_by_key(sheet_id)
|
||||
return sh.sheet1 # Assumes data goes into the first tab
|
||||
except Exception as e:
|
||||
print(f"Error connecting to Google Sheet: {e}")
|
||||
return None
|
||||
|
||||
@app.route('/')
|
||||
def home():
|
||||
# List all available active events
|
||||
config = load_config()
|
||||
events = config.get('events', {})
|
||||
return render_template('home.html', events=events)
|
||||
|
||||
# Dynamic Route for any event defined in YAML
|
||||
@app.route('/<event_slug>', methods=['GET', 'POST'])
|
||||
def event_form(event_slug):
|
||||
config = load_config()
|
||||
events = config.get('events', {})
|
||||
|
||||
# Check if event exists in config
|
||||
if event_slug not in events:
|
||||
abort(404)
|
||||
|
||||
event_data = events[event_slug]
|
||||
|
||||
if request.method == 'POST':
|
||||
# 1. Collect Form Data
|
||||
form_data = [
|
||||
datetime.now().strftime("%Y-%m-%d %H:%M:%S"), # Timestamp
|
||||
request.form.get('klasse'),
|
||||
request.form.get('zeilnummer'),
|
||||
request.form.get('bootnaam'),
|
||||
request.form.get('boottype'),
|
||||
# Checkboxes (Join them or separate columns? Let's join for simplicity)
|
||||
", ".join([k for k in ['genua', 'rolfok', 'spinaker', 'halfwinder', 'genaker', 'dacron'] if k in request.form]),
|
||||
request.form.get('schroef'),
|
||||
request.form.get('naam'),
|
||||
request.form.get('straat'),
|
||||
request.form.get('postcode'),
|
||||
request.form.get('plaats'),
|
||||
request.form.get('land'),
|
||||
request.form.get('telefoonmobiel'),
|
||||
request.form.get('email'),
|
||||
request.form.get('startlicentienummer'),
|
||||
request.form.get('vereniging'),
|
||||
request.form.get('opmerkingen')
|
||||
]
|
||||
|
||||
# 2. Push to Google Sheet
|
||||
sheet = get_google_sheet(event_data['sheet_id'])
|
||||
if sheet:
|
||||
sheet.append_row(form_data)
|
||||
return redirect(url_for('success', event_slug=event_slug))
|
||||
else:
|
||||
return "Error: Could not connect to Google Sheet. Check server logs."
|
||||
|
||||
return render_template('form.html', event=event_data, slug=event_slug)
|
||||
|
||||
@app.route('/<event_slug>/success')
|
||||
def success(event_slug):
|
||||
config = load_config()
|
||||
event_data = config['events'].get(event_slug)
|
||||
return render_template('success.html', event=event_data)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
Loading…
Add table
Add a link
Reference in a new issue