diff --git a/src/meal_manager/alembic/versions/2025_12_12_1226-914ebe23f071_add_billed_column.py b/src/meal_manager/alembic/versions/2025_12_12_1226-914ebe23f071_add_billed_column.py new file mode 100644 index 0000000..0a82aa1 --- /dev/null +++ b/src/meal_manager/alembic/versions/2025_12_12_1226-914ebe23f071_add_billed_column.py @@ -0,0 +1,49 @@ +"""add billing info and organizer name to event + +Revision ID: 914ebe23f071 +Revises: 13084c5c1f68 +Create Date: 2025-12-12 12:26:13.314293 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "914ebe23f071" +down_revision: Union[str, Sequence[str], None] = "13084c5c1f68" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column( + "event", + sa.Column( + "billed", sa.Boolean(), nullable=False, server_default=sa.text("false") + ), + ) + op.add_column( + "event", + sa.Column( + "exclude_from_billing", + sa.Boolean(), + nullable=False, + server_default=sa.text("false"), + ), + ) + op.add_column("event", sa.Column("organizer_name", sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("event", "organizer_name") + op.drop_column("event", "exclude_from_billing") + op.drop_column("event", "billed") + # ### end Alembic commands ### diff --git a/src/meal_manager/main.py b/src/meal_manager/main.py index b93a90d..90380df 100644 --- a/src/meal_manager/main.py +++ b/src/meal_manager/main.py @@ -241,6 +241,8 @@ async def edit_event( event.description = form_data.get("eventDescription") event.recipe_link = form_data.get("recipeLink") event.ignore_subscriptions = form_data.get("ignoreSubscriptions") == "on" + event.organizer_name = form_data.get("organizerName") + event.exclude_from_billing = form_data.get("excludeFromBilling") == "on" session.commit() @@ -260,6 +262,8 @@ async def add_event(request: Request, session: SessionDep, user: StrictUserDep): description=form_data.get("eventDescription"), recipe_link=form_data.get("recipeLink"), ignore_subscriptions=form_data.get("ignoreSubscriptions") == "on", + organizer_name=form_data.get("organizerName"), + exclude_from_billing=form_data.get("excludeFromBilling") == "on", ) session.add(event) session.commit() @@ -448,8 +452,11 @@ def sync_with_grist_route(event_id: int, session: SessionDep, user: StrictUserDe event = session.scalars(statement).one() entries_written = sync_with_grist(event) + message = "Es wurden keine Einträge geschrieben." if entries_written > 0: + event.billed = True + session.commit() message = f"Erfolgreich {entries_written} Einträge geschrieben." return RedirectResponse( url=f"/event/{event_id}?message={quote_plus(message)}", diff --git a/src/meal_manager/models.py b/src/meal_manager/models.py index 7338e67..907713d 100644 --- a/src/meal_manager/models.py +++ b/src/meal_manager/models.py @@ -36,6 +36,11 @@ class Event(Base): subscriptions_applied: Mapped[bool] = mapped_column(default=False, nullable=False) ignore_subscriptions: Mapped[bool] = mapped_column(default=False, nullable=False) + billed: Mapped[bool] = mapped_column(default=False, nullable=False) + exclude_from_billing: Mapped[bool] = mapped_column(default=False, nullable=False) + + organizer_name: Mapped[str] = mapped_column(nullable=True) + registrations: Mapped[list["Registration"]] = relationship( "Registration", cascade="all, delete" ) diff --git a/src/meal_manager/templates/add_event.html b/src/meal_manager/templates/add_event.html index 6275725..4978477 100644 --- a/src/meal_manager/templates/add_event.html +++ b/src/meal_manager/templates/add_event.html @@ -9,7 +9,7 @@ - +
{{ event.title }}
{{ event.event_time.strftime('%A, %d.%m.%Y') }}
+{% if event.organizer_name %}Organisiert von {{ event.organizer_name }}
{% endif %}{{ event.description }}
Anmeldungen
{% if not user %}{{ event.event_time.strftime('%A, %d.%m.%Y') - }} -
-{{ event.description }}
- {% if event.registration_deadline > now %}Zur Anmeldung{% else %}Details ansehen{% endif %} +{{ event.organizer_name }}
{% endif %} +{{ event.event_time.strftime('%A, %d.%m.%Y') }}
+{{ event.description }}
+ {% if event.registration_deadline > now %}Zur Anmeldung{% else %}Details ansehen{% endif %} +