# Phase 2: Buchungsverwaltung & E-Mail-Integration - ABGESCHLOSSEN

## Übersicht

Phase 2 erweitert das SaveTheMoment Atlas System um vollständige Buchungsverwaltung und automatische E-Mail-Integration mit Ninjaforms.

## Fertiggestellte Features

### 1. ✅ Manuelle Buchungserstellung
- Formular unter `/dashboard/bookings/new`
- Vollständige Datenerfassung (Kunde, Event, Preise, Optionen)
- Automatische Buchungsnummer-Generierung (`STM-YYMM-XXXX`)
- Verfügbarkeitsprüfung für Fotoboxen
- Unterscheidung zwischen Privat- und Firmenrechnung

**Dateien:**
- `app/dashboard/bookings/new/page.tsx`
- `components/NewBookingForm.tsx`
- `app/api/bookings/create/route.ts`

### 2. ✅ Buchungsdetails & Statusverwaltung
- Detailansicht unter `/dashboard/bookings/[id]`
- Status-Änderungen (Reserviert → Bestätigt → Abgeschlossen)
- Inline-Bearbeitung von Kundendaten
- Anzeige zugewiesener Fotobox
- E-Mail-Verlauf
- Vertragsinfo

**Dateien:**
- `app/dashboard/bookings/[id]/page.tsx`
- `components/BookingDetail.tsx`
- `app/api/bookings/[id]/route.ts`
- `app/api/bookings/[id]/status/route.ts`

### 3. ✅ Buchungsübersicht
- Tabelle mit Filterung (Status, Standort, Suche)
- Statistik-Dashboard (Gesamt, Reserviert, Bestätigt, Abgeschlossen)
- Links zu Detail- und Bearbeitungsseiten
- Farbcodierte Status-Badges

**Dateien:**
- `app/dashboard/bookings/page.tsx`
- `components/BookingsTable.tsx`

### 4. ✅ E-Mail-Parser für Ninjaforms
- Flexibles Parsing für alle 5 Standorte
- Extraktion aller Buchungsdaten aus E-Mails
- HTML und Text-Format Unterstützung
- Automatische Standort-Erkennung
- Modell-Mapping (Vintage SMILE, FOTO, Nostalgie, Magic Mirror)

**Dateien:**
- `lib/email-parser.ts`

### 5. ✅ IMAP E-Mail-Synchronisation
- Abruf ungelesener E-Mails (letzte 30 Tage)
- Speicherung in Email-Tabelle
- Duplikat-Erkennung via Message-ID
- Automatische Buchungserstellung aus geparsten E-Mails
- Benachrichtigungen für neue Buchungen

**Dateien:**
- `lib/email-sync.ts`
- `app/api/email-sync/route.ts`

### 6. ✅ E-Mail-Konfiguration pro Standort
- IMAP-Einstellungen (Server, Port, Benutzer, Passwort, SSL/TLS)
- SMTP-Einstellungen (für zukünftige Nutzung)
- Aktivierung/Deaktivierung pro Standort
- Timestamp des letzten Syncs

**Dateien:**
- `components/LocationsManager.tsx`
- `app/dashboard/locations/page.tsx`
- `app/api/locations/[id]/email-settings/route.ts`

### 7. ✅ Manuelle Sync-Funktion
- Button "E-Mails abrufen" in Standortverwaltung
- Zeigt Anzahl neuer E-Mails und Buchungen
- Spinner-Animation während Sync
- Nur sichtbar für aktivierte Standorte

**Dateien:**
- `components/LocationsManager.tsx` (erweitert)

### 8. ✅ Automatische E-Mail-Synchronisation (Cron)
- API-Endpoint `/api/cron/email-sync`
- Authentifizierung via Bearer Token
- Synchronisiert alle aktiven Standorte
- Detaillierte Statistiken und Fehlerprotokoll
- Vercel Cron Integration

**Dateien:**
- `app/api/cron/email-sync/route.ts`
- `vercel.json`
- `CRON-SETUP.md` (Dokumentation)

## Datenbank-Änderungen

### Email-Tabelle
```prisma
model Email {
  id          String    @id @default(cuid())
  locationSlug String
  from        String
  to          String
  subject     String
  textBody    String    @db.Text
  htmlBody    String?   @db.Text
  messageId   String?   @unique
  inReplyTo   String?
  bookingId   String?
  booking     Booking?  @relation(fields: [bookingId], references: [id])
  parsed      Boolean   @default(false)
  parsedData  Json?
  direction   String    @default("INBOUND")
  receivedAt  DateTime
  createdAt   DateTime  @default(now())
  
  @@index([locationSlug])
  @@index([bookingId])
  @@index([receivedAt])
}
```

