7.0 KiB
7.0 KiB
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.tsxcomponents/NewBookingForm.tsxapp/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.tsxcomponents/BookingDetail.tsxapp/api/bookings/[id]/route.tsapp/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.tsxcomponents/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.tsapp/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.tsxapp/dashboard/locations/page.tsxapp/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.tsvercel.jsonCRON-SETUP.md(Dokumentation)
Datenbank-Änderungen
Email-Tabelle
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)
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
- E-Mail-Eingang: Kunde füllt Ninjaforms-Formular auf WordPress-Site aus
- E-Mail-Versand: WordPress sendet E-Mail an
info@fotobox-[standort].de - IMAP-Sync:
- Cron-Job (alle 15 Min.) oder manuelle Auslösung
- Abruf ungelesener E-Mails
- Speicherung in Email-Tabelle
- Parsing:
- Erkennung als Ninjaforms-E-Mail
- Extraktion aller Buchungsdaten
- Standort-Erkennung
- Buchungserstellung:
- Suche nach verfügbarer Fotobox
- Generierung Buchungsnummer
- Erstellung Booking-Record
- Status: RESERVED
- Benachrichtigung:
- Notification für Admins
- Verknüpfung E-Mail ↔ Booking
Nächste Schritte (Phase 3)
Noch zu implementieren:
-
PDF-Vertragsgenerierung
- Template für Mietvertrag
- Automatisches Ausfüllen mit Buchungsdaten
- Download und E-Mail-Versand
-
Lexoffice-Integration
- Angebot erstellen
- Rechnung erstellen
- Zahlungsstatus synchronisieren
-
Driver/Tour-Management
- Tourplanung und Zuweisung
- Navigation für Fahrer
- Routenoptimierung (Zeit & Entfernung)
- Lieferstatus-Updates
-
E-Mail-Versand (SMTP)
- Buchungsbestätigung an Kunde
- Erinnerungen
- Vertrag per E-Mail
-
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
- E-Mail-Sicherheit: Passwörter werden derzeit im Klartext in DB gespeichert → Verschlüsselung empfohlen für Produktion
- Ninjaforms-Varianten: Parser ist flexibel, aber möglicherweise müssen Feldnamen angepasst werden
- Duplicate Detection: Funktioniert nur mit Message-ID (nicht alle Mail-Server setzen diese)
- Error Handling: Bei Parsing-Fehlern wird E-Mail gespeichert, aber keine Buchung erstellt (manuell nachbearbeiten)
Umgebungsvariablen
DATABASE_URL="postgresql://..."
NEXTAUTH_SECRET="..."
NEXTAUTH_URL="http://localhost:3000"
CRON_SECRET="..." # Für automatische Sync
Deployment
- PostgreSQL-Datenbank bereitstellen
- Umgebungsvariablen in Vercel setzen
- Projekt deployen
CRON_SECRETin Vercel Environment Variables- Vercel Cron aktiviert sich automatisch durch
vercel.json - IMAP-Zugangsdaten pro Standort in UI konfigurieren
Status: ✅ Phase 2 abgeschlossen
Datum: 2025-11-11
Nächste Phase: PDF-Vertragsgenerierung & Lexoffice-Integration