6.5 KiB
🧪 Test-Anleitung: Tour-Erstellung mit LexOffice & Routenoptimierung
Datum: 2025-11-12
Ziel: Kompletten Workflow testen (Tour erstellen → LexOffice Angebot → Routenoptimierung)
✅ Vorbereitung
1. Buchungen vorbereiten
Schritt 1: Öffne http://localhost:3001/dashboard/bookings
Schritt 2: Prüfe, welche Buchungen vorhanden sind:
- Du hast bereits 3 Test-Buchungen (Dennis Forte, Vivien Wawer, Elena Herz)
- Status sollte RESERVED sein
Schritt 3: Buchungen auf CONFIRMED setzen (für Tour-Erstellung)
Buchungen müssen Status "CONFIRMED" haben, um einer Tour zugewiesen zu werden.
Manuell in der Datenbank (falls kein UI vorhanden):
UPDATE "Booking" SET status = 'CONFIRMED' WHERE status = 'RESERVED';
Oder über die UI:
- Gehe zu jeder Buchung (Details-Seite)
- Ändere Status auf "Bestätigt" (falls Button vorhanden)
🚀 TEIL 1: Tour erstellen
Schritt 1: Tour-Seite öffnen
http://localhost:3001/dashboard/tours
Schritt 2: "Neue Tour erstellen" Button klicken
- Sollte ein Formular öffnen
Schritt 3: Tour-Daten eingeben
- Datum: Wähle ein zukünftiges Datum (z.B. 2025-11-15)
- Fahrer: Wähle einen Fahrer aus der Liste
- Buchungen: Wähle 2-3 Buchungen aus (nur CONFIRMED Buchungen werden angezeigt)
Schritt 4: Tour speichern
- Klicke auf "Tour erstellen"
- Erwartetes Verhalten:
- Tour wird in Datenbank erstellt
- Buchungen werden der Tour zugewiesen
- Routenoptimierung startet automatisch (Google Maps API)
- Tour erscheint in der Liste
🗺️ TEIL 2: Routenoptimierung prüfen
Nach Tour-Erstellung:
Schritt 1: Klicke auf die neu erstellte Tour (in der Liste)
Schritt 2: Tour-Detail-Seite öffnet sich
- Sollte zeigen:
- ✅ Gebuchte Stops (Adressen)
- ✅ Optimierte Reihenfolge
- ✅ Gesamtdistanz (in km)
- ✅ Geschätzte Fahrzeit (in Minuten)
Schritt 3: Route in Google Maps öffnen
- Button: "Route in Google Maps öffnen" oder ähnlich
- Erwartetes Verhalten:
- Öffnet Google Maps mit allen Stops
- Zeigt optimierte Route
- Fahrer kann Navigation starten
Was passiert im Hintergrund?
-
API-Call:
POST /api/tours{ "tourDate": "2025-11-15", "driverId": "driver-id-123", "bookingIds": ["booking-1", "booking-2", "booking-3"] } -
Routenoptimierung (automatisch):
// lib/route-optimization.ts const routeData = await optimizeRoute(bookings); // Nutzt Google Maps Directions API -
Gespeicherte Daten:
{ "routeOptimized": { "waypoints": [...], "totalDistance": 45.3, "totalDuration": 65 } }
💰 TEIL 3: LexOffice-Integration testen
Option A: Angebot aus Buchung erstellen (Einzeln)
Schritt 1: Gehe zu einer Buchung
http://localhost:3001/dashboard/bookings/[booking-id]
Schritt 2: Finde "LexOffice Angebot erstellen" Button
- Sollte auf der Buchungs-Detail-Seite sein
- Falls nicht vorhanden, siehe "Fix unten"
Schritt 3: Klicke auf "Angebot erstellen"
- Erwartetes Verhalten:
- API-Call zu LexOffice
- Kontakt wird erstellt (falls neu)
- Angebot wird erstellt
- LexOffice ID wird in Booking gespeichert
- Erfolgsmeldung + Link zu LexOffice
Was passiert im Hintergrund:
// API: POST /api/bookings/[id]/create-quotation
const lexoffice = new LexOfficeService();
const contact = await lexoffice.createContactFromBooking(booking);
const quotation = await lexoffice.createQuotationFromBooking(booking, contact.id);
Option B: Sammel-Angebot für Tour
Falls implementiert: Nach Tour-Erstellung könnte ein Sammel-Angebot erstellt werden.
Prüfen: Gibt es einen Button "LexOffice Angebot für Tour" auf der Tour-Detail-Seite?
🧪 Test-Checkliste
✅ Tour-Erstellung
- Tour-Formular öffnet sich
- Fahrer-Liste wird geladen
- Nur CONFIRMED Buchungen werden angezeigt
- Tour wird erfolgreich erstellt
- Tour erscheint in der Liste
✅ Routenoptimierung
- Optimierung startet automatisch
totalDistancewird berechnetestimatedDurationwird berechnet- Optimierte Reihenfolge wird gespeichert
- Kein Google Maps API Error im Log
✅ LexOffice-Integration
- Button "Angebot erstellen" ist vorhanden
- Kontakt wird in LexOffice erstellt
- Angebot wird in LexOffice erstellt
lexofficeOfferIdwird in DB gespeichert- Link zu LexOffice funktioniert
- Kein LexOffice API Error im Log
🐛 Troubleshooting
Problem: Keine Buchungen werden angezeigt
Ursache: Buchungen haben Status RESERVED statt CONFIRMED
Fix:
UPDATE "Booking" SET status = 'CONFIRMED';
Problem: Routenoptimierung schlägt fehl
Ursache: Google Maps API Key fehlt oder ungültig
Prüfen:
# Server-Logs anschauen
# Suche nach: "Route optimization error"
Fix: Prüfe .env:
GOOGLE_MAPS_API_KEY="AIzaSyCFWUJtTgbbeb8LWxa8oGJbCE8xNQXXDQo"
Problem: LexOffice-Integration fehlt Button
Ursache: Button nicht in UI implementiert
Fix: Siehe unten → "LexOffice Button hinzufügen"
📋 Nächste Schritte (falls Buttons fehlen)
1. LexOffice Button auf Buchungs-Detail-Seite
Datei: app/dashboard/bookings/[id]/page.tsx
Hinzufügen:
<button
onClick={async () => {
const res = await fetch(`/api/bookings/${booking.id}/create-quotation`, {
method: 'POST',
});
const data = await res.json();
if (res.ok) {
alert(`Angebot erstellt! ID: ${data.quotation.id}`);
window.open(`https://app.lexoffice.de/quotation/${data.quotation.id}`, '_blank');
} else {
alert(`Fehler: ${data.error}`);
}
}}
className="px-4 py-2 bg-blue-600 text-white rounded-lg"
>
LexOffice Angebot erstellen
</button>
2. Google Maps Link auf Tour-Detail-Seite
Datei: app/dashboard/tours/[id]/page.tsx
Hinzufügen:
<a
href={`https://www.google.com/maps/dir/${
tour.bookings.map(b => `${b.eventAddress},${b.eventCity}`).join('/')
}`}
target="_blank"
className="px-4 py-2 bg-green-600 text-white rounded-lg"
>
Route in Google Maps öffnen
</a>
🎯 Erfolgs-Kriterien
Nach erfolgreichem Test solltest du:
- ✅ Eine Tour mit 2-3 Buchungen erstellt haben
- ✅ Optimierte Route sehen (Distanz + Dauer)
- ✅ LexOffice Angebot erstellt haben
- ✅ Route in Google Maps öffnen können
Viel Erfolg beim Testen! 🚀
Falls du Fehler findest, schau in die Server-Logs oder Browser-Console.