Systemet til håndtering af Fælles Vinindkøb
Find a file
carsten 16d89db527 Opgave 11c: Ordreoversigt + markér betalt (harmonika-UI)
OrdersPage (/runder/:roundId/ordrer, linket fra RoundsPage og
RoundDetailPage) — en to-niveaus harmonika designet af brugeren:
øverste fold viser rundens flasketotal, total og udestående beløb
(sum af ordrer der endnu ikke er betalt), foldet ud til rundens
samlede, kategori-grupperede vinliste. Derunder én fold pr. ordre
(sorteret efter order_number, rød/grøn kant for betalt/ubetalt-status),
foldet ud til "Markér betalt" (POST /orders/{id}/mark-paid) + ordrens
egen kategori-grupperede vinliste. Ingen backend-ændringer nødvendige
— alt data kommer fra opgave 9's eksisterende GET /orders, al
aggregering sker client-side.

Verificeret i en fuldstændig isoleret sandbox (midlertidig separat
rute) for slet ikke at røre de 308 rigtige deltageres data.

To fund fra brugertest, begge rettet:
1. Beløb blev vist i EUR — vises nu i DKK via rundens eur_dkk_rate
   (falder tilbage til EUR hvis runden ikke har en kurs), samme
   omregningsprincip som den offentlige side/kvitteringsmailen.
2. Vinlisterne manglede kategori-gruppering (kun den samlede liste
   havde det først) og viste antal efter vinnavn i stedet for før —
   begge lister er nu kategori-grupperede med antal først.

Dette afslutter opgave 11 (hele admin-UI'et).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 02:57:55 +02:00
admin-ui Opgave 11c: Ordreoversigt + markér betalt (harmonika-UI) 2026-09-29 02:57:55 +02:00
app Opgave 11b (del 1): frontend-infrastruktur + Deltagere-CRUD 2026-09-29 01:24:40 +02:00
migrations Opgave 10: fortløbende ordrenummer pr. runde + afhentningsliste 2026-09-29 00:21:45 +02:00
scripts Add one-off participant import script for legacy MongoDB data 2026-09-27 19:16:26 +02:00
.env.example Opgave 11a: React admin-scaffold + domænebaseret hosting 2026-09-29 00:41:03 +02:00
.gitignore Opgave 11a: React admin-scaffold + domænebaseret hosting 2026-09-29 00:41:03 +02:00
.python-version Scaffold FastAPI + SQLModel + Alembic project, Postgres-backed 2026-09-27 15:57:44 +02:00
alembic.ini Scaffold FastAPI + SQLModel + Alembic project, Postgres-backed 2026-09-27 15:57:44 +02:00
CLAUDE.md Opgave 11c: Ordreoversigt + markér betalt (harmonika-UI) 2026-09-29 02:57:55 +02:00
pyproject.toml Add Postal webhook receiver for delivery status (task 7c) 2026-09-28 20:50:24 +02:00
README.md Opgave 11a: React admin-scaffold + domænebaseret hosting 2026-09-29 00:41:03 +02:00
uv.lock Add Postal webhook receiver for delivery status (task 7c) 2026-09-28 20:50:24 +02:00

Vinindkøb v2

Admin-backend til fælles vinindkøb (FastAPI + SQLModel + PostgreSQL + Alembic). Se CLAUDE.md for projektplan og datamodel.

Kom i gang

uv sync
cp .env.example .env   # udfyld DATABASE_URL med din egen Postgres-instans
uv run alembic upgrade head
uv run fastapi dev app/main.py

GET /health bekræfter at appen kan nå databasen.

Admin-UI (React)

Serveres af samme app på et dedikeret domæne (ADMIN_DOMAIN, default admin.localhost) — se CLAUDE.md's "Admin-UI-arkitektur". Skal bygges før admin-domænet virker (API'et og den offentlige side kører fint uden):

cd admin-ui
npm install
npm run build   # skriver til ../app/admin_dist

Til udvikling af selve admin-UI'et: npm run dev i admin-ui/ (Vites egen dev-server, proxier API-kald til 127.0.0.1:8001).