@extends('layouts.layout-2') @section('content')
Zurück Checkout-Funnel Tracking Internes Tracking aller Checkout-Schritte
@php $topCount = $funnelSteps[0]['count'] > 0 ? $funnelSteps[0]['count'] : 1; @endphp
{{-- ── Funnel ──────────────────────────────────────────────────────── --}}
Checkout-Funnel
@foreach ($funnelSteps as $i => $step) @php $barWidth = $topCount > 0 ? round($step['count'] / $topCount * 100) : 0; @endphp
{{ $i + 1 }} {{ $step['label'] }}
{{ number_format($step['count'], 0, ',', '.') }} @if ($step['conversion'] !== null) ↓ {{ $step['conversion'] }}% @endif
@if ($barWidth > 8) {{ $barWidth }}% @endif
@endforeach @php $totalConversion = $funnelSteps[0]['count'] > 0 ? round(($funnelSteps[4]['count'] / $funnelSteps[0]['count']) * 100, 1) : 0; @endphp
Gesamt-Konversionsrate: {{ $totalConversion }}% (Checkout aufgerufen → Zahlung bestätigt)
{{-- ── Rechte Spalte ────────────────────────────────────────────────── --}}
{{-- Rückkehr-Status --}}
Rückkehr von PAYONE
@forelse($returnStats as $status => $count) @empty @endforelse
@if ($status === 'success') success @elseif($status === 'cancel') cancel @elseif($status === 'error') error @else {{ $status ?? '?' }} @endif {{ number_format($count, 0, ',', '.') }}
Noch keine Daten
{{-- Quell-Kanal --}}
Quelle (Checkout-Aufrufe)
@forelse($sourceBreakdown as $key => $source) @empty @endforelse
@if ($key === 'kundenshop') @elseif($key === 'salescenter') @elseif($key === 'beraterzugang') @elseif($key === 'testserver') @else @endif {{ $source['label'] }} {{ number_format($source['count'], 0, ',', '.') }}
Noch keine Daten
{{-- ── Ereignisse (gefiltert + paginiert) ─────────────────────────────────── --}}
Ereignisse {{-- Filter-Leiste --}}
@if ($filterEvent || $filterStatus || $filterSource) ✕ Reset @endif
@forelse($recentEvents as $event) @empty @endforelse
Zeitpunkt Ereignis Quelle Domain Berater Order-ID Zahlungsart Betrag Status
{{ $event->created_at->format('d.m. H:i:s') }}
{{ $event->created_at->diffForHumans() }}
@php $badgeClass = match ($event->event) { 'checkout_visited' => 'badge-secondary', 'form_submitted' => 'badge-info', 'payment_initiated' => 'badge-primary', 'payment_returned' => match ($event->return_status) { 'success' => 'badge-success', 'cancel' => 'badge-warning', default => 'badge-danger', }, 'payment_confirmed' => 'badge-success', default => 'badge-light', }; @endphp {{ $event->event_label }} @if ($event->metadata && isset($event->metadata['txaction'])) {{ $event->metadata['txaction'] }} @endif @php $src = $event->source_type; @endphp @if ($src === 'kundenshop') Shop @elseif($src === 'salescenter') SC @elseif($src === 'beraterzugang') BZ @elseif($src === 'testserver') TEST @else ? @endif {{ $event->domain ?? '–' }} @if ($event->consultant) {{ $event->consultant->firstname }} {{ $event->consultant->lastname }} @else @endif @if ($event->shopping_order_id) #{{ $event->shopping_order_id }} @else @endif {{ $event->payment_method ?? '–' }} {{ $event->amount_cents ? number_format($event->amount_cents / 100, 2, ',', '.') . ' €' : '–' }} @if ($event->return_status) @if ($event->return_status === 'success') {{ $event->return_status }} @elseif($event->return_status === 'cancel') {{ $event->return_status }} @else {{ $event->return_status }} @endif @else @endif
Keine Ereignisse gefunden. @if ($filterEvent || $filterStatus || $filterSource) Filter zurücksetzen @endif
@if ($recentEvents->hasPages()) @endif
{{-- Tracking-Hinweis --}}
Hinweis: Das Tracking ist ab dem Aktivierungszeitpunkt aktiv. Ältere Checkouts sind nicht enthalten. Schritt 5 „PAYONE Callback" wird sowohl bei synchroner Bestätigung (transactionApproved) als auch bei asynchronem IPN-Callback (txaction=paid und appointed) erfasst.
@endsection