@extends('layouts.app') @push('styles') @endpush @section('content') @php $escrowType = $escrow->escrowable_type ?? ''; $isUrgentSale = str_contains($escrowType, 'UrgentSale'); $isBooking = str_contains($escrowType, 'Booking'); $isEquipment = str_contains($escrowType, 'Equipment'); $totalAmount = (float)($escrow->total_amount ?? $escrow->amount ?? 0); $depositAmount = (float)($escrow->deposit_amount ?? 0); $escrowMetaTop = []; try { $escrowMetaTop = !empty($escrow->metadata) ? (json_decode((string)$escrow->metadata, true) ?: []) : []; } catch (\Throwable $e) { $escrowMetaTop = []; } if ($depositAmount <= 0) { $depositAmount = (float)($escrowMetaTop['deposit_amount'] ?? ($escrowMetaTop['security_deposit'] ?? 0)); } if ($depositAmount <= 0 && isset($relatedItem) && is_object($relatedItem) && property_exists($relatedItem, 'security_deposit')) { $depositAmount = (float)($relatedItem->security_deposit ?? 0); } $urgentSaleProduct = $urgentSaleProduct ?? null; $fmtDt = function($v) { try { return $v ? \Carbon\Carbon::parse($v)->format('d/m/Y à H:i') : '—'; } catch(\Throwable $e) { return '—'; } }; $fmtD = function($v) { try { return $v ? \Carbon\Carbon::parse($v)->format('d/m/Y') : '—'; } catch(\Throwable $e) { return '—'; } }; $fmtDiff = function($v) { try { return $v ? \Carbon\Carbon::parse($v)->diffForHumans() : '—'; } catch(\Throwable $e) { return '—'; } }; @endphp
{{-- Hero --}}

Transaction #{{ $escrow->id }}

Détails de votre paiement sécurisé

Retour
{{-- Colonne principale --}}
{{-- Statut --}}

Statut

@php $stClass = 'tp-s-status-'.($escrow->status ?? 'pending'); $stText = match($escrow->status) { 'pending'=>'🔒 En attente','partial'=>'🟣 Partiel','released'=>'✅ Libéré','refunded'=>'💰 Remboursé','partially_refunded'=>'💸 Remb. partiel','disputed'=>'⚠️ Litige','dispute_review'=>'📁 Dossier litige','cancelled'=>'❌ Annulé', default=>ucfirst($escrow->status ?? '') }; @endphp {{ $stText }}
{{-- Timeline --}}

Paiement reçu et bloqué

{{ $fmtDt($escrow->created_at) }}

@if($escrow->client_confirmed_at) @elseif($escrow->status === 'pending') @else2@endif
@if($escrow->client_confirmed_at)

Vous avez confirmé

{{ $fmtDt($escrow->client_confirmed_at) }}

@elseif($escrow->status === 'pending')

En attente de votre confirmation

@if($escrow->auto_release_at)

Libération auto {{ $fmtDiff($escrow->auto_release_at) }}

@endif @else

Confirmation client

@endif
@if($escrow->released_at) @else3@endif
@if($escrow->released_at)

Paiement libéré

{{ $fmtDt($escrow->released_at) }}

@else

Libération du paiement

@endif
{{-- Détails --}} @if($relatedItem)

Détails

@if($isBooking)
TypeRéservation de service
Date{{ $fmtD($relatedItem->start_date ?? ($relatedItem->booking_date ?? null)) }}
@elseif($isEquipment)
TypeLocation d'équipement
Période{{ $fmtD($relatedItem->start_date ?? null) }} → {{ $fmtD($relatedItem->end_date ?? null) }}
@elseif($isUrgentSale)
TypeVente urgente
@if($urgentSaleProduct)
Produit{{ $urgentSaleProduct->title ?? '—' }}
@endif
Quantité{{ $relatedItem->quantity ?? 1 }}
Prix unitaire{{ number_format((float)($relatedItem->unit_price ?? 0),2,',',' ') }} €
Montant total{{ number_format((float)($relatedItem->total_amount ?? 0),2,',',' ') }} €
@php $rSt = $relatedItem->status ?? ''; @endphp
Statut achat{{ match($rSt) { 'paid'=>'Payé','pending'=>'En attente','refunded'=>'Remboursé','cancelled'=>'Annulé', default=>ucfirst($rSt ?: '—') } }}
Date d'achat{{ $fmtDt($relatedItem->created_at ?? null) }}
@endif
@endif {{-- Vendeur --}} @php $prestataire = $prestataire ?? null; @endphp @if($prestataire) @php $pPhoto = $prestataire->profile_image ?? $prestataire->photo ?? null; $pName = $prestataire->company_name ?? $prestataire->user_name ?? 'Vendeur'; $pRating = $prestataire->rating_average ?? null; $pReviews = $prestataire->total_reviews ?? 0; @endphp

Vendeur

