# Journal 2026-08-24

## Events nur einmalig (nicht 365 Tage)

**Was:** Einmalige Events (`type=event`) erscheinen nur am konkreten Event-Tag statt über das ganze Jahresfenster.

**Warum:** Tag der Maus u. a. Events wurden wie Serienkurse behandelt (Frontend +365 Tage, Backend ohne Datumsgrenze).

**Änderungen:**
- `Availability::resolveEventDateRange()` / `parseDateFromName()`
- Slot-APIs in `PublicBookingController` und `AppointmentController`
- Admin: Datumspflicht für Events; Wochentag wird aus dem Event-Datum gesetzt
- Migration `Version20260824110000` setzt fehlende `start_date`/`end_date` aus dem Namen

**Deploy:** `php bin/console doctrine:migrations:migrate`, danach `cache:clear`.

---

## Admin: Event-Startdatum beim Bearbeiten

**Was:** Beim Öffnen eines Events im Admin werden Start- und Enddatum im Formular befüllt.

**Warum:** API lieferte nur DB-Felder; Events mit Datum nur im Namen blieben leer. Zusätzlich wurden Datumsfelder vor dem Typ-Wechsel gesetzt.

**Änderungen:**
- `AppointmentController::formatAvailabilityDateRange()` mit `resolveEventDateRange()`-Fallback
- `editAvailability()` in `admin.html.twig`: Typ zuerst, dann Datum; Fallback aus Kursnamen (`TT.MM.JJJJ`)

**Dateien:** `src/Controller/AppointmentController.php`, `templates/appointment/admin.html.twig`

---

## Schwimm-mit-Mobi Buchungsflow Design

**Was:** Schritte 2–5 (Zielgruppe, Kurs, Formular, Bestätigung) visuell an Landingpage angeglichen.

**Warum:** Einheitliches Erlebnis im eingebetteten iFrame, weniger Rot-Vollflächen.

**Dateien:** `public/css/booking-mobi-theme.css`, `_mobi_booking_assets.html.twig`, `_booking_progress.html.twig`, `step2`–`step5`, `public_mobi_landing.html.twig`, `booking-iframe-optimized.css`

---

## Schwimm-mit-Mobi Landingpage `/booking`

**Was:** Neue öffentliche Startseite unter `/booking` mit ausschließlich freigeschalteten Mobi-Standorten; andere Standorte werden nicht mehr angezeigt.

**Warum:** Kunden sollen direkt über Schwimm-mit-Mobi buchen können — analog zur Narwali-Landingpage mit Admin-Steuerung pro Standort.

**Änderungen:**
- `Location`: Feld `showOnSchwimmMitMobi` (+ Migration, bestehende Mobi-Standorte vorselektiert)
- `LocationRepository::findForSchwimmMitMobiLanding()`
- `PublicBookingController::index()` → Template `public_mobi_landing.html.twig`
- Admin Standorte: Checkbox „Anzeigen auf Schwimm-mit-Mobi (/booking)“ + Badge

**Deploy:** `php bin/console doctrine:migrations:migrate` (Version20260824100000), danach `cache:clear`.
