@extends('layouts.app') @section('title', 'Commande #' . $foodOrder->order_number) @push('styles') @endpush @section('content') {{-- Section d'aide --}}
{{-- Header --}} @php // Déterminer la politique de paiement $paymentPolicy = $foodOrder->getPaymentPolicy(); $requiresOnlinePayment = $paymentPolicy['type'] !== 'cash'; $onlinePaymentPending = $requiresOnlinePayment && $foodOrder->payment_status !== 'paid'; $prestataireCancelBreakdown = $foodOrder->getCancellationBreakdown('prestataire'); $statusConfig = [ 'pending' => ['gradient' => 'from-amber-500 to-orange-500', 'icon' => '⏳', 'label' => 'En attente', 'bg' => 'bg-amber-100', 'text' => 'text-amber-700'], 'accepted' => ['gradient' => 'from-blue-500 to-blue-600', 'icon' => '✓', 'label' => 'Acceptée', 'bg' => 'bg-blue-100', 'text' => 'text-blue-700'], 'preparing' => ['gradient' => 'from-purple-500 to-purple-600', 'icon' => '🔥', 'label' => 'En préparation', 'bg' => 'bg-purple-100', 'text' => 'text-purple-700'], 'ready' => ['gradient' => 'from-green-500 to-emerald-500', 'icon' => '✅', 'label' => 'Prête', 'bg' => 'bg-green-100', 'text' => 'text-green-700'], 'delivered' => ['gradient' => 'from-emerald-500 to-teal-500', 'icon' => '📦', 'label' => 'Livrée', 'bg' => 'bg-emerald-100', 'text' => 'text-emerald-700'], 'completed' => ['gradient' => 'from-gray-500 to-gray-600', 'icon' => '🏁', 'label' => 'Terminée', 'bg' => 'bg-gray-100', 'text' => 'text-gray-700'], 'cancelled' => ['gradient' => 'from-red-500 to-red-600', 'icon' => '❌', 'label' => 'Annulée', 'bg' => 'bg-red-100', 'text' => 'text-red-700'], 'rejected' => ['gradient' => 'from-red-500 to-red-600', 'icon' => '🚫', 'label' => 'Refusée', 'bg' => 'bg-red-100', 'text' => 'text-red-700'], ]; $config = $statusConfig[$foodOrder->status] ?? $statusConfig['pending']; @endphp
Retour aux commandes
{{ $config['icon'] }}

Commande #{{ $foodOrder->order_number }}

{{ $config['label'] }} Créée le {{ $foodOrder->created_at->format('d/m/Y à H:i') }} @if($foodOrder->requested_at) 📅 Pour le {{ $foodOrder->requested_at->format('d/m/Y à H:i') }} @endif
{{-- Colonne principale --}}
{{-- Actions rapides --}} @if(!in_array($foodOrder->status, ['completed', 'cancelled', 'rejected', 'delivered']))

Actions rapides

{{-- Alerte paiement en ligne requis --}} @if($onlinePaymentPending && $foodOrder->status === 'ready')
⚠️

Paiement en ligne requis

@if($paymentPolicy['type'] === 'full_prepay') Ce produit nécessite un paiement intégral en ligne avant remise. @else Ce produit nécessite un acompte de {{ $paymentPolicy['percent'] }}% avant remise. @endif
Le client doit d'abord payer en ligne pour que vous puissiez valider la remise.

@endif
@if($foodOrder->status === 'pending')
@csrf
@elseif($foodOrder->status === 'accepted')
@csrf
@elseif($foodOrder->status === 'preparing')
@csrf
@elseif($foodOrder->status === 'ready') @if($onlinePaymentPending) {{-- Bouton désactivé si paiement en ligne requis mais pas fait --}} ⏳ En attente du paiement du client @else @if($foodOrder->delivery_type === 'pickup')
@csrf
@else @endif @endif @endif
@endif {{-- Articles commandés --}}

Articles commandés {{ $foodOrder->items->sum('quantity') }} articles

@foreach($foodOrder->items as $item)
{{ $item->quantity }}

{{ $item->product_name }}

@if($item->options)

{{ is_array($item->options) ? implode(', ', $item->options) : $item->options }}

@endif
{{ number_format($item->unit_price * $item->quantity, 2) }} €

{{ number_format($item->unit_price, 2) }}€/unité

@endforeach
Sous-total {{ number_format($foodOrder->subtotal ?? $foodOrder->total, 2) }} €
@if($foodOrder->delivery_fee > 0)
Frais de livraison {{ number_format($foodOrder->delivery_fee, 2) }} €
@endif @if(isset($foodOrder->discount) && $foodOrder->discount > 0)
Réduction -{{ number_format($foodOrder->discount, 2) }} €
@endif
Total {{ number_format($foodOrder->total, 2) }} €
{{-- Notes du client --}} @if($foodOrder->notes)

Notes du client

{{ $foodOrder->notes }}
@endif {{-- Historique / Timeline --}}

Historique de la commande

📝

Commande passée

{{ $foodOrder->created_at->format('d/m/Y à H:i') }}

@if($foodOrder->accepted_at)

Commande acceptée

{{ $foodOrder->accepted_at->format('d/m/Y à H:i') }}

@endif @if($foodOrder->preparing_at)
🔥

Préparation démarrée

{{ $foodOrder->preparing_at->format('d/m/Y à H:i') }}

@endif @if($foodOrder->ready_at)

Commande prête

{{ $foodOrder->ready_at->format('d/m/Y à H:i') }}

@endif @if($foodOrder->delivered_at)
📦

{{ $foodOrder->delivery_type === 'pickup' ? 'Récupérée par le client' : 'Commande livrée' }}

{{ $foodOrder->delivered_at->format('d/m/Y à H:i') }}

@endif @if($foodOrder->status === 'rejected')
🚫

Commande refusée

@if($foodOrder->rejection_reason)

{{ $foodOrder->rejection_reason }}

@endif
@endif @if($foodOrder->status === 'cancelled')

Commande annulée

@if(isset($foodOrder->cancellation_reason) && $foodOrder->cancellation_reason)

{{ $foodOrder->cancellation_reason }}

@endif
@endif
{{-- Sidebar --}}
{{-- Informations client --}}

Client

@if($foodOrder->client && $foodOrder->client->profile_photo_url) {{ $foodOrder->client->name }} @else {{ strtoupper(substr($foodOrder->client->name ?? 'C', 0, 1)) }} @endif

{{ $foodOrder->client->name ?? 'Client' }}

{{ $foodOrder->client->email ?? '' }}

@if($foodOrder->client && $foodOrder->client->phone) {{ $foodOrder->client->phone }} @endif
{{-- Type de livraison --}}

@if($foodOrder->delivery_type === 'pickup') @else @endif {{ $foodOrder->delivery_type === 'pickup' ? 'À emporter' : 'Livraison' }}

@if($foodOrder->delivery_type === 'pickup')

Le client viendra récupérer sa commande sur place

@if(isset($foodOrder->pickup_time) && $foodOrder->pickup_time)

🕐 Heure souhaitée : {{ \Carbon\Carbon::parse($foodOrder->pickup_time)->format('H:i') }}

@endif
@else {{-- Section Livraison complète pour le livreur --}}
{{-- Contact du destinataire --}}

Contact livraison

@if($foodOrder->delivery_contact_name)

{{ $foodOrder->delivery_contact_name }}

@endif @if($foodOrder->delivery_phone) {{ $foodOrder->delivery_phone }} @elseif($foodOrder->client && $foodOrder->client->phone) {{ $foodOrder->client->phone }} @else

Pas de téléphone renseigné

@endif
{{-- Adresse complète --}}

Adresse de livraison

{{ $foodOrder->delivery_address }}

{{-- Bouton GPS pour naviguer --}} @if($foodOrder->delivery_lat && $foodOrder->delivery_lng) Ouvrir dans GPS @elseif($foodOrder->delivery_address) Ouvrir dans Maps @endif
{{-- Détails de l'immeuble --}} @if($foodOrder->delivery_floor || $foodOrder->delivery_door_code || $foodOrder->delivery_building_info)

Infos immeuble

@if($foodOrder->delivery_floor)
🏢 Étage: {{ $foodOrder->delivery_floor }}
@endif @if($foodOrder->delivery_door_code)
🔑 Code: {{ $foodOrder->delivery_door_code }}
@endif @if($foodOrder->delivery_building_info)
📝 Instructions:

{{ $foodOrder->delivery_building_info }}

@endif
@endif {{-- Carte de prévisualisation avec OpenStreetMap --}} @if($foodOrder->delivery_lat && $foodOrder->delivery_lng)
@endif
@endif
{{-- Livreur assigné / Assignation --}} @if($foodOrder->delivery_type === 'delivery')

Livreur @if($foodOrder->driver_id) Assigné @else En attente @endif

@if($foodOrder->driver) {{-- Livreur assigné --}}
{{ $foodOrder->driver->vehicle_icon ?? '🚗' }}

{{ $foodOrder->driver->full_name }}

{{ ucfirst($foodOrder->driver->vehicle_type ?? 'Véhicule') }}

@if($foodOrder->driver->phone) 📞 {{ $foodOrder->driver->phone }} @endif
@if($foodOrder->driver->rating)
⭐ {{ number_format($foodOrder->driver->rating, 1) }}
@endif {{ $foodOrder->driver->completed_deliveries ?? 0 }} livraisons
{{-- Statut livraison --}}
Statut livraison: {{ $foodOrder->delivery_status_label ?? ucfirst($foodOrder->delivery_status ?? 'En attente') }}
@if($foodOrder->estimated_delivery_time)

⏱️ Temps estimé: ~{{ $foodOrder->estimated_delivery_time }} min

@endif @if($foodOrder->delivery_distance)

📍 Distance: {{ $foodOrder->delivery_distance }} km

@endif
@else {{-- Pas de livreur - En attente d'un livreur --}}
🔍

En attente d'un livreur

Les livreurs disponibles verront cette commande

@if(in_array($foodOrder->status, ['accepted', 'preparing', 'ready']))

💡 Un livreur acceptera automatiquement cette commande quand elle sera prête, ou vous pouvez gérer la livraison vous-même.

@endif
@endif
@endif {{-- Paiement --}}

Paiement

Montant {{ number_format($foodOrder->total, 2) }} €
Méthode @if(isset($foodOrder->payment_method) && $foodOrder->payment_method) @if($foodOrder->payment_method === 'card') 💳 Carte bancaire @elseif($foodOrder->payment_method === 'cash') 💵 Espèces @else {{ ucfirst($foodOrder->payment_method) }} @endif @else Non défini @endif
Statut @if($foodOrder->payment_status === 'paid') Payé @elseif($foodOrder->payment_status === 'pending') ⏳ En attente @else {{ ucfirst($foodOrder->payment_status ?? 'Inconnu') }} @endif
@if($foodOrder->paid_at)
Payé le {{ $foodOrder->paid_at->format('d/m/Y à H:i') }}
@endif
{{-- Bouton confirmation paiement espèces (uniquement si policy = cash) --}} @if($foodOrder->payment_status !== 'paid' && !in_array($foodOrder->status, ['cancelled', 'rejected']))
@if($paymentPolicy['type'] === 'cash')

Le client n'a pas encore payé

@csrf
@else {{-- Paiement en ligne requis --}}

@if($paymentPolicy['type'] === 'full_prepay') Paiement en ligne requis
Le client doit payer 100% en ligne avant récupération. @else Acompte en ligne requis
Le client doit payer {{ $paymentPolicy['percent'] }}% en ligne. @endif

@endif
@endif
{{-- Modal de rejet --}} @if($foodOrder->status === 'pending') @push('scripts') @endpush @endif {{-- Modal d'annulation (pour commandes acceptées, en préparation, prêtes) --}} @if(in_array($foodOrder->status, ['accepted', 'preparing', 'ready'])) @push('scripts') @endpush @endif @endsection