{{-- HEADER fixe (répété sur chaque page) --}} {{-- FOOTER fixe (répété sur chaque page) --}} @php // Caissier : priorité order.user.fullname, fallback metadata.cashier_name $cashierName = null; $orderUser = $transaction->order?->user ?? null; if ($orderUser) { // Tentative fullname (accessor) ou first_name + last_name $cashierName = $orderUser->name ?? '-'; } @endphp
{{-- ═══════════════ BLOC INFO CLIENT + PAIEMENT ═══════════════ --}} {{-- Colonne gauche : Client --}} {{-- Colonne droite : Paiement --}}
Facturé à
Email : {{ $transaction->customer?->email ?? '—' }} Téléphone : {{ $transaction->customer?->phone ?? '—' }}
Paiement
Méthode : {{ strtoupper($transaction->payment_method ?? '—') }} Numéro : {{ strtoupper($transaction->masked_payment_phone ?? '—') }} @if (!empty($cashierName)) Caissier : {{ $cashierName }} @endif
{{-- ═══════════════ DÉTAIL DES ARTICLES ═══════════════ --}}
Détail · {{ $transaction->offering->name ?? 'Paiement' }}
@foreach ($lines as $line) @endforeach
Désignation Prix unitaire Qté Total
{{ $line['name'] }} {{ number_format($line['unit_price'], 0, ',', ' ') }} F {{ $line['quantity'] }} {{ number_format($line['total'], 0, ',', ' ') }} F
{{-- ═══════════════ TOTAUX ═══════════════ --}}
@if ($transaction->total_fees > 0) @endif {{-- ✨ Label TOTAL aligné à gauche --}}
Sous-total {{ number_format($transaction->amount, 0, ',', ' ') }} F CFA
Frais {{ number_format($transaction->total_fees, 0, ',', ' ') }} F CFA
TOTAL {{ number_format($transaction->total_amount, 0, ',', ' ') }} F CFA
{{-- ═══════════════ METADATA + QR ═══════════════ --}} @php $meta = $metadata ?? ($transaction->order?->metadata ?? []); // Si metadata est une collection ou JSON, normaliser en tableau if (is_string($meta)) { $decoded = json_decode($meta, true); $meta = is_array($decoded) ? $decoded : []; } // Extraire le qrcode et le retirer de la liste affichée $qrcodeValue = is_array($meta) ? $meta['qrcode'] ?? null : null; $displayMeta = is_array($meta) ? collect($meta) ->except(['qrcode', 'mpos', 'offering_id', 'cashier_id', 'cashier_name', 'no_in_invoice']) ->filter(fn($v) => !is_null($v) && $v !== '') ->all() : []; @endphp @if (count($displayMeta) > 0 || $qrcodeValue)
Informations complémentaires
{{-- Colonne metadata + notes --}} {{-- Colonne QR --}}
@if ($qrcodeValue && !empty($qrSvg))
@endif
@endif