@extends('reports.pdf.layout') @section('title', $data['meta']['title']) @php $meta = $data['meta']; $kpis = $data['kpis_annual']; $series = $data['monthly_series'] ?? []; $comparison = $data['comparison'] ?? []; $esg = $data['esg'] ?? null; $fmtNum = function ($v, $unit = '') { if ($v === null) return '—'; $s = is_numeric($v) ? number_format((float) $v, 0, ',', ' ') : (string) $v; return trim($s . ' ' . $unit); }; $fmtCompactEur = function ($v) { if ($v === null) return '—'; $abs = abs((float) $v); if ($abs >= 1_000_000) return number_format($v / 1_000_000, 2, ',', ' ') . ' M€'; if ($abs >= 1_000) return number_format($v / 1_000, 0, ',', ' ') . ' k€'; return number_format($v, 0, ',', ' ') . ' €'; }; $fmtDelta = function ($v, $unit = '%') { if ($v === null) return null; $sign = $v > 0 ? '+' : ''; return $sign . number_format((float) $v, 1, ',', ' ') . $unit; }; $deltaClass = function ($v, bool $maximize = true) { if ($v === null || $v == 0) return 'delta-flat'; $up = $v > 0; return ($up === $maximize) ? 'delta-up' : 'delta-down'; }; // ── 12-month dual-axis bar chart (TCO bars left, Sinistres bars right) $chartW = 540; $chartH = 220; $padX = 38; $padY = 24; $tcos = array_map(fn ($r) => $r['tco'] ?? 0, $series); $claims = array_map(fn ($r) => (int) ($r['claims'] ?? 0), $series); $maxL = !empty($tcos) ? max($tcos) : 0; if ($maxL == 0) $maxL = 1; $maxR = !empty($claims) ? max($claims) : 0; if ($maxR == 0) $maxR = 1; $maxL = $maxL * 1.1; $maxR = max(1, ceil($maxR * 1.2)); $count = max(1, count($series)); $bandW = ($chartW - 2 * $padX) / $count; $barW = max(2, ($bandW - 6) / 2); $baselineY = $chartH - $padY; $usableH = $chartH - 2 * $padY; @endphp @section('content')
DADYCAR FLEET MANAGER

{{ $meta['title'] }}

Synthèse globale {{ $meta['code'] }} Année : {{ $meta['period']['label'] }} · {{ $meta['site_label'] }} · {{ $meta['total_vehicles'] }} véhicules · Généré le {{ $meta['generated_at']->locale('fr')->isoFormat('D MMMM YYYY') }}

Indicateurs annuels

TCO total annuel
{{ $fmtCompactEur($kpis['tco_total']['value']) }}
@if ($kpis['tco_total']['delta'] !== null)
{{ $fmtDelta($kpis['tco_total']['delta']) }} {{ $kpis['tco_total']['delta_label'] }}
@else
{{ $kpis['tco_total']['delta_label'] }}
@endif
TCO moy / véh
{{ $fmtNum($kpis['tco_per_vehicle']['value']) }}€
{{ $kpis['tco_per_vehicle']['delta_label'] }}
Économies réalisées
{{ $fmtCompactEur($kpis['savings']['value']) }}
{{ $kpis['savings']['delta_label'] }}
Sinistres année
{{ $fmtNum($kpis['claims_year']['value']) }}
@php $cd = $kpis['claims_year']['delta']; @endphp @if ($cd !== null && $cd !== 0)
{{ $cd > 0 ? '+' : '' }}{{ $cd }} · {{ $kpis['claims_year']['delta_label'] }}
@else
{{ $kpis['claims_year']['delta_label'] }}
@endif

Évolution annuelle du TCO et des sinistres ({{ $meta['period']['label'] }})

@if (!empty($series)) {{-- baseline --}} {{-- left axis labels (€) --}} € {{ number_format($maxL, 0, ',', ' ') }} € 0 {{-- right axis labels (claims) --}} {{ (int) $maxR }} 0 @foreach ($series as $i => $r) @php $bandX = $padX + $i * $bandW; $tcoVal = $r['tco'] ?? 0; $claimsVal = $r['claims'] ?? 0; $tcoH = $maxL > 0 ? ($tcoVal / $maxL) * $usableH : 0; $claimsH = $maxR > 0 ? ($claimsVal / $maxR) * $usableH : 0; $tcoX = $bandX + ($bandW - 2 * $barW - 2) / 2; $claimsX = $tcoX + $barW + 2; @endphp {{ $r['label'] }} @endforeach {{-- legend --}} TCO (€) Sinistres @else

Pas de données mensuelles pour l'année.

@endif

Analyse financière — Comparaison N vs N-1

@if (!empty($comparison)) @foreach ($comparison as $c) @php $dir = $c['trend']['direction'] ?? 'flat'; $tone = $c['trend']['tone'] ?? 'neutral'; $arrow = $dir === 'up' ? '▲' : ($dir === 'down' ? '▼' : '–'); $color = $tone === 'success' ? '#10B981' : ($tone === 'danger' ? '#EF4444' : '#6B7280'); @endphp @endforeach
Poste de coût {{ $meta['year'] - 1 }} {{ $meta['year'] }} Évolution Tendance
{{ $c['category'] }} {{ $fmtCompactEur($c['prev']) }} {{ $fmtCompactEur($c['curr']) }} {{ $fmtDelta($c['change']) ?? '—' }} {{ $arrow }}
@else

Pas de comparaison disponible (aucune dépense N-1).

@endif @if ($esg && !empty($esg['items']))
{{ $esg['title'] }}
@foreach ($esg['items'] as $item) @endforeach
{{ $item['label'] }}
{{ $item['value'] }}
@endif @endsection