252 lines
7.0 KiB
Markdown
252 lines
7.0 KiB
Markdown
# 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
|