- 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>
45 lines
1.4 KiB
PHP
45 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\ShoppingOrder;
|
|
use App\Services\AboExternalCompletionService;
|
|
use Illuminate\Console\Command;
|
|
|
|
/**
|
|
* Wartungs-Command: eine angehaltene Abo-Bestellung als "extern erledigt" markieren
|
|
* (Punkte gutschreiben, Lieferung zaehlt, Bestellung bleibt unbezahlt).
|
|
*
|
|
* Entspricht dem Admin-Button "extern erledigt", funktioniert aber auch fuer
|
|
* Bestellungen geloeschter/ersetzter Abos, die im UI nicht mehr erreichbar sind.
|
|
*/
|
|
class AboExternDoneOrder extends Command
|
|
{
|
|
protected $signature = 'abo:extern-done {shopping_order_id : ID der Abo-Bestellung}';
|
|
|
|
protected $description = 'Angehaltene Abo-Bestellung als extern erledigt markieren (Punkte + Lieferzähler, auch bei gelöschtem Abo)';
|
|
|
|
public function handle(AboExternalCompletionService $service): int
|
|
{
|
|
$order = ShoppingOrder::find($this->argument('shopping_order_id'));
|
|
|
|
if (! $order) {
|
|
$this->error('Bestellung nicht gefunden.');
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$result = $service->complete($order);
|
|
|
|
if (! $result['success']) {
|
|
$this->error($result['message']);
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$this->info("Bestellung {$order->id} extern erledigt: {$result['message']}");
|
|
$this->info("Punkte: {$order->points} | Netto: {$order->subtotal} | Berater: ".($order->member_id ?? $order->auth_user_id));
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|