# Journal 2026-08-26

## Fix: Event-Erstellen „Datum erforderlich“ trotz ausgefülltem Feld

**Was:** Beim Anlegen eines einmaligen Events kam „Für Events ist ein Datum erforderlich“, obwohl Startdatum im Formular stand.

**Warum:** Seit der Event-Datumspflicht (24.08.) erwartet die API `startDate`. Die Admin-UI speichert Events aber in `eventStartDate` — `createCourse()` hat dieses Feld nie auf `startDate` gemappt.

**Fix:**
- `templates/admin/courses/index.html.twig`: Create/Update mappen `eventStartDate` → `startDate`; beim Bearbeiten Sichtfeld befüllen
- `AppointmentController`: Fallback `eventStartDate` → `startDate`

**Dateien:** `templates/admin/courses/index.html.twig`, `src/Controller/AppointmentController.php`

---

## Fisch-Admin UI an BZ/Schwimmcontainer angeglichen

**Was:** Alle `/admin/fisch/*`-Seiten nutzen einheitliches Layout (Header mit Breadcrumb, Stats-Karten, Tabellen mit dunklem Kopf, Quick-Actions, Toolbar).

**Warum:** Optisch an Bewegungszentrum und Schwimmcontainer-Admin anbinden.

**Dateien:** `public/css/fisch-admin.css`, `templates/admin/fisch/_fisch_page_header.html.twig`, sämtliche Templates unter `templates/admin/fisch/`.

---

## Grundeinstellungen: ein Speichern-Button + Formular-UI

**Was:** Key-Value-Tabelle mit Speichern pro Zeile ersetzt durch Formular in 3 Karten (Anmeldephase, Altersgruppen, Kurszeitraum) und einem sticky Speichern-Button.

**Dateien:** `FischSettingsController.php`, `templates/admin/fisch/settings/index.html.twig`, `public/css/fisch-admin.css`

---

## Kursübersicht: nach Schwimmbad gruppiert + Filter

**Was:** Flache Gesamttabelle ersetzt durch Stats, Filter (Suche/Alter/Status) und Karten pro Schwimmbad mit kompakten Zeitslots.

**Warum:** Viele Slots (Pool × Zeit × Altersgruppe) waren in einer Tabelle unübersichtlich.

**Dateien:** `FischCourseController.php`, `templates/admin/fisch/courses/index.html.twig`, `public/css/fisch-admin.css`

---

## Fisch-System-Audit + Admin-Kernfunktionen

**Was:** Durchgang Admin/Public; fehlende CRUD/Aktionen nachgezogen.

**Umgesetzt:**
- Standorte anlegen/bearbeiten/aktivieren
- Kurse anlegen, Kapazität ändern, aktivieren/deaktivieren, CSV
- Teilnehmer: Suche, CSV, stornieren, in anderen Kurs verschieben
- Warteliste: in Kurs übernehmen, entfernen, CSV
- Standortkategorien = Altersgruppen A/B (Grenzen editierbar; kein freies Anlegen weiterer Kategorien)

**Noch offen (Phase 5):** Übungsleiter, Anwesenheit, Sammelanmeldung, E-Mail-Vorlagen/Versand, Elternbriefe.

**Dateien:** Controllers unter `src/Controller/Admin/Fisch/`, `FischRegistrationService.php`, Templates `admin/fisch/*`, `fisch-admin.css`

---

## Fix: Einmaliges Event „Enddatum muss nach Startdatum“

**Was:** Beim Anlegen eines einmaligen Events kam fälschlich „Das Enddatum muss nach dem Startdatum liegen.“

**Warum:** Verstecktes `eventEndDate` / `endDate` konnte Altwerte tragen, die vor dem Event-Startdatum lagen. Validierung behandelte Events wie mehrtägige Kurse.

**Fix:** Event-Enddatum serverseitig und im Formular immer = Startdatum; Altwerte beim Wechsel auf Event-Typ leeren.

**Dateien:** `AppointmentController.php`, `templates/admin/courses/index.html.twig`
