# BewegungsZentrum - E-Mail Workflow & Buchungsprozess

## Übersicht

Das BewegungsZentrum verfügt über einen **mehrstufigen Buchungs- und Zahlungsprozess** mit automatischer E-Mail-Versendung.

---

## Buchungs-Workflow

Der Buchungsprozess besteht aus **drei Phasen**:

### Phase 1: Buchung erstellen (Status: `unter_vorbehalt`)

**Was passiert:**
1. Kunde füllt das Buchungsformular aus und sendet die Buchung ab
2. Buchung wird in der Datenbank gespeichert mit Status `unter_vorbehalt`
3. **Outlook-Event wird sofort erstellt** (um den Termin zu blocken und Doppelbuchungen zu vermeiden)
4. Zwei E-Mails werden asynchron versendet:
   - **An Kunden:** Zahlungsinformation (`event_center_payment_info`)
   - **An Admin:** Benachrichtigung über neue Buchung

**Zahlungsinformations-Email enthält:**
- Buchungsbestätigung unter Vorbehalt
- **Bankdaten** (IBAN, BIC, Empfänger)
- **Verwendungszweck** mit Buchungs-Token
- **Betrag** zur Überweisung
- Hinweis, dass die Buchung nach Zahlungseingang final bestätigt wird

---

### Phase 2: Zahlungsbestätigung durch Admin (Status: `gebucht`)

**Was passiert:**
1. Admin öffnet die Buchungsverwaltung: https://dp-smartsolutions.de/ksbdueren/public/admin/event-center/bookings
2. Admin ändert den Status von `unter_vorbehalt` auf `gebucht` (nachdem Zahlung eingegangen ist)
3. **Outlook-Event bleibt bestehen** (wurde bereits in Phase 1 erstellt), nur der Status wird aktualisiert
4. E-Mail wird an Kunden versendet: Zahlungsbestätigung (`event_center_payment_confirmed`)

**Zahlungsbestätigungs-Email enthält:**
- Bestätigung des Zahlungseingangs
- Finale Buchungsbestätigung
- Alle Event-Details (Datum, Zeit, Ort)
- Wichtige Hinweise zum Event
- Kontaktinformationen

---

### Phase 3: Erinnerung vor dem Event (Optional)

**Was passiert:**
- Kann manuell oder automatisch (Cronjob) versendet werden
- Z.B. 1-2 Tage vor dem Event
- Email-Typ: Erinnerung (`event_center_reminder`)

**Erinnerungs-Email enthält:**
- Erinnerung an das bevorstehende Event
- Datum und Uhrzeit
- Wichtige Hinweise (Sportkleidung, Hallenschuhe, etc.)
- Anreiseinformationen

---

## Template-Typen

### 1. Zahlungsinformation (`event_center_payment_info`)

**Wird versendet:** Direkt nach der Buchung (Status: `unter_vorbehalt`)

**Zweck:**
- Bestätigung der Buchungsanfrage
- Übermittlung der Zahlungsinformationen
- Hinweis auf finale Bestätigung nach Zahlungseingang

**Wichtige Platzhalter:**
- `{empfaenger}` - Zahlungsempfänger (z.B. "Kreissportbund Düren e.V.")
- `{iban}` - IBAN für Überweisung
- `{bic}` - BIC für Überweisung
- `{verwendungszweck}` - Verwendungszweck (inkl. Buchungs-Token)
- `{betrag}` oder `{preis}` - Zu zahlender Betrag

**Beispiel-Betreff:**
```
Ihre Buchung im BewegungsZentrum - Zahlungsinformation ({buchungs_token})
```

**Beispiel-Inhalt:**
```html
<h2>Vielen Dank für Ihre Buchung!</h2>
<p>Ihre Buchung wurde erfolgreich angelegt und steht <strong>unter Vorbehalt</strong> bis zum Zahlungseingang.</p>

<h3>Zahlungsinformationen</h3>
<ul>
    <li><strong>Empfänger:</strong> {empfaenger}</li>
    <li><strong>IBAN:</strong> {iban}</li>
    <li><strong>BIC:</strong> {bic}</li>
    <li><strong>Betrag:</strong> {betrag}</li>
    <li><strong>Verwendungszweck:</strong> {verwendungszweck}</li>
</ul>

<p>Nach Zahlungseingang erhalten Sie eine finale Buchungsbestätigung.</p>

<h3>Ihre Buchungsdetails</h3>
<ul>
    <li><strong>Paket:</strong> {paket_name}</li>
    <li><strong>Datum:</strong> {datum}</li>
    <li><strong>Uhrzeit:</strong> {start_zeit} - {end_zeit} Uhr</li>
    <li><strong>Geburtstagskind:</strong> {kind_vorname} {kind_nachname} ({kind_alter} Jahre)</li>
    <li><strong>Anzahl Kinder:</strong> {anzahl_kinder}</li>
</ul>
```

---

### 2. Zahlungsbestätigung (`event_center_payment_confirmed`)

**Wird versendet:** Wenn Admin Status auf `gebucht` ändert

