Abo: extern-erledigt für gelöschte Abos + Lieferhistorie-Umzug (Ticket Kunz Mai-Punkte)

- AboExternalCompletionService: Bestellungen gelöschter/ersetzter Abos können
  nachträglich extern erledigt werden (Punkte + Status 8 + Versandstatus);
  das gelöschte Abo wird dabei nicht reaktiviert
- IncentiveTracker::trackSalesVolume: Abo-Zuordnung inkl. gelöschter Abos
  (withTrashed) - nachgebuchte Umsätze bereits getrackter Abos zählen weiter
- Neue Wartungs-Commands: abo:extern-done {shopping_order_id} und
  abo:move-orders {from_abo} {to_abo} (--dry-run, Guards: gleicher Kunde)
- Latent datumsabhängigen Alt-Test in AboExternalCompletionTest repariert
  (Buchung nutzt date(), nicht Carbon::setTestNow)

Fall Kunz (dev/2026-08-12-intensiv-tickets): Dannenhauers gelieferte, aber am
17.06. beim Nachtragen vergessene Mai-Order 53274 → abo:extern-done (+54 P);
Bockhackers Lieferhistorie von gelöschtem Abo 197 → 496 umgehängt (Zähler 4).
Bockhackers 24 P existieren bereits (Juni-Buchung der Mai-Lieferung).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-08-21 12:06:29 +00:00
parent d65922adfe
commit 3f74f76819
8 changed files with 433 additions and 17 deletions

View file

@ -124,6 +124,49 @@ Umsetzung:
Verifiziert auf der Live-Kopie (19.08.): 13 August-Bestellungen geprüft, 12 bereits
gebucht, genau 1 nachgebucht (Order 59900, Jasmin Grund +200 P), Juni/Juli unberührt.
## Nachtrag 2026-08-21: Ticket Kunz Teil 2 – Mai-Punkte & Bockhacker-Lieferzähler
Re-Verifikation mit DHL-Daten ergab ein anderes Bild als die erste Analyse:
- Die Mai-Lieferungen **wurden versandt und zugestellt** (DHL 12.05.), aber nie bezahlt
(`txaction='prev'`). Am 17.06. hat ein Admin zwei Bestellungen per „extern erledigt"
(Status 8) nachgebucht: Bockhackers **Mai**-Order 53619 (24 P) und Dannenhauers
**Juni**-Order 55443 (54 P) – Buchungsmonat jeweils Juni (Systemregel: aktueller Monat).
- **Bockhacker:** Es fehlt nichts – die 24 P der Mai-Lieferung existieren (als Juni
gebucht). Kein Nachtrag, sonst Doppelbuchung.
- **Dannenhauer:** Ihre Mai-Order 53274 (geliefert!) wurde beim Nachtragen am 17.06.
**vergessen** → 54 P fehlten wirklich. Nachgebucht am 21.08. per neuem Command
`abo:extern-done 53274` (Buchung August, keine Retro-Buchung; +54 P auch im Incentive).
Hinweis: Abo 198 ist seit 06.07. gelöscht, Kundin hat kein aktives Abo mehr; die
Orders 54890/55441/55442/57268 wurden laut DHL nie versandt und bleiben offen.
- **Bockhacker Lieferzähler:** Abo 197 (09.04.) wurde am 06.07. gelöscht und durch
Abo 496 ersetzt → Zähler startete bei 0. Per neuem Command `abo:move-orders 197 496`
wurde die Lieferhistorie umgehängt; Abo 496 zählt jetzt **4 ausgeführte Lieferungen**
(09.04., 12.05. [extern erledigt], 10.07., 10.08.). Laut DHL war die Juli-Lieferung
die **3.** (nicht die 4. wie im Ticket) – es gab keine Juni-Sendung an Bockhacker;
die Juni-*Buchung* vom 17.06. gehörte zur Mai-Lieferung.
Code-Änderungen dafür:
- `AboExternalCompletionService`: funktioniert jetzt auch für Bestellungen
gelöschter/ersetzter Abos (Punkte + Status 8 + Versandstatus; das gelöschte Abo wird
**nicht** reaktiviert, kein neuer Zyklus).
- `IncentiveTracker::trackSalesVolume`: Abo-Zuordnung inkl. gelöschter Abos
(`withTrashed`) – nachgebuchte Umsätze bereits getrackter, inzwischen gelöschter
Abos zählen weiter im Incentive.
- Neue Wartungs-Commands: `abo:extern-done {shopping_order_id}` und
`abo:move-orders {from_abo} {to_abo} [--dry-run]` (Guards: gleicher Kunde/Berater).
- Fix eines latent datumsabhängigen Tests in `AboExternalCompletionTest`
(Erwartung nutzte `setTestNow`, Produktion bucht mit `date()`).
**Live-Ausführung nach Deploy:**
```bash
php artisan abo:extern-done 53274 # Dannenhauer Mai-Lieferung: +54 P an Kunz
php artisan abo:move-orders 197 496 # Bockhacker Lieferhistorie → Abo 496
php artisan incentive:calculate 2 # optional sofort (sonst Nacht-Cron 05:00)
```
## Geänderte Dateien
| Datei | Änderung |