@extends('reports.pdf.layout') @section('title', $data['meta']['title']) @php $meta = $data['meta']; $k = $data['kpis']; $rows = $data['rows']; $fmtNum = function ($v, $unit = '') { if ($v === null) return '—'; $s = is_numeric($v) ? number_format((float) $v, (is_int($v) || ((float) $v) == (int) $v) ? 0 : 1, ',', ' ') : (string) $v; return trim($s . ' ' . $unit); }; // Horizontal-bar geometry — score /100 per garage, ranked desc. $barCount = max(1, count($rows)); $rowH = 22; $svgPad = 8; $labelW = 140; $svgW = 480; $svgH = $svgPad * 2 + $rowH * $barCount; $maxScore = 100; $trackW = $svgW - $labelW - $svgPad - 60; // leave 60pt for the value text $scoreColor = function ($s) { if ($s >= 80) return '#10B981'; if ($s >= 60) return '#FBBF24'; return '#EF4444'; }; $scoreTone = function ($s) { if ($s >= 80) return 'success'; if ($s >= 60) return 'warning'; return 'danger'; }; @endphp @section('content')
DADYCAR FLEET MANAGER

{{ $meta['title'] }}

Maintenance {{ $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 clés

Garages évalués
{{ $fmtNum($k['garages_count']['value']) }}
{{ $k['garages_count']['caption'] }}
Meilleur prestataire
{{ $k['best_garage']['value'] ?? '—' }}
{{ $k['best_garage']['caption'] }}
Garage à risque
{{ $k['worst_garage']['value'] ?? '—' }}
{{ $k['worst_garage']['caption'] }}
Coût moyen / OT
{{ $fmtNum($k['avg_cost_ot']['value']) }}{{ $k['avg_cost_ot']['unit'] }}
{{ $k['avg_cost_ot']['caption'] }}

Classement des garages (score global /100)

@if (!empty($rows)) @foreach ($rows as $i => $r) @php $y = $svgPad + $i * $rowH + 4; $w = ($r['score'] / $maxScore) * $trackW; $color = $scoreColor($r['score']); @endphp {{ \Illuminate\Support\Str::limit($r['garage'], 22) }} {{ $r['score'] }}/100 @endforeach @else

Aucun OT garage sur la période.

@endif

Détail performance par garage

@if (!empty($rows)) @foreach ($rows as $r) @php $tone = $scoreTone($r['score']); $bg = $tone === 'success' ? '#D1FAE5' : ($tone === 'warning' ? '#FEF3C7' : '#FEE2E2'); $fg = $tone === 'success' ? '#065F46' : ($tone === 'warning' ? '#92400E' : '#991B1B'); @endphp @endforeach
Garage OT Délai (j) Coût moy. Récl. Score
{{ $r['garage'] }} {{ $r['ot'] }} {{ $r['delay_days'] !== null ? number_format($r['delay_days'], 1, ',', ' ') . ' j' : '—' }} {{ $r['avg_cost'] !== null ? number_format($r['avg_cost'], 0, ',', ' ') . ' €' : '—' }} À venir {{ $r['score'] }}

Note clients : module évaluation à venir. Score basé sur le délai moyen et le coût relatif.

@else

Aucun garage à afficher.

@endif @endsection