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>
This commit is contained in:
parent
dd1c8f9a1e
commit
ad19112750
13 changed files with 600 additions and 45 deletions
|
|
@ -0,0 +1,45 @@
|
|||
{{-- 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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue