23-01-2026
This commit is contained in:
parent
a939cd51ef
commit
a8b395e20d
248 changed files with 29342 additions and 4805 deletions
295
dev/22-01-2026/dhl-tracking-emails.md
Normal file
295
dev/22-01-2026/dhl-tracking-emails.md
Normal file
|
|
@ -0,0 +1,295 @@
|
|||
# DHL Tracking E-Mails - Erweiterte Funktionen
|
||||
|
||||
## 📧 Mehrere Sendungen in einer E-Mail
|
||||
|
||||
### Problem gelöst:
|
||||
Wenn eine Bestellung in **mehrere Pakete** aufgeteilt wird, erhalten Kunden jetzt **eine gesammelte E-Mail** mit allen Tracking-Nummern, statt mehrere einzelne E-Mails.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Neue Features
|
||||
|
||||
### 1. **Automatische Zusammenfassung**
|
||||
Alle Sendungen einer Bestellung werden automatisch in einer E-Mail zusammengefasst:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Deine 3 Sendungen sind unterwegs! │
|
||||
├─────────────────────────────────────┤
|
||||
│ │
|
||||
│ Paket 1 │
|
||||
│ Sendungsnummer: 00340433333... │
|
||||
│ [Sendung bei DHL verfolgen] │
|
||||
│ │
|
||||
│ Paket 2 │
|
||||
│ Sendungsnummer: 00340433334... │
|
||||
│ [Sendung bei DHL verfolgen] │
|
||||
│ │
|
||||
│ Paket 3 │
|
||||
│ Sendungsnummer: 00340433335... │
|
||||
│ [Sendung bei DHL verfolgen] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2. **Intelligente Versand-Logik**
|
||||
- ✅ Sammelt alle Sendungen einer Bestellung
|
||||
- ✅ Versendet eine E-Mail pro Bestellung (nicht pro Paket)
|
||||
- ✅ Markiert alle Sendungen als versendet
|
||||
- ✅ Verhindert doppelte E-Mails
|
||||
|
||||
### 3. **Manuelle Versand-Option**
|
||||
Im Admin unter **DHL Cockpit** oder **Bestelldetails**:
|
||||
- Button "Tracking-E-Mail senden" klicken
|
||||
- Sendet automatisch **alle** Sendungen der Bestellung
|
||||
- Zeigt Anzahl der Sendungen in der Bestätigung
|
||||
|
||||
### 4. **Test-Modus für Cronjob**
|
||||
Testen Sie E-Mails, bevor sie an Kunden gehen!
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Verwendung
|
||||
|
||||
### Manuelle E-Mail versenden (Admin)
|
||||
|
||||
#### Option 1: Aus Bestelldetails
|
||||
1. Bestellung öffnen
|
||||
2. DHL Sendungen-Block scrollen
|
||||
3. Button "📧" klicken
|
||||
4. Alle Sendungen dieser Bestellung werden versendet
|
||||
|
||||
#### Option 2: Aus DHL Cockpit
|
||||
1. DHL Cockpit öffnen
|
||||
2. Sendung finden
|
||||
3. Button "📧" klicken
|
||||
4. Alle Sendungen dieser Bestellung werden versendet
|
||||
|
||||
### Automatischer Cronjob
|
||||
|
||||
#### Standard (täglich 06:00 Uhr)
|
||||
```bash
|
||||
# Läuft automatisch via Cron
|
||||
# Definiert in: app/Console/Kernel.php
|
||||
```
|
||||
|
||||
#### Manuell ausführen
|
||||
```bash
|
||||
# Normale Ausführung
|
||||
php artisan dhl:update-tracking --send-emails
|
||||
|
||||
# Mit Test-E-Mail
|
||||
php artisan dhl:update-tracking --send-emails --test-email=admin@example.com
|
||||
|
||||
# Für bestimmte Bestellung
|
||||
php artisan dhl:update-tracking --send-emails --order=45078
|
||||
|
||||
# Dry-Run (keine Änderungen)
|
||||
php artisan dhl:update-tracking --send-emails --dry-run
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Test-Optionen
|
||||
|
||||
### Option 1: Test-E-Mail an eigene Adresse
|
||||
```bash
|
||||
php artisan dhl:update-tracking --send-emails --test-email=meine@email.de
|
||||
```
|
||||
✅ Sendet E-Mails an angegebene Adresse statt an Kunden
|
||||
✅ Perfekt zum Testen des Layouts und Inhalts
|
||||
✅ Markiert Sendungen TROTZDEM als versendet
|
||||
|
||||
### Option 2: Dry-Run (Simulation)
|
||||
```bash
|
||||
php artisan dhl:update-tracking --send-emails --dry-run
|
||||
```
|
||||
✅ Simuliert alle Aktionen
|
||||
✅ Sendet KEINE E-Mails
|
||||
✅ Markiert Sendungen NICHT als versendet
|
||||
✅ Zeigt was passieren würde
|
||||
|
||||
### Option 3: Bestimmte Bestellung testen
|
||||
```bash
|
||||
php artisan dhl:update-tracking --send-emails --order=45078 --test-email=test@example.com
|
||||
```
|
||||
✅ Nur für eine Order-ID
|
||||
✅ An Test-Adresse
|
||||
✅ Perfekt für gezielte Tests
|
||||
|
||||
---
|
||||
|
||||
## 📊 Versand-Status in Bestelldetails
|
||||
|
||||
### Anzeige
|
||||
Für jede Sendung wird angezeigt:
|
||||
|
||||
| Sendung | Status | Tracking | **E-Mail** | Aktionen |
|
||||
|---------|--------|----------|------------|----------|
|
||||
| #11 | created | - | ✅ 23.01.2026<br>🤖 Automatisch | 👁️ 📥 📧 |
|
||||
| #12 | in_transit | ... | ✅ 23.01.2026<br>👤 Manuell | 👁️ 📥 🔄 📧 |
|
||||
| #13 | created | - | ⏳ Nicht gesendet | 👁️ 📥 📧 |
|
||||
|
||||
### Informationen
|
||||
- **✅ Datum**: Wann wurde E-Mail versendet
|
||||
- **🤖 Automatisch**: Via Cronjob versendet
|
||||
- **👤 Manuell**: Über Admin-Button versendet
|
||||
- **⏳ Nicht gesendet**: Noch keine E-Mail
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Technische Details
|
||||
|
||||
### Datenbank-Felder
|
||||
```sql
|
||||
-- dhl_package_shipments Tabelle
|
||||
tracking_email_sent_at TIMESTAMP NULL -- Wann versendet
|
||||
tracking_email_type VARCHAR(20) -- 'auto' oder 'manual'
|
||||
```
|
||||
|
||||
### Mail-Klasse
|
||||
```php
|
||||
// Unterstützt jetzt Collection von Shipments
|
||||
new MailDhlTracking($shipments, $order)
|
||||
|
||||
// Oder einzelne Sendung (backward compatible)
|
||||
new MailDhlTracking($shipment, $order)
|
||||
```
|
||||
|
||||
### Logik
|
||||
```php
|
||||
// Sammelt alle Sendungen einer Bestellung
|
||||
$allShipments = DhlShipment::where('order_id', $order->id)
|
||||
->whereNotNull('dhl_shipment_no')
|
||||
->whereIn('status', ['created', 'in_transit', 'out_for_delivery'])
|
||||
->get();
|
||||
|
||||
// Sendet eine E-Mail mit allen Sendungen
|
||||
Mail::to($email)->send(new MailDhlTracking($allShipments, $order));
|
||||
|
||||
// Markiert alle als versendet
|
||||
foreach ($allShipments as $shipment) {
|
||||
$shipment->markTrackingEmailSent('manual');
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Anwendungsfälle
|
||||
|
||||
### Fall 1: Mehrere Pakete bei Erstellung
|
||||
```
|
||||
1. Admin erstellt 3 Labels für Order #45078
|
||||
2. Alle 3 Labels werden erstellt (Status: created)
|
||||
3. Cronjob läuft (06:00 Uhr)
|
||||
4. Status wird aktualisiert (created → in_transit)
|
||||
5. EINE E-Mail mit allen 3 Sendungen wird versendet
|
||||
```
|
||||
|
||||
### Fall 2: Nachträgliches Label
|
||||
```
|
||||
1. Order #45078 hat bereits 2 Labels (E-Mail bereits versendet)
|
||||
2. Admin erstellt 3. Label
|
||||
3. Admin klickt "📧" Button
|
||||
4. NEUE E-Mail mit allen 3 Sendungen wird versendet
|
||||
```
|
||||
|
||||
### Fall 3: Test vor Produktiv-Einsatz
|
||||
```bash
|
||||
# 1. Test mit eigener E-Mail
|
||||
php artisan dhl:update-tracking --send-emails --test-email=admin@firma.de
|
||||
|
||||
# 2. Prüfen der E-Mail
|
||||
# 3. Bei OK: Cronjob aktivieren (läuft automatisch)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Konfiguration
|
||||
|
||||
### Cronjob-Einstellung
|
||||
```php
|
||||
// app/Console/Kernel.php
|
||||
$schedule->command('dhl:update-tracking --days=14 --send-emails')
|
||||
->dailyAt('06:00')
|
||||
->withoutOverlapping()
|
||||
->runInBackground();
|
||||
```
|
||||
|
||||
### Anpassungen
|
||||
```php
|
||||
// Andere Uhrzeit
|
||||
->dailyAt('08:00')
|
||||
|
||||
// Nur Werktage
|
||||
->weekdays()->at('06:00')
|
||||
|
||||
// Nur wenn Sendungen vorhanden
|
||||
->when(function() {
|
||||
return DhlShipment::active()->count() > 0;
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Übersetzungen
|
||||
|
||||
Neue Übersetzungs-Keys in `resources/lang/{de,en,es}/email.php`:
|
||||
|
||||
```php
|
||||
'dhl_tracking_subject_multiple' => 'Deine :count Sendungen sind unterwegs'
|
||||
'dhl_tracking_message_multiple' => 'Deine Bestellung wurde in :count Paketen versendet'
|
||||
'dhl_tracking_package_label' => 'Paket :number'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Vorteile
|
||||
|
||||
| Vorher | Nachher |
|
||||
|--------|---------|
|
||||
| 3 Pakete = 3 E-Mails | 3 Pakete = 1 E-Mail |
|
||||
| Kunde verwirrt | Kunde hat Überblick |
|
||||
| Einzelne Tracking-Nummern | Alle Nummern auf einen Blick |
|
||||
| Manuell testen schwierig | Test-Modus integriert |
|
||||
| Kein Überblick über Versand | Klare Anzeige in Admin |
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Problem: E-Mail wird nicht versendet
|
||||
```bash
|
||||
# Prüfen ob Sendungen vorhanden
|
||||
php artisan tinker
|
||||
>>> Acme\Dhl\Models\DhlShipment::active()->count()
|
||||
|
||||
# Prüfen ob E-Mail-Adresse vorhanden
|
||||
>>> $order = App\Models\ShoppingOrder::find(45078);
|
||||
>>> $order->shopping_user->email
|
||||
```
|
||||
|
||||
### Problem: Mehrfache E-Mails
|
||||
```bash
|
||||
# Prüfen welche Sendungen noch keine E-Mail haben
|
||||
php artisan tinker
|
||||
>>> Acme\Dhl\Models\DhlShipment::whereNull('tracking_email_sent_at')->count()
|
||||
```
|
||||
|
||||
### Problem: Test-E-Mail kommt nicht an
|
||||
```bash
|
||||
# Queue prüfen
|
||||
php artisan queue:work --once
|
||||
|
||||
# Logs prüfen
|
||||
tail -f storage/logs/laravel.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Bei Fragen zur Implementierung siehe:
|
||||
- `/dev/22-01-2026/next-steps.md` - Vollständige Dokumentation
|
||||
- `app/Console/Commands/DhlUpdateTracking.php` - Command-Code
|
||||
- `app/Mail/MailDhlTracking.php` - Mail-Klasse
|
||||
- `resources/views/emails/dhl_tracking.blade.php` - E-Mail Template
|
||||
Loading…
Add table
Add a link
Reference in a new issue