Files
Atlas/TOUR-TEST-ANLEITUNG.md
2025-11-12 20:21:32 +01:00

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:
    1. Tour wird in Datenbank erstellt
    2. Buchungen werden der Tour zugewiesen
    3. Routenoptimierung startet automatisch (Google Maps API)
    4. 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?

  1. API-Call: POST /api/tours

    {
      "tourDate": "2025-11-15",
      "driverId": "driver-id-123",
      "bookingIds": ["booking-1", "booking-2", "booking-3"]
    }
    
  2. Routenoptimierung (automatisch):

    // lib/route-optimization.ts
    const routeData = await optimizeRoute(bookings);
    // Nutzt Google Maps Directions API
    
  3. 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:
    1. API-Call zu LexOffice
    2. Kontakt wird erstellt (falls neu)
    3. Angebot wird erstellt
    4. LexOffice ID wird in Booking gespeichert
    5. 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
  • totalDistance wird berechnet
  • estimatedDuration wird 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
  • lexofficeOfferId wird 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>

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:

  1. Eine Tour mit 2-3 Buchungen erstellt haben
  2. Optimierte Route sehen (Distanz + Dauer)
  3. LexOffice Angebot erstellt haben
  4. Route in Google Maps öffnen können

Viel Erfolg beim Testen! 🚀

Falls du Fehler findest, schau in die Server-Logs oder Browser-Console.