269 lines
6.5 KiB
Markdown
269 lines
6.5 KiB
Markdown
# 🧪 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):
|
|
```sql
|
|
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`
|
|
```json
|
|
{
|
|
"tourDate": "2025-11-15",
|
|
"driverId": "driver-id-123",
|
|
"bookingIds": ["booking-1", "booking-2", "booking-3"]
|
|
}
|
|
```
|
|
|
|
2. **Routenoptimierung** (automatisch):
|
|
```javascript
|
|
// lib/route-optimization.ts
|
|
const routeData = await optimizeRoute(bookings);
|
|
// Nutzt Google Maps Directions API
|
|
```
|
|
|
|
3. **Gespeicherte Daten**:
|
|
```json
|
|
{
|
|
"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**:
|
|
```javascript
|
|
// 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**:
|
|
```sql
|
|
UPDATE "Booking" SET status = 'CONFIRMED';
|
|
```
|
|
|
|
### Problem: Routenoptimierung schlägt fehl
|
|
|
|
**Ursache**: Google Maps API Key fehlt oder ungültig
|
|
|
|
**Prüfen**:
|
|
```bash
|
|
# Server-Logs anschauen
|
|
# Suche nach: "Route optimization error"
|
|
```
|
|
|
|
**Fix**: Prüfe `.env`:
|
|
```bash
|
|
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**:
|
|
```tsx
|
|
<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**:
|
|
```tsx
|
|
<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.
|