@extends('layouts.erp') @section('title', 'Tableau de bord') @section('page_title', 'Tableau de bord de direction') @section('page_sub', now()->translatedFormat('d F Y').' · '.(optional(\App\Http\Controllers\ScopeController::boutique())->name ?? 'Toutes les agences')) @section('content') @php $benefice = $ca - $depenses; $treso = $caisse + $banque; $den = max(1, abs($benefice) + $depenses); $pBen = (int) round(max(0, $benefice) / $den * 100); $pDep = (int) round($depenses / $den * 100); $pAut = max(0, 100 - $pBen - $pDep); $maxBoutique = max(1, $byBoutique->max() ?? 1); $fmt = fn ($n) => number_format($n, 0, ',', ' ').' F'; $periodeLabels = ['aujourdhui' => "Aujourd'hui", 'mois' => 'Ce mois', 'annee' => 'Cette année']; $geo = array_filter(['pays' => $paysId ?? null, 'ville' => $villeId ?? null]); $dash = fn (array $extra = []) => route('dashboard', array_merge($geo, ['periode' => $periode], $extra)); $depenseLabel = ['aujourdhui' => "Dépenses du jour", 'mois' => 'Dépenses du mois', 'annee' => "Dépenses de l'année"][$periode]; $chartTitle = ['aujourdhui' => "Chiffre d'affaires du jour", 'mois' => 'Chiffre d\'affaires par jour · '.now()->translatedFormat('F Y'), 'annee' => 'Chiffre d\'affaires par mois · '.now()->year][$periode]; @endphp
Aujourd'hui Ce mois Cette année
@if(auth()->user()->allows('reports')) Rapports CSV @endif + Nouvelle vente
@if(auth()->user()->seesAllAgencies()) @php $paysActuel = $countries->firstWhere('id', $paysId); $villeActuelle = $paysActuel?->cities->firstWhere('id', $villeId); @endphp
@csrf
@if($scopeBoutique) /
@csrf
/
@csrf
/ {{ $scopeBoutique->name }} @elseif($paysActuel) / {{ $paysActuel->name }} @if($villeActuelle) / {{ $villeActuelle->name }} @endif @endif
@if($scopeBoutique) @elseif(!$paysActuel) @foreach($countries as $country) {{ $country->name }} @endforeach @elseif(!$villeActuelle) @foreach($paysActuel->cities as $city) {{ $city->name }} @endforeach @else @foreach($villeActuelle->boutiques as $boutique)
@csrf
@endforeach @endif
@endif
Chiffre d'affaires total
{{ $fmt($ca) }}
{{ $periodeLabels[$periode] }} · factures validées, payées et partielles
Bénéfice net {{ $benefice >= 0 ? '+' : '' }}{{ $ca > 0 ? round($benefice / max(1,$ca) * 100, 1) : 0 }} %
{{ $fmt($benefice) }}
CA − dépenses validées
Trésorerie disponible
{{ $fmt($treso) }}
Caisses {{ $fmt($caisse) }} · Banques {{ $fmt($banque) }}
Valeur des stocks
{{ $fmt($stockValue) }}
Prix d'achat × quantités
{{ $depenseLabel }}
{{ $fmt($depenses) }}
Créances clients
{{ $fmt($creances) }}
Dettes fournisseurs
{{ $fmt($dettes) }}
Ruptures / stock faible
{{ $faibles->count() }}
{{ $ruptures }} critique(s) ou rupture(s)
{{ $chartTitle }}
@foreach($chart as $point)
{{ $point['label'] }}
@endforeach
Total {{ $fmt(array_sum(array_column($chart, 'amount'))) }}
Ventes par boutique Voir tout
@forelse($byBoutique as $name => $amount)
{{ $name }}
{{ number_format($amount / 1000000, 1, ',', ' ') }} M
@empty
Aucune vente validée.
@endforelse
Dépenses vs bénéfices
{{ $pBen }}%
Bénéf. {{ $fmt(max(0,$benefice)) }}
Dép. {{ $fmt($depenses) }}
Autres {{ $pAut }}%
Alertes SAV Voir tout
@forelse($savAlerts as $sav)
{{ $sav->number }} · {{ $sav->product_name }}
{{ $sav->client->name ?? '' }} · {{ $sav->status }}
@empty
Aucun dossier ouvert.
@endforelse
Dernières ventes Voir tout
@forelse($ventesRecentes as $v)
{{ $v->number }}
{{ $v->client->name ?? 'Client comptoir' }}
{{ $fmt($v->total) }}
{{ ucfirst($v->status) }}
@empty
Aucune vente.
@endforelse
Produits à faible stock Voir la liste
@forelse($faibles->take(4) as $p)
@if(auth()->user()->allows('purchases')) {{ $p->name }} @else {{ $p->name }} @endif
{{ $p->reference }}
Reste {{ $p->total_stock }}
@empty
Stocks au-dessus des seuils.
@endforelse
Clients à relancer Voir tout
@forelse($relances as $r)
{{ $r->client->name ?? 'Client' }}
{{ $r->motif }} · {{ optional($r->next_relance_date)->format('d/m') }}
@if($url = $r->whatsappUrl()) WhatsApp @endif
{{ $r->result ? str_replace('_',' ',$r->result) : 'À faire' }}
@empty
Aucune relance planifiée.
@endforelse
Fiscalité Voir tout
@forelse($fiscals as $f)
{{ $f->obligation }}
{{ $f->period }} · {{ optional($f->due_date)->format('d/m/Y') }}
{{ str_replace('_',' ',$f->status) }}
@empty
Aucune obligation.
@endforelse
Alertes à traiter
@forelse($alerts as $alert) {{ $alert['kind'] }}
{{ $alert['title'] }}
{{ $alert['detail'] }}
@empty
Rien à traiter pour le moment.
@endforelse
@endsection