Firstlines: Seite und Dashboard-Kachel zaehlen wieder dieselbe Menge
Beim Formulieren der Kundenrueckmeldung aufgefallen: der vorige Commit hat die Inkonsistenz an einer Stelle behoben und an einer anderen wieder eingebaut. Die Kachel zaehlt ueber isActiveConsultant() (Mitgliedsebene + gesetztes Abrechnungskonto), die Kopfzeile der Firstlines-Seite zaehlte aber ueber isActiveAccount() (Konto in der Zukunft). Bei abgelaufenen Jahresgebuehren nannten Kachel und Seite damit unterschiedliche Zahlen - genau das, was der Fix vermeiden sollte. firstlines() bekommt den BackofficeDashboardService injiziert und nutzt dieselbe Regel. Test um beide Randfaelle erweitert (abgelaufenes vs. gar kein Abrechnungskonto), damit die Doppel-Definition nicht zurueckkommt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
640a05945b
commit
98a1dbc0cd
6 changed files with 168 additions and 11 deletions
|
|
@ -185,4 +185,13 @@ it('ordnet akkumulierte Abo-Punkte dem Neuabo ueber user_abo_id zu (Replikat-Sho
|
|||
expect($aboRow)->not->toBeNull()
|
||||
->and($aboRow['id'])->toBe($newAbo->id)
|
||||
->and(array_sum($aboRow['monthly']))->toBe(42);
|
||||
|
||||
// Aktives Abo: Label ist die Kunden-E-Mail
|
||||
expect($aboRow['label'])->toBe($userAbo->email);
|
||||
|
||||
// Geloeschtes (ersetztes) Abo: "Abo #<id> (<E-Mail>)", damit die Kundin erkennbar bleibt
|
||||
$userAbo->delete();
|
||||
$dataDeleted = IncentiveController::buildParticipantDetailData($participant->fresh(['incentive', 'user']));
|
||||
expect($dataDeleted['abo_sources']->first()['label'])
|
||||
->toBe('Abo #'.$userAbo->id.' ('.$userAbo->email.')');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
use App\Http\Controllers\User\TeamController;
|
||||
use App\Models\UserAccount;
|
||||
use App\Models\UserSalesVolume;
|
||||
use App\Services\Backoffice\BackofficeDashboardService;
|
||||
use App\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Request;
|
||||
|
|
@ -39,10 +40,15 @@ it('listet die Firstlines mit Monats-Gesamtpunkten sortiert und laesst Tiefere a
|
|||
$ben = tflMakeUser($root->id, ['first_name' => 'Ben', 'last_name' => 'Beta']);
|
||||
tflMakeUser($anna->id); // Ebene 2: keine Firstline
|
||||
|
||||
// Abgelaufenes Abrechnungskonto: bleibt in der Liste (Nachfassen), zaehlt
|
||||
// aber nicht als aktiver Berater - die Dashboard-Kachel zeigt nur diese.
|
||||
$inaktiv = tflMakeUser($root->id, ['first_name' => 'Ina', 'last_name' => 'Inaktiv']);
|
||||
$inaktiv->forceFill(['payment_account' => now()->subMonth()])->save();
|
||||
// Abgelaufenes, aber gesetztes Abrechnungskonto: bleibt in der Liste (Nachfassen)
|
||||
// UND zaehlt als Berater - dieselbe Regel wie die Dashboard-Kachel
|
||||
// (isActiveConsultant), nicht isActiveAccount.
|
||||
$abgelaufen = tflMakeUser($root->id, ['first_name' => 'Ina', 'last_name' => 'Inaktiv']);
|
||||
$abgelaufen->forceFill(['payment_account' => now()->subMonth()])->save();
|
||||
|
||||
// Ohne Abrechnungskonto: kein Berater
|
||||
$ohneKonto = tflMakeUser($root->id, ['first_name' => 'Ohne', 'last_name' => 'Konto']);
|
||||
$ohneKonto->forceFill(['payment_account' => null])->save();
|
||||
|
||||
// Eigene (Status 1) + Kundenpunkte (Status 2) zaehlen zusammen
|
||||
UserSalesVolume::forceCreate(['user_id' => $anna->id, 'month' => 6, 'year' => 2026, 'points' => 100, 'status' => 1]);
|
||||
|
|
@ -54,11 +60,11 @@ it('listet die Firstlines mit Monats-Gesamtpunkten sortiert und laesst Tiefere a
|
|||
Request::merge(['month' => 6, 'year' => 2026]);
|
||||
Request::instance()->setLaravelSession(app('session')->driver());
|
||||
|
||||
$view = app(TeamController::class)->firstlines();
|
||||
$view = app(TeamController::class)->firstlines(app(BackofficeDashboardService::class));
|
||||
$rows = $view->getData()['rows'];
|
||||
|
||||
expect($rows)->toHaveCount(3)
|
||||
->and($view->getData()['activeCount'])->toBe(2) // Kachel-Zahl: nur aktive Berater
|
||||
expect($rows)->toHaveCount(4)
|
||||
->and($view->getData()['activeCount'])->toBe(3) // Kachel-Zahl: nur aktive Berater
|
||||
->and($rows[0]['user_id'])->toBe($ben->id) // 400 Punkte zuerst
|
||||
->and($rows[0]['total_points'])->toBe(400.0)
|
||||
->and($rows[1]['user_id'])->toBe($anna->id)
|
||||
|
|
@ -80,7 +86,7 @@ it('zeigt eine leere Firstlines-Liste ohne direkte Teampartner', function (): vo
|
|||
$this->actingAs($root);
|
||||
Request::instance()->setLaravelSession(app('session')->driver());
|
||||
|
||||
$view = app(TeamController::class)->firstlines();
|
||||
$view = app(TeamController::class)->firstlines(app(BackofficeDashboardService::class));
|
||||
|
||||
expect($view->getData()['rows'])->toBe([])
|
||||
->and($view->render())->toContain(e(__('team.firstlines_none')));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue