Initial commit - SaveTheMoment Atlas Basis-Setup
This commit is contained in:
251
PHASE2-COMPLETE.md
Normal file
251
PHASE2-COMPLETE.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user