@php // Traductions des statuts bruts (order_status/payment_status), alignées sur le // vocabulaire déjà utilisé côté frontend (cf. FrenchTranslationsSeeder, clés // "common.*"). Pas de dépendance à la table Translation ici : cette vue est // rendue côté serveur pour dompdf, sans accès au store i18n Vue. $orderStatusLabels = [ 'pending' => 'En attente', 'received' => 'Reçu', 'completed' => 'Terminé', 'ordered' => 'Commandé', 'confirmed' => 'Confirmé', 'processing' => 'En cours', 'shipping' => 'Expédition', 'delivered' => 'Livré', ]; $paymentStatusLabels = [ 'paid' => 'Payé', 'unpaid' => 'Impayé', 'partially_paid' => 'Partiellement payé', ]; // Reproduit formatAmountCurrency() du frontend (resources/js/common/composable/common.js) : // format fr-FR (séparateur de milliers = espace, décimales = virgule, 0 à 2 décimales // significatives), pour que la facture affiche les montants exactement comme le reste // de l'app plutôt que le float brut. $formatAmount = function ($amount) { $numericAmount = (float) $amount; $formatted = number_format(round(abs($numericAmount), 2), 2, ',', ' '); if (str_ends_with($formatted, ',00')) { $formatted = substr($formatted, 0, -3); } elseif (preg_match('/,\d0$/', $formatted)) { $formatted = substr($formatted, 0, -1); } return $numericAmount < 0 ? "- {$formatted}" : $formatted; }; // La position du symbole (avant/après le montant) dépend de la devise de la company // (Currency::position, "front" ou "behind") : la facture doit la respecter comme le // fait déjà le frontend, au lieu de toujours mettre le symbole en préfixe. $formatCurrencyAmount = function ($amount) use ($company, $formatAmount) { $formattedAmount = $formatAmount($amount); return $company->currency->position === 'behind' ? "{$formattedAmount} {$company->currency->symbol}" : "{$company->currency->symbol}{$formattedAmount}"; }; @endphp Facture
@if($order->order_type == "purchases") @elseif($order->order_type == "purchase-returns") @elseif($order->order_type == "sales-returns") @elseif($order->order_type == "sales") @endif
Facture d'achatFacture de retour d'achatFacture de retour de venteFacture de vente
{{ $company->name }}
{{ $company->address }}
{{ $company->email }}
{{ $company->phone }}
Facture n° : {{ $order->invoice_number }}
Date de commande : {{ $order->order_date->format($dateTimeFormat) }}
Statut de la commande : {{ $orderStatusLabels[$order->order_status] ?? $order->order_status }}
Statut du paiement : {{ $paymentStatusLabels[$order->payment_status] ?? $order->payment_status }}
@if($order->order_type == "sales" || $order->order_type == "sales-returns") Facturé à @elseif($order->order_type == "purchases" || $order->order_type == "purchase-returns") Facturé par @endif :
{{ $order->user->name ?? 'Non renseigné' }}
@if($order->user?->address) {{ $order->user->address }}
@endif @if($order->user?->phone) {{ $order->user->phone }}
@endif {{ $order->user->email ?? '' }}
@foreach($order->items as $item) @endforeach
# Produit Prix unitaire Quantité Total
{{ $loop->iteration }} {{ $item->product->name }} {{ $formatCurrencyAmount($item->single_unit_price) }} {{ $item->quantity . ' ' . $item->unit->short_name }} {{ $formatCurrencyAmount($item->subtotal) }}

Note :

{{ $order->notes }}

Sous-total {{ $formatCurrencyAmount($order->subtotal) }}
Taxe {{ $formatCurrencyAmount($order->tax_amount) }} ({{ $order->tax_rate }}%)
Remise {{ $formatCurrencyAmount($order->discount) }}
Expédition {{ $formatCurrencyAmount($order->shipping) }}
Total {{ $formatCurrencyAmount($order->total) }}
Articles / Qté totale : {{ $order->total_items . ' / ' . $order->total_quantity }} Montant payé : {{ $formatCurrencyAmount($order->paid_amount) }} Montant dû : {{ $formatCurrencyAmount($order->due_amount) }}