sailing_forms/app.py
2025-11-26 17:11:44 +01:00

83 lines
No EOL
2.7 KiB
Python

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)