Backoffice-Statistik: Punkte-Fix (kumulative Snapshots) & Meine Statistik

Punkte/Umsatz korrekt aus per-Zeile points/total_net je status berechnen
statt SUM der kumulativen month_*-Snapshots (zaehlte massiv mehrfach).
Zentralisiert in SalesVolumePoints, genutzt von Dashboard- & Drilldown-Service.

Detail-Tabelle neu gegliedert: Eigenpunkte | Shop | Abo | Sonstige |
Kundenpunkte (=Summe) | Gesamt, mit gruener Hervorhebung der Basis-/Summenspalten.

Neue VIP-Seite "Meine Statistik" (Untermenue neben Team-Statistik):
KPI-Karten + nachvollziehbare Detailtabellen, gruppiert nach eigenen
Bestellungen, Shop-Bestellungen und Abos (PersonalStatisticsService).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-06-25 13:31:14 +00:00
parent 9565814221
commit 7a620d66ae
14 changed files with 666 additions and 70 deletions

View file

@ -56,14 +56,28 @@
</a>
</li>
@if (Auth::user()->isVIP())
<li class="sidenav-item{{ Request::is('user/backoffice/statistics*') ? ' active' : '' }}">
<a href="{{ route('user_backoffice_statistics') }}" class="sidenav-link"><i
class="sidenav-icon ion ion-ios-stats"></i>
<li class="sidenav-item @if (Request::is('user/backoffice/statistics*')) open @endif">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-stats"></i>
<div>{{ __('navigation.statistics') }}</div>
<div class="pl-1 ml-auto">
<div class="badge badge-secondary">VIP</div>
</div>
</a>
<ul class="sidenav-menu">
<li class="sidenav-item{{ Request::is('user/backoffice/statistics/my') ? ' active' : '' }}">
<a href="{{ route('user_my_statistics') }}" class="sidenav-link"><i
class="sidenav-icon ion ion-md-person"></i>
<div>{{ __('navigation.my_statistics') }}</div>
</a>
</li>
<li class="sidenav-item{{ Request::is('user/backoffice/statistics') || Request::is('user/backoffice/statistics/details') ? ' active' : '' }}">
<a href="{{ route('user_backoffice_statistics') }}" class="sidenav-link"><i
class="sidenav-icon ion ion-md-people"></i>
<div>{{ __('navigation.team_statistics') }}</div>
</a>
</li>
</ul>
</li>
@endif
<li class="sidenav-item @if (Request::is('user/team/*')) open @endif">