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:
Kevin 2026-08-25 10:47:50 +00:00
parent cee4a2e0eb
commit 8dc0361fec
6 changed files with 168 additions and 11 deletions

View file

@ -8,6 +8,7 @@ use App\Models\IncentiveNewAbo;
use App\Models\IncentiveNewPartner;
use App\Models\IncentiveParticipant;
use App\Models\IncentivePointsLog;
use App\Models\UserAbo;
use App\Models\UserAboOrder;
use App\Models\UserSalesVolume;
use App\Services\Incentive\IncentiveCalculationService;
@ -362,7 +363,14 @@ class IncentiveController extends Controller
]);
}
$label = $na->userAbo?->email ?: ('Abo #'.$na->user_abo_id);
// Geloeschte (ersetzte) Abos: E-Mail in Klammern anzeigen, damit
// erkennbar bleibt, zu welcher Kundin das Abo gehoerte.
$labelAbo = $na->userAbo ?? UserAbo::withTrashed()->find($na->user_abo_id);
if ($labelAbo && $labelAbo->trashed()) {
$label = 'Abo #'.$na->user_abo_id.($labelAbo->email ? ' ('.$labelAbo->email.')' : '');
} else {
$label = $labelAbo?->email ?: ('Abo #'.$na->user_abo_id);
}
return [
'id' => $na->id,

View file

@ -12,6 +12,7 @@ use App\Services\Abo\PaylineForecastService;
use App\Services\Abo\TeamAboOverviewService;
use App\Services\AboHelper;
use App\Services\AboOrderCart;
use App\Services\Backoffice\BackofficeDashboardService;
use App\Services\Backoffice\SalesVolumePoints;
use App\Services\BusinessPlan\ExportBot;
use App\Services\BusinessPlan\TreeCalcBot;
@ -716,7 +717,7 @@ class TeamController extends Controller
* mit Monats-Gesamtpunkten und Kontaktdaten — für alle Berater, verlinkt
* von der Firstlines-Kachel der Monatsstatistik.
*/
public function firstlines(): View
public function firstlines(BackofficeDashboardService $dashboardService): View
{
$user = User::find(\Auth::user()->id);
$month = max(1, min(12, (int) Request::get('month', now()->month)));
@ -752,7 +753,11 @@ class TeamController extends Controller
'rows' => $rows,
// Die Dashboard-Kachel zeigt nur aktive Berater; die Liste zeigt alle
// (inaktive sind fürs Nachfassen gerade interessant) und weist beide Zahlen aus.
'activeCount' => collect($rows)->where('is_active_account', true)->count(),
// Zwingend dieselbe Regel wie die Kachel (isActiveConsultant), NICHT
// isActiveAccount — sonst nennt die Seite eine andere Zahl als die Kachel.
'activeCount' => $firstlines
->filter(fn (User $member) => $dashboardService->isActiveConsultant($member))
->count(),
'selectedMonth' => $month,
'selectedYear' => $year,
'filterMonths' => HTMLHelper::getTransMonths(),