# 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