@extends('frontend.layouts.user.index') @section('title', __('Trade Order #').$order->id) @section('content') {{-- Trade Order Details: participant state, order overview, action buttons, dispute handling, and review flow --}} @php $side = $order->offer->side; // enum App\Enums\P2P\OrderSide $actorId = (int) auth()->id(); $sellerId = (int) ($side === \App\Enums\P2P\OrderSide::SELL ? $order->maker_id : $order->taker_id); $buyerId = (int) ($side === \App\Enums\P2P\OrderSide::SELL ? $order->taker_id : $order->maker_id); $role = $actorId === $sellerId ? 'seller' : ($actorId === $buyerId ? 'buyer' : 'guest'); $isExpired = $order->status->value === 'PENDING' && $order->expires_at && now()->greaterThan($order->expires_at); $hasFeedback = $order->relationLoaded('feedbacks') ? $order->feedbacks->where('user_id', $actorId)->isNotEmpty() : false; $canRate = $order->status->value === 'COMPLETED' && $actorId === (int) $order->taker_id && ! $hasFeedback; $myFb = $hasFeedback ? $order->feedbacks->where('user_id', $actorId)->first() : null; $payerSnapshot = is_array($order->payer_payment_account_snapshot) ? $order->payer_payment_account_snapshot : []; $receiverSnapshot = is_array($order->receiver_payment_account_snapshot) ? $order->receiver_payment_account_snapshot : []; $payerDetails = collect($payerSnapshot['details'] ?? [])->filter(function ($detail) { return is_array($detail) && trim((string) ($detail['value'] ?? '')) !== ''; })->values()->all(); $receiverDetails = collect($receiverSnapshot['details'] ?? [])->filter(function ($detail) { return is_array($detail) && trim((string) ($detail['value'] ?? '')) !== ''; })->values()->all(); $selectedPaymentMethodName = $order->paymentMethod?->name ?? ($payerSnapshot['payment_method_name'] ?? $receiverSnapshot['payment_method_name'] ?? __('Not available')); @endphp
@lang('All Orders')
{{ ($isExpired ? \App\Enums\P2P\OrderStatus::EXPIRED : $order->status)->label() }}
{{-- Order Overview + Participant Actions --}}
  • @lang('Side'): {{ $order->offer->side->label() }}
  • @lang('Price'): {{ $order->price }}
  • @lang('Amount'): {{ $order->amount }} {{ $order->wallet->currency->code }}
  • @lang('Total'): {{ $order->total }} {{ $order->wallet->currency->code }}
  • @lang('Expires In'): {{ $isExpired ? __('Expired') : optional($order->expires_at)->diffForHumans() }}
@lang('Selected Payment Method')
{{ $selectedPaymentMethodName }}
@lang('Payer Account')
@if(!empty($payerSnapshot))
@lang('Method'): {{ $payerSnapshot['payment_method_name'] ?? '-' }}
@lang('Account'): {{ $payerSnapshot['account_label'] ?? $payerSnapshot['display_name'] ?? '-' }}
@foreach($payerDetails as $detail)
{{ $detail['label'] ?? '-' }}: {{ $detail['value'] ?? '-' }}
@endforeach @if(!empty($payerSnapshot['method_instructions']))
{!! nl2br(e($payerSnapshot['method_instructions'])) !!}
@endif @else @lang('No payer account snapshot available.') @endif
@lang('Receiver Account')
@if(!empty($receiverSnapshot))
@lang('Method'): {{ $receiverSnapshot['payment_method_name'] ?? '-' }}
@lang('Account'): {{ $receiverSnapshot['account_label'] ?? $receiverSnapshot['display_name'] ?? '-' }}
@foreach($receiverDetails as $detail)
{{ $detail['label'] ?? '-' }}: {{ $detail['value'] ?? '-' }}
@endforeach @if(!empty($receiverSnapshot['method_instructions']))
{!! nl2br(e($receiverSnapshot['method_instructions'])) !!}
@endif @else @lang('No receiver account snapshot available.') @endif
@lang('Offer Payment Methods')
@forelse($order->offer->paymentMethods as $pm)
@if(!empty($pm->instructions)) {!! nl2br(e($pm->instructions)) !!} @else @lang('No instructions provided.') @endif
@empty @lang('No payment methods') @endforelse
@if(!empty($order->offer->terms_text))
@lang('Terms')
{!! nl2br(e($order->offer->terms_text)) !!}
@endif
@if($order->status->value === 'PENDING' && !$isExpired && $actorId === (int) ($side === \App\Enums\P2P\OrderSide::SELL ? $order->taker_id : $order->maker_id))
@csrf
@endif
@if($order->status->value === 'PAID' && $actorId === (int) ($side === \App\Enums\P2P\OrderSide::SELL ? $order->maker_id : $order->taker_id))
@csrf
@endif
@if(in_array($order->status->value, ['PENDING']) && !$isExpired && in_array($actorId, [(int) $order->maker_id, (int) $order->taker_id], true))
@csrf
@endif
@if($canRate)
@elseif($order->status->value === 'COMPLETED' && $myFb)
{{ (int) $myFb->rating }}/5
@endif
@if(in_array($order->status->value, ['PENDING','PAID']) && in_array($actorId, [(int) $order->maker_id, (int) $order->taker_id], true))
@lang('Open Trade Dispute')
@csrf
@endif
{{-- Info modal (Binance-style) shown once on creation for buyer/seller --}} {{-- Review Modal --}} @endsection {{-- Trade Order Script: local state persistence, onboarding modal, status polling, and review modal helpers --}} @push('scripts') @include('frontend.user.p2p.trade_orders.partials._trade_order_details_scripts') @endpush