@if($pPhoto){{ $pName }} @else
{{ strtoupper(substr($pName,0,1)) }}
@endif
{{ $pName }}
@if($pRating)
@for($i=1;$i<=5;$i++)@endfor {{ number_format($pRating,1) }}@if($pReviews > 0) ({{ $pReviews }})@endif
@endif
@if($prestataire->user_id)@endif @if($prestataire->id)Voir profil@endif
@endif {{-- Livraison --}} @if($shipment)

Livraison

Transporteur{{ ucfirst(str_replace('_',' ',(string)($shipment->carrier ?? ''))) }}
N° suivi{{ $shipment->tracking_number }}
@php $shSt = $shipment->status; $shLabel = match($shSt) { 'pending'=>'En préparation','shipped'=>'Expédié','in_transit'=>'En transit','out_for_delivery'=>'En livraison','delivered'=>'Livré','returned'=>'Retourné', default=>ucfirst($shSt) }; @endphp
Statut{{ $shLabel }}
@if($shipment->tracking_url)Suivre le colis@endif
@endif {{-- Litige --}} @if(!empty($dispute))

⚠️ Dossier litige

Motif{{ ucfirst(str_replace('_',' ',$dispute->reason ?? '')) }}

Description

{{ $dispute->description }}

@php $evidence = []; try { $evidence = $dispute->evidence ? json_decode($dispute->evidence,true) : []; } catch(\Exception $e) {} @endphp @if(!empty($evidence))

Preuves

@foreach($evidence as $path)Voir@endforeach
@endif

La plateforme enregistre le dossier. Elle ne prend parti de personne.

@endif
{{-- Sidebar --}}
{{-- Financier --}}

💰 Résumé financier

Montant bloqué{{ number_format($totalAmount,2) }} €
@if($depositAmount > 0)
Caution{{ number_format($depositAmount,2) }} €
@if(str_contains((string)($escrow->escrowable_type ?? ''),'EquipmentRental')) @php $escrowMeta = $escrowMetaTop; $depositStatus = strtolower((string)(($relatedItem->deposit_status ?? null) ?: ($escrowMeta['deposit_status'] ?? 'pending'))); $depositRetained = (float)(($relatedItem->deposit_retained ?? null) ?? ($escrowMeta['deposit_retained'] ?? 0)); $depositReason = trim((string)(($relatedItem->deposit_retention_reason ?? null) ?: ($escrowMeta['deposit_retention_reason'] ?? ''))); $depositReturned = max(0,$depositAmount - $depositRetained); if(isset($escrowMeta['deposit_returned'])) $depositReturned = max(0,(float)$escrowMeta['deposit_returned']); $depositProcessedAt = null; $pc = ($relatedItem->equipment_returned_at ?? null) ?: ($escrowMeta['deposit_processed_at'] ?? null); if(!empty($pc)) { try { $depositProcessedAt = \Carbon\Carbon::parse($pc)->format('d/m/Y à H:i'); } catch(\Throwable $e) {} } $isReturned = $depositStatus==='returned' || ($depositRetained<=0 && !empty($depositProcessedAt)); $isRetained = $depositStatus==='retained' || ($depositRetained>=$depositAmount && $depositAmount>0); $isPartial = $depositStatus==='partial' || (!$isReturned && !$isRetained && $depositRetained>0); @endphp
Suivi caution
@if($isReturned)
Remboursée: {{ number_format($depositReturned,2) }} €
@elseif($isPartial)
Remboursée: {{ number_format($depositReturned,2) }} € · Retenue: {{ number_format($depositRetained,2) }} €
@elseif($isRetained)
Retenue: {{ number_format($depositRetained,2) }} €
@else
En attente après retour
@endif @if($depositReason)
{{ $depositReason }}
@endif @if($depositProcessedAt)
Traitée le {{ $depositProcessedAt }}
@endif
@endif @endif
Total {{ number_format($totalAmount + $depositAmount,2) }} €
@if($escrow->status === 'pending')
Votre argent est en sécurité. {{ $isUrgentSale && $shipment && $shipment->status !== 'delivered' ? 'Libération après livraison + confirmation.' : 'Libération après confirmation ou automatiquement après 48h.' }}
@endif
{{-- Actions --}} @if(in_array($escrow->status,['pending','partial'])) @php $clientAlreadyConfirmed = !empty($escrow->client_confirmed_at); @endphp

⚡ Actions

@if($isUrgentSale && $shipment && $shipment->status === 'delivered') @if(!$clientAlreadyConfirmed)
@csrf
@endif
@csrf

Non conforme

@else @if(!$clientAlreadyConfirmed) @if($isUrgentSale && !$shipment)
@csrf
@elseif(!$isUrgentSale)
@csrf
@endif @endif @endif @if($clientAlreadyConfirmed)
✅ Confirmation enregistrée.
@endif
@endif {{-- Notation --}} @if($canRate)

⭐ Notez cette expérience

@endif
{{-- Modal Litige --}}
@csrf

Signaler un problème

Dossier enregistré et visible par les parties.

{{-- Modal Notation --}}
@csrf

Noter le prestataire

@endsection