Abo: Extern erledigt zaehlt als ausgefuehrte Abo-Lieferung
getCountPaidOrders() zaehlt jetzt bezahlte ODER extern erledigte (Status 8) Bestellungen als ausgefuehrte Lieferung. "Extern erledigt" = Lieferung ausgefuehrt und Punkte vergeben, daher muss der Lieferungs-Zaehler hochgehen (Anzeige "Abo-Lieferungen X / Mindestlaufzeit" sowie canCancelAbo), obwohl paid=false bleibt (Inkasso laeuft ausserhalb des Systems). Der Incentive-Zaehler (qualified_abos via IncentiveTracker::trackAboActivated) lief bereits korrekt; Test ergaenzt diese Absicherung explizit. Tests: getCountPaidOrders 0 -> 1 nach Erledigen, Incentive qualified_abos = 1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6720d99e08
commit
9f996a7f1b
2 changed files with 20 additions and 2 deletions
|
|
@ -220,8 +220,14 @@ class UserAbo extends Model
|
||||||
|
|
||||||
public function getCountPaidOrders()
|
public function getCountPaidOrders()
|
||||||
{
|
{
|
||||||
// sind bezahlte Bestellungen
|
// Ausgefuehrte Abo-Lieferungen: bezahlte sowie extern erledigte (Status 8,
|
||||||
return $this->user_abo_orders->where('status', '>=', 2)->where('paid', true)->count();
|
// abo_extern_done) Bestellungen. Extern erledigt = Lieferung ausgefuehrt und
|
||||||
|
// Punkte vergeben, daher zaehlt sie wie eine bezahlte Lieferung (z. B. fuer die
|
||||||
|
// Mindestlaufzeit), obwohl paid=false bleibt (Inkasso laeuft ausserhalb).
|
||||||
|
return $this->user_abo_orders
|
||||||
|
->where('status', '>=', 2)
|
||||||
|
->filter(fn (UserAboOrder $order) => $order->paid || (int) $order->status === 8)
|
||||||
|
->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setStartDateAttribute($value)
|
public function setStartDateAttribute($value)
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,9 @@ function heldAboSeed(): array
|
||||||
it('markiert eine angehaltene Abo-Bestellung als extern erledigt, schreibt Punkte gut und hebt die Blockade auf', function () {
|
it('markiert eine angehaltene Abo-Bestellung als extern erledigt, schreibt Punkte gut und hebt die Blockade auf', function () {
|
||||||
[$userAbo, $order, $aboOrder, $user] = heldAboSeed();
|
[$userAbo, $order, $aboOrder, $user] = heldAboSeed();
|
||||||
|
|
||||||
|
// Vorher zaehlt die angehaltene Lieferung nicht als ausgefuehrte Lieferung.
|
||||||
|
expect(UserAbo::find($userAbo->id)->getCountPaidOrders())->toBe(0);
|
||||||
|
|
||||||
$result = app(AboExternalCompletionService::class)->complete($order);
|
$result = app(AboExternalCompletionService::class)->complete($order);
|
||||||
|
|
||||||
expect($result['success'])->toBeTrue();
|
expect($result['success'])->toBeTrue();
|
||||||
|
|
@ -133,6 +136,11 @@ it('markiert eine angehaltene Abo-Bestellung als extern erledigt, schreibt Punkt
|
||||||
->and($userAbo->active)->toBeTrue();
|
->and($userAbo->active)->toBeTrue();
|
||||||
expect(\Carbon\Carbon::parse($userAbo->getRawOriginal('next_date'))->isFuture())->toBeTrue();
|
expect(\Carbon\Carbon::parse($userAbo->getRawOriginal('next_date'))->isFuture())->toBeTrue();
|
||||||
|
|
||||||
|
// Abo-Lieferungs-Zaehler beruecksichtigt die extern erledigte Ausfuehrung.
|
||||||
|
$fresh = UserAbo::find($userAbo->id);
|
||||||
|
expect($fresh->getCountPaidOrders())->toBe(1)
|
||||||
|
->and($fresh->getCountOrders())->toBe(1);
|
||||||
|
|
||||||
// Punkte gutgeschrieben - mit heutigem Datum (Markierungsdatum), nicht dem
|
// Punkte gutgeschrieben - mit heutigem Datum (Markierungsdatum), nicht dem
|
||||||
// vergangenen Bestelldatum, damit sie in der laufenden Monatsauswertung landen.
|
// vergangenen Bestelldatum, damit sie in der laufenden Monatsauswertung landen.
|
||||||
$volume = UserSalesVolume::where('shopping_order_id', $order->id)->first();
|
$volume = UserSalesVolume::where('shopping_order_id', $order->id)->first();
|
||||||
|
|
@ -168,6 +176,10 @@ it('trackt Incentive-Punkte mit dem Bestelldatum (Ausfuehrungsmonat), nicht mit
|
||||||
expect($newAbo)->not->toBeNull()
|
expect($newAbo)->not->toBeNull()
|
||||||
->and($newAbo->activated_at->toDateString())->toBe('2026-04-10');
|
->and($newAbo->activated_at->toDateString())->toBe('2026-04-10');
|
||||||
|
|
||||||
|
// Incentive-Zaehler (qualified_abos) des Teilnehmers wurde erhoeht.
|
||||||
|
$participant = \App\Models\IncentiveParticipant::find($newAbo->participant_id);
|
||||||
|
expect((int) $participant->qualified_abos)->toBe(1);
|
||||||
|
|
||||||
// Reguläre Provisionspunkte hingegen mit heutigem Datum (Juni).
|
// Reguläre Provisionspunkte hingegen mit heutigem Datum (Juni).
|
||||||
$volume = UserSalesVolume::where('shopping_order_id', $order->id)->first();
|
$volume = UserSalesVolume::where('shopping_order_id', $order->id)->first();
|
||||||
expect((int) $volume->month)->toBe(6)
|
expect((int) $volume->month)->toBe(6)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue