mivita/resources/views/admin/payment-dashboard/_partials/abo-provider-stats.blade.php
Kevin 8e09aaefe8 Stripe-Integration (S7.4): Payment-Dashboard für Stripe
- 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>
2026-07-10 16:57:50 +00:00

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">&mdash; Auslaufmodell PAYONE &rarr; 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>