@extends('reports.pdf.layout') @section('title', $data['meta']['title']) @php $meta = $data['meta']; $kpis = $data['kpis']; $top5 = $data['top5']; $energy = $data['tco_per_energy']; $series = $data['monthly_series']; $fmtNum = function ($v, $unit = '') { if ($v === null) return '—'; $s = is_numeric($v) ? number_format((float) $v, 0, ',', ' ') : (string) $v; return trim($s . ' ' . $unit); }; $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'; }; // Per-energy bar geometry — 3 vertical bars. $barW = 320; $barH = 130; $barPadX = 30; $barPadY = 18; $barLabels = ['Thermique', 'Hybride', 'Électrique']; $barValues = [(float) ($energy['thermique'] ?? 0), (float) ($energy['hybride'] ?? 0), (float) ($energy['electrique'] ?? 0)]; $barColors = ['#3B82F6', '#F59E0B', '#10B981']; $barMax = max($barValues + [1]); $barCount = count($barLabels); $barSlot = ($barW - 2 * $barPadX) / $barCount; $barWidth = $barSlot * 0.55; // Line chart geometry — TCO per vehicle. $chartW = 480; $chartH = 140; $padX = 30; $padY = 18; $values = array_filter(array_map(fn ($r) => $r['tco_per_vehicle'], $series), fn ($v) => $v !== null); $minV = !empty($values) ? min($values) : 0; $maxV = !empty($values) ? max($values) : 1; if ($minV === $maxV) { $maxV = $minV + 1; } $stepX = count($series) > 1 ? ($chartW - 2 * $padX) / (count($series) - 1) : 0; $points = []; foreach ($series as $i => $r) { if ($r['tco_per_vehicle'] === null) continue; $x = $padX + $i * $stepX; $y = $chartH - $padY - (($r['tco_per_vehicle'] - $minV) / ($maxV - $minV)) * ($chartH - 2 * $padY); $points[] = ['x' => $x, 'y' => $y, 'label' => $r['label'], 'value' => $r['tco_per_vehicle']]; } $polyline = implode(' ', array_map(fn ($p) => "{$p['x']},{$p['y']}", $points)); @endphp @section('content')
DADYCAR FLEET MANAGER

{{ $meta['title'] }}

Dépenses & Coûts {{ $meta['code'] }} Période : {{ $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 stratégiques

TCO moyen / véhicule
{{ $fmtNum($kpis['tco_per_vehicle']['value']) }}{{ $kpis['tco_per_vehicle']['unit'] }}
@if ($kpis['tco_per_vehicle']['delta'] !== null)
{{ $fmtDelta($kpis['tco_per_vehicle']['delta']) }} {{ $kpis['tco_per_vehicle']['delta_label'] }}
@else
{{ $kpis['tco_per_vehicle']['delta_label'] ?? '' }}
@endif
Véhicule le plus coûteux
{{ $fmtNum($kpis['most_expensive']['value']) }}{{ $kpis['most_expensive']['unit'] }}
{{ $kpis['most_expensive']['delta_label'] }}
Électrique vs Thermique
{{ $fmtNum($kpis['ev_vs_ice']['value']) }}{{ $kpis['ev_vs_ice']['unit'] }}
{{ $kpis['ev_vs_ice']['delta_label'] }}
Coût total parc
{{ $fmtNum($kpis['total_cost']['value']) }}{{ $kpis['total_cost']['unit'] }}
@if ($kpis['total_cost']['delta'] !== null)
{{ $fmtDelta($kpis['total_cost']['delta']) }} {{ $kpis['total_cost']['delta_label'] }}
@else
{{ $kpis['total_cost']['delta_label'] }}
@endif

TCO détaillé par véhicule (Top 5)

@if (!empty($top5)) @foreach ($top5 as $r) @endforeach
Véhicule Loyer Carb. Maint. Assur. Amendes Total
{{ $r['vehicle'] }} {{ $fmtNum($r['rent'], '€') }} {{ $fmtNum($r['fuel'], '€') }} {{ $fmtNum($r['maintenance'], '€') }} {{ $fmtNum($r['insurance'], '€') }} {{ $fmtNum($r['fines'], '€') }} {{ $fmtNum($r['total'], '€') }}
@else

Aucune dépense pour les véhicules en scope.

@endif

TCO moyen par énergie

@if (array_sum($barValues) > 0) @foreach ($barLabels as $i => $label) @php $h = $barMax > 0 ? (($barValues[$i] / $barMax) * ($barH - 2 * $barPadY)) : 0; $x = $barPadX + $i * $barSlot + ($barSlot - $barWidth) / 2; $y = $barH - $barPadY - $h; @endphp {{ number_format($barValues[$i], 0, ',', ' ') }} € {{ $label }} @endforeach @else

Pas assez de données par type d'énergie.

@endif

Évolution TCO (6 mois)

@if (!empty($points)) @foreach ($points as $p) {{ $p['label'] }} {{ number_format($p['value'], 0, ',', ' ') }} @endforeach @else

Pas de données de coût pour la période.

@endif @endsection