@extends('layouts.app') @section('title', 'Détails de la demande de location') @section('content')
@if(request()->query('payment_success') === '1') @endif @if(request()->query('payment_pending') === '1') @endif @if(session('success')) @endif @if(session('error')) @endif @if(session('warning')) @endif

Demande #{{ $request->id }}

Demande de location d'équipement

Créée le {{ $request->created_at->format('d/m/Y à H:i') }}
Mise à jour le {{ $request->updated_at->format('d/m/Y à H:i') }}
@php $requestStatus = (string) $request->status; $cancelHours = max(0, (int) ($request->equipment?->cancellation_hours ?? 24)); $startDate = null; if ($request->start_date) { try { $startDate = \Illuminate\Support\Carbon::parse($request->start_date)->startOfDay(); } catch (\Throwable $e) { $startDate = null; } } $cancelDeadline = $startDate ? $startDate->copy()->subHours($cancelHours) : null; $canCancelNow = in_array($requestStatus, ['pending', 'accepted', 'confirmed', 'in_preparation'], true) && (!$cancelDeadline || now()->lessThanOrEqualTo($cancelDeadline)); $deadlinePassed = in_array($requestStatus, ['accepted', 'confirmed', 'in_preparation'], true) && !$canCancelNow; $hasCancelRoute = \Illuminate\Support\Facades\Route::has('client.equipment-rental-requests.cancel'); @endphp @if($requestStatus === 'pending') En attente @elseif(in_array($requestStatus, ['accepted', 'confirmed', 'in_preparation'], true)) {{ $requestStatus === 'in_preparation' ? 'En préparation' : 'Acceptée' }} @elseif($requestStatus === 'rejected') Refusée @elseif($requestStatus === 'cancelled') Annulée @endif @if($requestStatus === 'pending' && $canCancelNow && $hasCancelRoute)
@csrf
@endif @if(in_array($requestStatus, ['accepted', 'confirmed', 'in_preparation'], true)) Locations @endif @if(in_array($requestStatus, ['accepted', 'confirmed', 'in_preparation'], true) && $canPayOnline) @if(\Illuminate\Support\Facades\Route::has('client.payments.rental.form') && in_array($paymentStatus, ['pending', 'partial'], true)) {{ $isDepositPaid ? 'Payer le solde' : 'Payer' }} @endif @if(\Illuminate\Support\Facades\Route::has('client.cart.add.rental-request') && $paymentStatus === 'pending' && function_exists('checkout_payments_enabled') && checkout_payments_enabled())
@csrf
@endif @endif @if($isFullyPaid) Article payé @elseif(($paymentStatus ?? 'pending') === 'refunded') Paiement remboursé @endif @if($canCancelNow && in_array($requestStatus, ['accepted', 'confirmed', 'in_preparation'], true) && $hasCancelRoute)
@csrf
@elseif($deadlinePassed) Délai de refus dépassé @endif

Équipement demandé

@if($request->equipment && $request->equipment->photos && is_array($request->equipment->photos) && count($request->equipment->photos) > 0)
@php $mainPhoto = $request->equipment->photos[0]; $isValidMainPhoto = is_string($mainPhoto) && !empty($mainPhoto); @endphp @if($isValidMainPhoto)
{{ $request->equipment->name }}
@else

Aucune photo disponible

@endif @if(count($request->equipment->photos) > 1)
@foreach(array_slice($request->equipment->photos, 1, 4) as $photo) @if(is_string($photo) && !empty($photo))
{{ $request->equipment->name }}
@endif @endforeach
@endif
@else

Aucune photo disponible

@endif

@if($request->equipment) {{ $request->equipment->name }} @else Équipement non disponible @endif

@if($request->equipment && ($request->equipment->brand || $request->equipment->model))

Modèle

{{ $request->equipment->brand }} {{ $request->equipment->model }}

@endif @if($request->equipment)

État

{{ $request->equipment->formatted_condition ?? 'Non spécifié' }}

Tarif journalier

{{ number_format($request->equipment->daily_rate ?? 0, 0) }}€

@endif @if($request->equipment && $request->equipment->description)

Description

{{ $request->equipment->description }}

@endif

Détails de la demande

Période de location

{{ optional($request->start_date)->format('d/m/Y') ?? 'N/A' }} au {{ optional($request->end_date)->format('d/m/Y') ?? 'N/A' }}

{{ $request->duration_days }} jour{{ $request->duration_days > 1 ? 's' : '' }}

Montant de la location

{{ number_format($request->total_amount ?? 0, 2) }}€

@if($request->equipment && $request->equipment->security_deposit > 0)

Caution

@php $eqCautionPayReq = function_exists('normalize_payment_requirement_for_mode') ? normalize_payment_requirement_for_mode($request->equipment->payment_requirement ?? 'none') : ($request->equipment->payment_requirement ?? 'none'); $eqCautionHasStripe = !empty($request->equipment->prestataire?->stripe_account_id); @endphp @if($eqCautionPayReq !== 'none' && $eqCautionHasStripe)

Incluse dans le paiement en ligne (bloquée en séquestre)

@else

À régler directement avec le prestataire

@endif {{ number_format($request->equipment->security_deposit ?? 0, 0) }}€
@endif @if($request->client_message)

Votre message

{{ $request->client_message }}

@endif

Prestataire

@if($request->equipment && $request->equipment->prestataire) @php $prestataireDisplayName = $request->equipment->prestataire->company_name ?? trim(($request->equipment->prestataire->first_name ?? '') . ' ' . ($request->equipment->prestataire->last_name ?? '')); $prestataireDisplayName = trim((string) $prestataireDisplayName); $prestataireInitial = $prestataireDisplayName !== '' ? substr($prestataireDisplayName, 0, 1) : 'P'; @endphp
{{ $prestataireInitial }}

