diff --git a/new-registration-app/main.py b/new-registration-app/main.py index c71e4f2..a5228e8 100644 --- a/new-registration-app/main.py +++ b/new-registration-app/main.py @@ -1,4 +1,6 @@ +import locale from contextlib import asynccontextmanager +from datetime import datetime from typing import Annotated, Union import starlette.status as status @@ -16,6 +18,8 @@ sqlite_url = f"sqlite:///{sqlite_file_name}" connect_args = {"check_same_thread": False} engine = create_engine(sqlite_url, connect_args=connect_args) +locale.setlocale(locale.LC_ALL, "de_DE.UTF-8") + def get_session(): with Session(engine) as session: @@ -45,10 +49,46 @@ async def read_root(request: Request, session: SessionDep): statement = select(Event).order_by(Event.event_time) events = session.exec(statement).all() return templates.TemplateResponse( - request=request, name="index.html", context={"events": events} + request=request, + name="index.html", + context={"events": events, "current_page": "home", "now": datetime.now()}, ) +@app.get("/event/add") +async def add_event_form(request: Request, session: SessionDep): + return templates.TemplateResponse(request=request, name="add_event.html") + + +@app.post("/event/add") +async def add_event(request: Request, session: SessionDep): + form_data = await request.form() + + event_time = datetime.fromisoformat(form_data["eventTime"]) + registration_deadline = form_data.get("registrationDeadline") + if not registration_deadline: + # Find the last Sunday before event_time + deadline = event_time + while deadline.weekday() != 6: # 6 represents Sunday + deadline = deadline.replace(day=deadline.day - 1) + registration_deadline = deadline.replace( + hour=19, minute=30, second=0, microsecond=0 + ) + else: + registration_deadline = datetime.fromisoformat(registration_deadline) + + event = Event( + title=form_data["eventName"], + event_time=event_time, + registration_deadline=registration_deadline, + description=form_data.get("eventDescription"), + recipe_link=form_data.get("recipeLink"), + ) + session.add(event) + session.commit() + return RedirectResponse(url="/", status_code=status.HTTP_302_FOUND) + + @app.get("/event/{event_id}") async def read_event(request: Request, event_id: int, session: SessionDep): statement = select(Event).where(Event.id == event_id) @@ -56,6 +96,14 @@ async def read_event(request: Request, event_id: int, session: SessionDep): statement = select(Household) households = session.exec(statement).all() + + # filter out households with existing registrations + households = [ + h + for h in households + if h.id not in [reg.household_id for reg in event.registrations] + ] + return templates.TemplateResponse( request=request, name="event.html", diff --git a/new-registration-app/templates/add_event.html b/new-registration-app/templates/add_event.html new file mode 100644 index 0000000..5a9ad64 --- /dev/null +++ b/new-registration-app/templates/add_event.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} + +{% block content %} +