**Zweck:**
- Bestätigung des Zahlungseingangs
- Finale Buchungsbestätigung
- Alle wichtigen Event-Informationen

**Beispiel-Betreff:**
```
✅ Zahlungsbestätigung - Ihr Event am {datum}
```

**Beispiel-Inhalt:**
```html
<h2>🎉 Ihre Buchung ist bestätigt!</h2>
<p>Vielen Dank! Ihre Zahlung ist bei uns eingegangen und Ihre Buchung ist nun <strong>verbindlich bestätigt</strong>.</p>

<h3>Ihre Event-Details</h3>
<ul>
    <li><strong>Buchungs-Token:</strong> {buchungs_token}</li>
    <li><strong>Paket:</strong> {paket_name}</li>
    <li><strong>Datum:</strong> {datum}</li>
    <li><strong>Uhrzeit:</strong> {start_zeit} - {end_zeit} Uhr</li>
    <li><strong>Dauer:</strong> {dauer}</li>
</ul>

<h3>Wichtige Hinweise</h3>
<ul>
    <li>Bitte erscheinen Sie pünktlich 15 Minuten vor Beginn</li>
    <li>Sportkleidung und Hallenschuhe nicht vergessen</li>
    <li>Snacks und Getränke können mitgebracht werden</li>
</ul>

<p>Wir freuen uns auf Ihren Besuch!</p>
<p>Bei Fragen erreichen Sie uns unter: {admin_email}</p>
```

---

### 3. Erinnerung (`event_center_reminder`)

**Wird versendet:** Optional, vor dem Event

**Zweck:**
- Erinnerung an das bevorstehende Event
- Nochmalige Übermittlung wichtiger Informationen

**Beispiel-Betreff:**
```
🎈 Erinnerung: Ihr Event morgen um {start_zeit} Uhr
```

**Beispiel-Inhalt:**
```html
<h2>Erinnerung: Ihr Event im BewegungsZentrum</h2>
<p>Hallo {eltern_vorname},</p>
<p>wir freuen uns schon auf Ihren Besuch <strong>morgen</strong>!</p>

<h3>Ihre Event-Details</h3>
<ul>
    <li><strong>Datum:</strong> {datum}</li>
    <li><strong>Uhrzeit:</strong> {start_zeit} - {end_zeit} Uhr</li>
    <li><strong>Geburtstagskind:</strong> {kind_vorname} wird {kind_alter} Jahre alt</li>
    <li><strong>Anzahl Kinder:</strong> {anzahl_kinder}</li>
</ul>

<h3>Checkliste</h3>
<ul>
    <li>✅ Sportkleidung eingepackt?</li>
    <li>✅ Hallenschuhe dabei?</li>
    <li>✅ Snacks und Getränke vorbereitet?</li>
</ul>

<p>Bis morgen!</p>
```

---

## Verfügbare Platzhalter

### Buchungsinformationen
- `{buchungs_token}` - Eindeutige Buchungsnummer
- `{paket_name}` - Name des Event-Pakets
- `{dauer}` - Dauer in Minuten
- `{datum}` - Buchungsdatum (Format: TT.MM.JJJJ)
- `{start_zeit}` - Startzeit (Format: HH:MM)
- `{end_zeit}` - Endzeit (Format: HH:MM)
- `{preis}` - Gesamtpreis mit € Symbol (z.B. "89,00 €")
- `{preis_betrag}` - Nur Betrag ohne € (z.B. "89,00")
- `{status}` - Status der Buchung

### Zahlungsinformationen
- `{empfaenger}` - Zahlungsempfänger (Standard: "Kreissportbund Düren e.V.")
- `{iban}` - IBAN für Überweisung
- `{bic}` - BIC für Überweisung
- `{verwendungszweck}` - Verwendungszweck (inkl. Buchungs-Token)
- `{betrag}` - Zu zahlender Betrag mit € Symbol

### Kundendaten (Erziehungsberechtigte)
- `{eltern_name}` - Vollständiger Name (Format: "Nachname, Vorname")
- `{eltern_vorname}` - Vorname
- `{eltern_nachname}` - Nachname
- `{eltern_email}` - E-Mail-Adresse
- `{eltern_telefon}` - Telefonnummer

### Geburtstagskind
- `{kind_name}` - Vollständiger Name (Format: "Nachname, Vorname")
- `{kind_vorname}` - Vorname
- `{kind_nachname}` - Nachname
- `{kind_alter}` - Alter des Geburtstagskindes

### Weitere Informationen
- `{anzahl_kinder}` - Gesamtzahl der Kinder
- `{anmerkungen}` - Besondere Wünsche/Anmerkungen
- `{erstellt_am}` - Erstellungsdatum (Format: TT.MM.JJJJ HH:MM)
- `{admin_email}` - Kontakt-E-Mail

---

## Admin-Anleitung

### Template erstellen

