Backoffice-Statistik: Neue-Kundenabos-Ranking & Führungskräfte-Abos

Zwei neue Listen unter der Team-Übersicht: Ranking der Berater nach neuen
Kundenabos im Monat (inkl. Gesamtbestand und Linie) sowie eigene und
Kundenabos aller Führungskräfte ab Stufe Vertriebsleiter mit Gesamtsumme.
Beides fließt mit in die Monats-Snapshots ein.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-07-03 16:24:01 +00:00
parent e7b40bc513
commit ce07bee589
3 changed files with 417 additions and 1 deletions

View file

@ -212,6 +212,144 @@
</div>
</div>
@php
$newCustomerAbos = $statistics['new_customer_abos'] ?? null;
$leaderAbos = $statistics['leader_abos'] ?? null;
@endphp
<div class="row">
<div class="col-lg-6 mb-4">
<div class="card h-100">
<div class="card-header d-flex justify-content-between align-items-center">
<div>
<h5 class="mb-0">Neue Kundenabos</h5>
<div class="text-muted small">{{ $selectedMonthName }} {{ $selectedYear }} · nach Anzahl sortiert</div>
</div>
<span class="display-4 font-weight-bold text-primary mb-0">
{{ number_format((float) ($statistics['totals']['team_customer_abos_new'] ?? 0), 0, ',', '.') }}
</span>
</div>
@if ($newCustomerAbos === null)
<div class="card-body">
<p class="text-muted mb-0">
Für diesen Monat liegt noch ein älterer Snapshot ohne diese Liste vor.
</p>
</div>
@elseif (count($newCustomerAbos) === 0)
<div class="card-body">
<p class="text-muted mb-0">In diesem Monat wurden keine neuen Kundenabos abgeschlossen.</p>
</div>
@else
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead>
<tr>
<th>Berater</th>
<th class="text-right">Gesamt</th>
<th class="text-right">Neu</th>
</tr>
</thead>
<tbody>
@foreach ($newCustomerAbos as $row)
<tr>
<td>
<div class="font-weight-semibold">{{ $row['name'] }}</div>
<div class="text-muted small">Linie {{ $row['line'] }} · {{ $row['career_level'] }}</div>
</td>
<td class="text-right align-middle">
<span class="badge badge-pill badge-outline-default backoffice-statistics-click-badge">
{{ number_format((float) ($row['total_abo_count'] ?? 0), 0, ',', '.') }}
</span>
</td>
<td class="text-right align-middle">
<span class="badge badge-pill badge-success backoffice-statistics-click-badge">
+{{ number_format((float) $row['abo_count'], 0, ',', '.') }}
</span>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endif
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card h-100">
<div class="card-header d-flex justify-content-between align-items-center">
<div>
<h5 class="mb-0">Abos Führungskräfte</h5>
<div class="text-muted small">ab Stufe {{ $leaderAbos['level_name'] ?? 'Vertriebsleiter' }} · aktueller Stand</div>
</div>
<div class="text-right">
<span class="display-4 font-weight-bold text-primary mb-0">
{{ number_format((float) ($leaderAbos['total'] ?? 0), 0, ',', '.') }}
</span>
@if ($leaderAbos !== null)
<div class="text-muted small">
{{ number_format((float) ($leaderAbos['total_own'] ?? 0), 0, ',', '.') }} eigene ·
{{ number_format((float) ($leaderAbos['total_customer'] ?? 0), 0, ',', '.') }} Kunden
</div>
@endif
</div>
</div>
@if ($leaderAbos === null)
<div class="card-body">
<p class="text-muted mb-0">
Für diesen Monat liegt noch ein älterer Snapshot ohne diese Liste vor.
</p>
</div>
@elseif (count($leaderAbos['rows']) === 0)
<div class="card-body">
<p class="text-muted mb-0">
Im Team gibt es aktuell keine Führungskräfte ab Stufe {{ $leaderAbos['level_name'] }}.
</p>
</div>
@else
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead>
<tr>
<th>Führungskraft</th>
<th class="text-right">Eigene Abos</th>
<th class="text-right">Kundenabos</th>
</tr>
</thead>
<tbody>
@foreach ($leaderAbos['rows'] as $row)
<tr>
<td>
<div class="font-weight-semibold">{{ $row['name'] }}</div>
<div class="text-muted small">Linie {{ $row['line'] }} · {{ $row['career_level'] }}</div>
</td>
<td class="text-right align-middle">
@if (($row['own_abo_count'] ?? 0) > 0)
<span class="badge badge-pill badge-outline-default backoffice-statistics-click-badge">
{{ number_format((float) $row['own_abo_count'], 0, ',', '.') }}
</span>
@else
<span class="badge badge-pill badge-light backoffice-statistics-empty-badge">0</span>
@endif
</td>
<td class="text-right align-middle">
@if (($row['customer_abo_count'] ?? 0) > 0)
<span class="badge badge-pill badge-outline-default backoffice-statistics-click-badge">
{{ number_format((float) $row['customer_abo_count'], 0, ',', '.') }}
</span>
@else
<span class="badge badge-pill badge-light backoffice-statistics-empty-badge">0</span>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endif
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-4">
<div class="card h-100">