@extends('admin.layout') @section('title', __('Statistiques')) {{-- Devis et factures (StatController). L'échelle donne la taille de la période regardée — un jour, un mois, une année — et toute la page porte sur elle : les chiffres, où, pour qui, par qui, puis ses documents. Le graphique montre ce qu'il y a autour, la barre choisie mise en avant ; un clic sur une autre barre, les flèches ou le champ de date la changent. Le bouton Nombre / Montant TTC vaut pour le graphique, le tri des classements et la comparaison avec l'an dernier. Montants TTC. Factures émises seulement, à leur date de facture. Le trait en pointillé sur chaque barre, c'est la même période un an plus tôt. --}} @section('content') @php $base = ['quoi' => $quoi, 'echelle' => $echelle, 'mesure' => $mesure, 'periode' => $periode]; $lien = fn (array $modifs) => route('stats.index', array_filter( array_merge($base, $modifs), fn ($v) => $v !== null && $v !== '' )); $euros = fn ($v) => number_format((float) $v, 0, ',', ' ') . ' €'; $court = fn ($v) => $v >= 1000000 ? number_format($v / 1000000, 1, ',', ' ') . ' M€' : ($v >= 1000 ? number_format($v / 1000, 0, ',', ' ') . ' k€' : number_format($v, 0, ',', ' ') . ' €'); $nombre = fn ($v) => number_format((int) $v, 0, ',', ' '); // La hauteur des barres et des traits de l'an dernier, sur la même échelle. $valeur = fn (?array $p) => $p === null ? 0 : ($mesure === 'ttc' ? (float) ($p['ttc'] ?? 0) : (int) ($p['n'] ?? 0)); $max = max(1, ...array_map(fn ($b) => max($valeur($b['n'] === null ? null : $b), $valeur($b['avant'])), $barres ?: [['n' => 0, 'ttc' => 0, 'avant' => null]])); $documentsLibelle = $quoi === 'factures' ? __('factures') : __('devis'); $routeDocument = $quoi === 'factures' ? 'factures.show' : 'devis.show'; @endphp
{{ __('Détail momentanément indisponible — la liaison Gestan ne répond pas.') }}
@elseif ($repartition['total']['n'] === 0){{ $quoi === 'factures' ? __('Aucune facture émise sur cette période.') : __('Aucun devis sur cette période.') }}
@else @php $departements = config('departements', []); // Un devis n'est pas encore de l'argent : sur cet onglet, // on classe ce qui a été devisé. Et au nombre, on ne dit // pas « rapportent ». $titreClients = match ([$quoi, $mesure]) { ['factures', 'ttc'] => __('Clients qui rapportent le plus'), ['factures', 'nombre'] => __('Clients les plus facturés'), ['devis', 'ttc'] => __('Clients aux plus gros devis'), ['devis', 'nombre'] => __('Clients aux plus nombreux devis'), }; $blocs = [ ['titre' => $titreClients, 'lignes' => $repartition['clients'], 'client' => true], ['titre' => __('Commerciaux'), 'lignes' => $repartition['commerciaux']], ['titre' => __('Villes'), 'lignes' => $repartition['villes']], ['titre' => __('Départements'), 'lignes' => array_map(fn ($d) => ['libelle' => trim($d['libelle'] . ' ' . ($departements[$d['libelle']] ?? ''))] + $d, $repartition['departements'])], ]; @endphp{{ __('Rien sur cette période.') }}
@else| {{ __('N°') }} | {{ __('Client') }} | {{ __('Ville') }} | {{ __('Nature') }} | {{ __('Commercial') }} | {{ __('Statut') }} | {{ __('TTC') }} | {{ __('Date') }} |
|---|---|---|---|---|---|---|---|
| {{ $d['id'] }} | @if ($d['idc']) {{ $d['client'] }} @else {{ $d['client'] }} @endif | {{ $d['ville'] }} | {{ $d['libelle'] }} | {{ $d['commercial'] }} | @include('admin.gestan.partials.badge-status', ['statut' => $d['statut']]) | {{ number_format((float) $d['ttc'], 2, ',', ' ') }} € | {{ $d['date'] }} |