Add support to add events
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user