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