Files
Atlas/PHASE2-COMPLETE.md
2025-11-12 20:21:32 +01:00

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