1. Öffnen Sie: https://dp-smartsolutions.de/ksbdueren/public/admin/event-center/email-templates
2. Klicken Sie auf "Neues Template"
3. Wählen Sie den **Email-Typ**:
   - **Zahlungsinformation** = Nach Buchung (mit Bankdaten)
   - **Zahlungsbestätigung** = Nach Admin-Bestätigung
   - **Erinnerung** = Vor dem Event
4. Geben Sie einen Namen und Betreff ein
5. Erstellen Sie den Inhalt mit HTML und Platzhaltern
6. Optional: Weisen Sie das Template einem spezifischen Event-Paket zu
7. Speichern Sie das Template

### Zahlung bestätigen

1. Öffnen Sie: https://dp-smartsolutions.de/ksbdueren/public/admin/event-center/bookings
2. Filtern Sie nach Status "Unter Vorbehalt"
3. Prüfen Sie den Zahlungseingang
4. Klicken Sie auf die Buchung und ändern Sie den Status auf "Gebucht"
5. **Automatisch passiert:**
   - Outlook-Event wird erstellt
   - Zahlungsbestätigungs-Email wird versendet

---

## Technische Details

### Messenger Queue

E-Mails werden asynchron über **Symfony Messenger** versendet:

```bash
# Queue-Status prüfen
php bin/console messenger:stats

# Messages manuell verarbeiten
php bin/console messenger:consume async --limit=10

# Worker starten (im Hintergrund)
php bin/console messenger:consume async -vv &
```

### Email-Logs prüfen

```bash
# Produktions-Logs anzeigen
tail -f var/log/prod.log | grep -i "event center\|email"

# Fehler in der Email-Versendung suchen
grep "Failed to send Event Center email" var/log/prod.log
```

### Status-Übersicht

| Status | Beschreibung | Outlook-Event | Email-Typ |
|--------|--------------|---------------|-----------|
| `unter_vorbehalt` | Nach Buchung, Zahlung ausstehend | ✅ Ja (Termin geblockt) | Zahlungsinformation |
| `gebucht` | Zahlung bestätigt, Buchung final | ✅ Ja (Status aktualisiert) | Zahlungsbestätigung |
| `storniert` | Buchung storniert | ❌ Gelöscht | - |

---

## Best Practices

### Template-Gestaltung

1. **HTML verwenden** für schönes Design
2. **Responsive Design** für mobile Ansicht
3. **Klare Struktur** mit Überschriften
4. **Wichtige Infos hervorheben** (fett, Farbe)
5. **CTA-Buttons** für Aktionen verwenden

### Zahlungsinformations-Email

✅ **Sollte enthalten:**
- Freundliche Bestätigung der Buchung
- Deutlicher Hinweis auf "unter Vorbehalt"
- Alle Zahlungsinformationen übersichtlich
- Verwendungszweck prominent platziert
- Hinweis auf finale Bestätigung
- Kontaktmöglichkeit bei Fragen

❌ **Sollte vermeiden:**
- Zu viele Details über das Event (kommt später)
- Verwirrende Formulierungen
- Fehlende Bankdaten

### Zahlungsbestätigungs-Email

✅ **Sollte enthalten:**
- Freudige Bestätigung
- Alle Event-Details
- Wichtige Hinweise (Pünktlichkeit, Kleidung)
- Anfahrt/Parken
- Kontaktdaten
- Buchungs-Token für Rückfragen

### Erinnerungs-Email

✅ **Sollte enthalten:**
- Kurze, prägnante Informationen
- Checkliste für die Vorbereitung
- Zeitpunkt (z.B. "morgen", "in 2 Tagen")
- Kontakt für Last-Minute-Fragen

---

## Häufige Fragen (FAQ)

**F: Warum wird das Outlook-Event bereits bei "unter_vorbehalt" erstellt?**
A: Um den Termin sofort zu blocken und Doppelbuchungen zu vermeiden. Der Termin bleibt im Kalender bis zur finalen Bestätigung oder Stornierung.

**F: Kann ich eigene Bankdaten hinterlegen?**
A: Ja, im `SendEventCenterEmailMessageHandler.php` unter den Platzhaltern `{empfaenger}`, `{iban}`, `{bic}`.

**F: Wie ändere ich die Bankdaten?**
A: Bearbeiten Sie `src/MessageHandler/SendEventCenterEmailMessageHandler.php`, Zeile ~183:
```php
'{empfaenger}' => 'Ihre Firma',
'{iban}' => 'DE12 3456 7890...',
'{bic}' => 'XXXBDEXXX',
```

**F: Kann ich mehrere Templates pro Typ haben?**
A: Ja! Sie können paket-spezifische Templates erstellen oder ein Standard-Template für alle Pakete.

**F: Wie teste ich ein Template?**
A: Führen Sie eine Test-Buchung durch oder nutzen Sie die Test-Email-Funktion (falls implementiert).

---

## Support

Bei Problemen oder Fragen:
- **Log-Dateien prüfen:** `var/log/prod.log`
- **Messenger-Queue prüfen:** `php bin/console messenger:stats`
- **Email-Konfiguration prüfen:** `.env` (MAILER_DSN, MAILER_FROM, ADMIN_EMAIL)