{{ $prestataireDisplayName !== '' ? $prestataireDisplayName : 'Prestataire' }}

@if($request->equipment->prestataire->address)

{{ $request->equipment->prestataire->address }}

@endif
@else

Prestataire non disponible

@endif

Actions

@if($request->equipment) Voir l'équipement @endif @php $requestStatusSidebar = (string) $request->status; $cancelHoursSidebar = max(0, (int) ($request->equipment?->cancellation_hours ?? 24)); $startSidebar = null; if ($request->start_date) { try { $startSidebar = \Illuminate\Support\Carbon::parse($request->start_date)->startOfDay(); } catch (\Throwable $e) { $startSidebar = null; } } $cancelDeadlineSidebar = $startSidebar ? $startSidebar->copy()->subHours($cancelHoursSidebar) : null; $canCancelSidebar = in_array($requestStatusSidebar, ['pending', 'accepted', 'confirmed', 'in_preparation'], true) && (!$cancelDeadlineSidebar || now()->lessThanOrEqualTo($cancelDeadlineSidebar)); $hasCancelRouteSidebar = \Illuminate\Support\Facades\Route::has('client.equipment-rental-requests.cancel'); @endphp @if(in_array($requestStatusSidebar, ['accepted', 'confirmed', 'in_preparation'], true) && $canPayOnline && in_array($paymentStatus, ['pending', 'partial'], true)) {{ $isDepositPaid ? 'Payer le solde' : 'Payer (Acompte / Solde)' }} @endif @if($isFullyPaid)
Article payé
@elseif(($paymentStatus ?? 'pending') === 'refunded')
Paiement remboursé
@endif @if($canCancelSidebar && in_array($requestStatusSidebar, ['pending', 'accepted', 'confirmed', 'in_preparation'], true) && $hasCancelRouteSidebar)
@csrf
@endif
@php $paymentContext = $paymentContext ?? []; $paymentTx = $paymentContext['transaction'] ?? null; $paymentEscrow = $paymentContext['escrow'] ?? null; $escrowRow = []; @endphp @if($paymentTx || $paymentEscrow || in_array(($paymentStatus ?? 'pending'), ['partial', 'paid', 'refunded'], true))

Paiement

Statut

@if(($paymentStatus ?? 'pending') === 'paid') Payé @elseif(($paymentStatus ?? 'pending') === 'partial') Acompte payé (solde restant) @elseif(($paymentStatus ?? 'pending') === 'refunded') Remboursé @else En attente @endif

@if($paymentTx)

Transaction

#{{ $paymentTx->id }}

@if(!empty($paymentTx->stripe_payment_intent_id))

{{ $paymentTx->stripe_payment_intent_id }}

@endif @if(!empty($paymentTx->paid_at))

Payé le {{ optional($paymentTx->paid_at)->format('d/m/Y à H:i') }}

@endif
@endif @if($paymentEscrow) @php $escrowRow = (array) $paymentEscrow; @endphp

Escrow

#{{ $escrowRow['id'] ?? 'N/A' }}

Statut: {{ strtolower((string) ($escrowRow['status'] ?? 'unknown')) }}

@if(!empty($escrowRow['stripe_payment_intent_id']))

{{ $escrowRow['stripe_payment_intent_id'] }}

@endif
@endif @php $securityDeposit = (float) ($request->equipment->security_deposit ?? $request->security_deposit ?? 0); @endphp @if($securityDeposit > 0) @php $escrowMeta = []; if (!empty($escrowRow['metadata'] ?? null)) { try { $escrowMeta = is_array($escrowRow['metadata']) ? $escrowRow['metadata'] : (json_decode((string) $escrowRow['metadata'], true) ?: []); } catch (\Throwable $e) { $escrowMeta = []; } } $depositStatus = strtolower((string) ($request->deposit_status ?? ($escrowMeta['deposit_status'] ?? 'pending'))); $depositRetained = (float) ($request->deposit_retained ?? ($escrowMeta['deposit_retained'] ?? 0)); $depositReason = trim((string) ($request->deposit_retention_reason ?? ($escrowMeta['deposit_retention_reason'] ?? ''))); $depositReturned = max(0, $securityDeposit - $depositRetained); if (isset($escrowMeta['deposit_returned'])) { $depositReturned = max(0, (float) $escrowMeta['deposit_returned']); } $depositProcessedAt = null; $processedCandidate = $request->equipment_returned_at ?? ($escrowMeta['deposit_processed_at'] ?? null); if (!empty($processedCandidate)) { try { $depositProcessedAt = \Illuminate\Support\Carbon::parse($processedCandidate)->format('d/m/Y à H:i'); } catch (\Throwable $e) { $depositProcessedAt = null; } } $isReturned = $depositStatus === 'returned' || ($depositRetained <= 0 && !empty($depositProcessedAt)); $isRetained = $depositStatus === 'retained' || ($depositRetained >= $securityDeposit && $securityDeposit > 0); $isPartial = $depositStatus === 'partial' || (!$isReturned && !$isRetained && $depositRetained > 0); @endphp

Statut 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 intégrale: {{ number_format($depositRetained, 2) }}€

@else

En attente de restitution

@endif @if($depositReason !== '')

{{ $depositReason }}

@endif @if($depositProcessedAt)

Traitée le {{ $depositProcessedAt }}

@endif
@endif
@endif
@endsection