@extends('layouts.layout-2') @section('content')
Zurück Abbruch-Analyse Nicht gestartete, abgebrochene und technisch fehlerhafte Zahlungen
{{-- Zeitraum-Filter --}}
{{-- Stat-Karten --}}
Zahlung nie gestartet
{{ $abandonedStats['no_payment'] }}
Orders mit txaction=prev ohne Payment
Abgebrochen / Fehler
{{ $abandonedStats['cancelled'] }}
cancel + error Payments
Kein PAYONE-Callback
{{ $abandonedStats['no_callback'] }}
Payments ohne Transaktion (>2h)
{{-- Tabs --}}
{{-- Tab 1: Orders ohne Payment --}}

Bestellungen, bei denen der Benutzer den Checkout-Prozess zwar abgeschlossen hat (txaction=prev), aber die Zahlung nie initiiert wurde. Mindestens 30 Minuten alt.

@if ($ordersWithoutPayment->isEmpty())
Keine offenen Bestellungen ohne Zahlung im gewählten Zeitraum.
@else
@foreach ($ordersWithoutPayment as $order) @php $isConsultant = $order->auth_user_id && $order->auth_user; if ($isConsultant) { $name = trim( ($order->auth_user->firstname ?? '') . ' ' . ($order->auth_user->lastname ?? ''), ); $email = $order->auth_user->email ?? '–'; } else { $name = trim( ($order->shopping_user->billing_firstname ?? '') . ' ' . ($order->shopping_user->billing_lastname ?? ''), ); $email = $order->shopping_user->billing_email ?? '–'; } @endphp @endforeach
Order-ID Kunde / Berater Typ Betrag Erstellt Vor
#{{ $order->id }} @if ($isConsultant) Berater @else Kunde @endif {{ $name ?: '–' }}
{{ $email }}
{{ $order->payment_for ?? '–' }} {{ $order->price_total ? number_format($order->price_total, 2, ',', '.') . ' €' : '–' }} {{ $order->created_at ? $order->created_at->format('d.m.Y H:i') : '–' }} {{ $order->created_at ? $order->created_at->diffForHumans() : '–' }}
{{ $ordersWithoutPayment->links() }} @endif
{{-- Tab 2: Abgebrochene / Fehler --}}

Zahlungen, bei denen der Nutzer aktiv abgebrochen hat (cancel) oder bei denen PAYONE einen Fehler zurückgemeldet hat (error). Zeile anklicken für PAYONE-Fehlerdetails.