### Location-Tabelle (erweitert)
```prisma
model Location {
  // ... existing fields
  
  // E-Mail-Konfiguration
  imapHost        String?
  imapPort        Int?
  imapUser        String?
  imapPassword    String?
  imapSecure      Boolean   @default(true)
  
  smtpHost        String?
  smtpPort        Int?
  smtpUser        String?
  smtpPassword    String?
  smtpSecure      Boolean   @default(true)
  
  emailSyncEnabled Boolean  @default(false)
  lastEmailSync   DateTime?
}
```

## Workflow: E-Mail zu Buchung

1. **E-Mail-Eingang:** Kunde füllt Ninjaforms-Formular auf WordPress-Site aus
2. **E-Mail-Versand:** WordPress sendet E-Mail an `info@fotobox-[standort].de`
3. **IMAP-Sync:** 
   - Cron-Job (alle 15 Min.) oder manuelle Auslösung
   - Abruf ungelesener E-Mails
   - Speicherung in Email-Tabelle
4. **Parsing:** 
   - Erkennung als Ninjaforms-E-Mail
   - Extraktion aller Buchungsdaten
   - Standort-Erkennung
5. **Buchungserstellung:**
   - Suche nach verfügbarer Fotobox
   - Generierung Buchungsnummer
   - Erstellung Booking-Record
   - Status: RESERVED
6. **Benachrichtigung:**
   - Notification für Admins
   - Verknüpfung E-Mail ↔ Booking

## Nächste Schritte (Phase 3)

### Noch zu implementieren:

1. **PDF-Vertragsgenerierung**
   - Template für Mietvertrag
   - Automatisches Ausfüllen mit Buchungsdaten
   - Download und E-Mail-Versand

2. **Lexoffice-Integration**
   - Angebot erstellen
   - Rechnung erstellen
   - Zahlungsstatus synchronisieren

3. **Driver/Tour-Management**
   - Tourplanung und Zuweisung
   - Navigation für Fahrer
   - Routenoptimierung (Zeit & Entfernung)
   - Lieferstatus-Updates

4. **E-Mail-Versand (SMTP)**
   - Buchungsbestätigung an Kunde
   - Erinnerungen
   - Vertrag per E-Mail

5. **Dashboard-Erweiterungen**
   - Kalenderansicht
   - Auslastungsstatistik
   - Umsatzreports

## Testing-Checkliste

Bevor IMAP-Zugangsdaten konfiguriert werden:

- [ ] Lokale Entwicklungsumgebung läuft
- [ ] Datenbank migriert und gefüllt
- [ ] Alle Standorte in DB vorhanden
- [ ] Manual Booking Creation funktioniert
- [ ] Booking Detail View funktioniert
- [ ] Status Changes funktionieren
- [ ] Bookings Table mit Filtern funktioniert

Nach IMAP-Konfiguration:

- [ ] E-Mail-Einstellungen speichern
- [ ] Manueller Sync-Button testen
- [ ] Erste echte E-Mail abrufen
- [ ] Parsing prüfen (parsedData in Email-Tabelle)
- [ ] Booking-Erstellung prüfen
- [ ] Notification prüfen
- [ ] Cron-Endpoint testen

## Bekannte Einschränkungen

1. **E-Mail-Sicherheit:** Passwörter werden derzeit im Klartext in DB gespeichert → Verschlüsselung empfohlen für Produktion
2. **Ninjaforms-Varianten:** Parser ist flexibel, aber möglicherweise müssen Feldnamen angepasst werden
3. **Duplicate Detection:** Funktioniert nur mit Message-ID (nicht alle Mail-Server setzen diese)
4. **Error Handling:** Bei Parsing-Fehlern wird E-Mail gespeichert, aber keine Buchung erstellt (manuell nachbearbeiten)

## Umgebungsvariablen

```env
DATABASE_URL="postgresql://..."
NEXTAUTH_SECRET="..."
NEXTAUTH_URL="http://localhost:3000"
CRON_SECRET="..." # Für automatische Sync
```

## Deployment

1. PostgreSQL-Datenbank bereitstellen
2. Umgebungsvariablen in Vercel setzen
3. Projekt deployen
4. `CRON_SECRET` in Vercel Environment Variables
5. Vercel Cron aktiviert sich automatisch durch `vercel.json`
6. IMAP-Zugangsdaten pro Standort in UI konfigurieren

---

**Status:** ✅ Phase 2 abgeschlossen  
**Datum:** 2025-11-11  
**Nächste Phase:** PDF-Vertragsgenerierung & Lexoffice-Integration
