- Provider-Status/Uptime: Stripe-Kachel aktiviert; payment:check-uptime prüft zusätzlich api.stripe.com/v1/ (401 ohne Key = erreichbar) inkl. Auto-Incident - Zahlungen: Anbieter-Filter, Provider-Badges, Umsatz je Provider, Stripe-Dashboard-Deep-Links (ShoppingPayment/PaymentTransaction:: stripeDashboardUrl, pi_-Guard, testmodus-bewusst) - Rohe Transaktionen: Anbieter-Filter/-Spalte, Erfolgsraten je Anbieter; Bugfix: Stringable-Vergleich ließ den txaction-Filter immer mit leerem Wert greifen — Liste war dauerhaft leer - Neue Kachel „Abos je Anbieter" (Index + GF-Ansicht) mit Fehlerzählern und Stripe-Anteil-Fortschrittsbalken (Auslaufmodell PAYONE → Stripe ablesbar) - Incident-Kachel weist Stripe/PAYONE getrennt aus; Log-Viewer mit Kanal-Umschalter stripe/payone - Plan-Doku: S7.4-Umsetzungsstatus, Abo-Go-Live 2026-07-10 vermerkt Tests: PaymentDashboardProviderTest (9 neu), Dashboard-Suite 49 grün. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
45 lines
2.3 KiB
PHP
45 lines
2.3 KiB
PHP
{{-- Abos je Provider: macht den Auslauf-Fortschritt PAYONE → Stripe ablesbar (Plan S7.4). --}}
|
|
<div class="card mb-4">
|
|
<h6 class="card-header">
|
|
Abos je Anbieter
|
|
<small class="text-muted">— Auslaufmodell PAYONE → Stripe</small>
|
|
</h6>
|
|
<div class="card-body py-3">
|
|
@if($aboProviderStats['total'] === 0)
|
|
<div class="text-muted">Keine aktiven Abos vorhanden.</div>
|
|
@else
|
|
<div class="row">
|
|
@foreach($aboProviderStats['providers'] as $providerKey => $providerRow)
|
|
<div class="col-sm-6 col-md-3 mb-2">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<strong>{{ $providerRow['label'] }}</strong>
|
|
<span class="badge badge-{{ $providerKey === 'stripe' ? 'primary' : 'secondary' }}">
|
|
{{ $providerRow['total'] }} aktiv
|
|
</span>
|
|
</div>
|
|
<div class="text-muted small">
|
|
@if($providerRow['failed'] > 0)
|
|
<span class="text-danger">{{ $providerRow['failed'] }} mit fehlgeschlagener Zahlung</span>
|
|
@else
|
|
keine fehlgeschlagenen Zahlungen
|
|
@endif
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@if($aboProviderStats['stripe_share'] !== null)
|
|
<div class="mt-2">
|
|
<div class="d-flex justify-content-between small text-muted mb-1">
|
|
<span>Anteil Stripe</span>
|
|
<span>{{ $aboProviderStats['stripe_share'] }}% von {{ $aboProviderStats['total'] }} aktiven Abos</span>
|
|
</div>
|
|
<div class="progress" style="height: 8px">
|
|
<div class="progress-bar bg-primary" role="progressbar"
|
|
style="width: {{ $aboProviderStats['stripe_share'] }}%"
|
|
aria-valuenow="{{ $aboProviderStats['stripe_share'] }}" aria-valuemin="0" aria-valuemax="100"></div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
@endif
|
|
</div>
|
|
</div>
|