@if ($cancelledPayments->isEmpty())
Keine abgebrochenen Zahlungen im gewählten Zeitraum.
@else
@foreach ($cancelledPayments as $payment) @php $order = $payment->shopping_order; $isConsultant = $order && $order->auth_user_id && $order->auth_user; if ($order && $isConsultant) { $name = trim( ($order->auth_user->firstname ?? '') . ' ' . ($order->auth_user->lastname ?? ''), ); $email = $order->auth_user->email ?? '–'; } elseif ($order && $order->shopping_user) { $name = trim( ($order->shopping_user->billing_firstname ?? '') . ' ' . ($order->shopping_user->billing_lastname ?? ''), ); $email = $order->shopping_user->billing_email ?? '–'; } else { $name = '–'; $email = '–'; } $hasTransactions = $payment->payment_transactions->isNotEmpty(); $collapseId = 'cancelled-tx-' . $payment->id; @endphp {{-- Hauptzeile --}} {{-- Aufklappbare Fehlerdetails --}} @if($hasTransactions) @endif @endforeach
Referenz Order-ID Kunde / Berater Betrag Status Zahlungsart Zeitpunkt Vor
@if($hasTransactions) @endif {{ $payment->reference }} @if ($order) #{{ $order->id }} @else @endif @if ($order) @if ($isConsultant) Berater @else Kunde @endif {{ $name ?: '–' }}
{{ $email }} @else @endif
{{ $payment->amount ? number_format($payment->amount / 100, 2, ',', '.') . ' €' : '–' }} @if ($payment->status === 'cancel') Abgebrochen @elseif($payment->status === 'error') Fehler @else {{ $payment->status }} @endif {{ $payment->payment_type ?? '–' }} {{ $payment->created_at ? $payment->created_at->format('d.m.Y H:i') : '–' }} {{ $payment->created_at ? $payment->created_at->diffForHumans() : '–' }}
PAYONE-Transaktionen ({{ $payment->payment_transactions->count() }}) @foreach($payment->payment_transactions as $tx)
TX-ID: {{ $tx->txid ?? '–' }}
Action: {{ $tx->txaction ?? '–' }}
Request: {{ $tx->request ?? '–' }}
Status: @if($tx->status === 'approved') approved @elseif($tx->status === 'error') error @else {{ $tx->status ?? '–' }} @endif
@php $errorcode = $tx->errorcode ?? ($tx->transmitted_data['errorcode'] ?? null); $failedcause = $tx->transmitted_data['failedcause'] ?? null; $errormessage = $tx->errormessage ?? ($tx->transmitted_data['errormessage'] ?? null); $customermessage = $tx->customermessage ?? ($tx->transmitted_data['customermessage'] ?? null); $description = $tx->error_description; @endphp @if($errorcode) Fehlercode {{ $errorcode }}
@if($description) {{ $description }}
@endif @if($errormessage) PAYONE-Meldung: {{ $errormessage }}
@endif @if($failedcause && $failedcause != '-'.$errorcode) Ursache: {{ $failedcause }}
@endif @if($customermessage) Kundennachricht: {{ $customermessage }} @endif @else @if($tx->txaction === 'failed') Fehlercode nicht übermittelt
(txaction=failed ohne Fehlercode) @elseif($tx->status === 'REDIRECT') Nutzer zu PAYONE weitergeleitet
(kein Fehler, Redirect) @else Kein Fehlercode in diesem Callback @endif
@endif
Modus: @if($tx->mode === 'test') TEST @elseif($tx->mode === 'live') LIVE @else @endif
Zeitpunkt: {{ $tx->created_at ? $tx->created_at->format('d.m.Y H:i:s') : '–' }}
@endforeach
{{ $cancelledPayments->links() }} @endif
{{-- Tab 3: Kein Callback --}}

Zahlungen, die gestartet wurden (PAYONE-Redirect), aber nach mehr als 2 Stunden weder einen Callback noch eine Nutzer-Rückkehr registriert haben. Dies kann auf technische Probleme (Timeout, fehlgeschlagene Weiterleitung) hinweisen.

@if ($pendingPayments->isEmpty())
Keine offenen Zahlungen ohne Callback im gewählten Zeitraum.
@else
@foreach ($pendingPayments as $payment) @php $order = $payment->shopping_order; $isConsultant = $order && $order->auth_user_id && $order->auth_user; if ($order && $isConsultant) { $name = trim( ($order->auth_user->firstname ?? '') . ' ' . ($order->auth_user->lastname ?? ''), ); $email = $order->auth_user->email ?? '–'; } elseif ($order && $order->shopping_user) { $name = trim( ($order->shopping_user->billing_firstname ?? '') . ' ' . ($order->shopping_user->billing_lastname ?? ''), ); $email = $order->shopping_user->billing_email ?? '–'; } else { $name = '–'; $email = '–'; } @endphp @endforeach
Referenz Order-ID Kunde / Berater Betrag Zahlungsart Modus Gestartet Vor
{{ $payment->reference }} @if ($order) #{{ $order->id }} @else @endif @if ($order) @if ($isConsultant) Berater @else Kunde @endif {{ $name ?: '–' }}
{{ $email }} @else @endif
{{ $payment->amount ? number_format($payment->amount / 100, 2, ',', '.') . ' €' : '–' }} {{ $payment->payment_type ?? '–' }} @if (($payment->mode ?? '') === 'test') TEST @elseif(($payment->mode ?? '') === 'live') LIVE @else @endif {{ $payment->created_at ? $payment->created_at->format('d.m.Y H:i') : '–' }} {{ $payment->created_at ? $payment->created_at->diffForHumans() : '–' }}
{{ $pendingPayments->links() }} @endif
@endsection