route('login'); }); use App\Models\Order; use App\Http\Resources\OrderResource; Route::get('/dashboard', function () { // 1. Compteurs par statut $counts = [ 'draft' => Order::where('status', 'draft')->count(), 'validated' => Order::where('status', 'validated')->count(), 'ordered' => Order::where('status', 'ordered')->count(), 'delivered' => Order::where('status', 'delivered')->count(), 'closed' => Order::where('status', 'closed')->count(), ]; // 2. Montant total engagé HT (commandes Validées + Commandées) $totalEngagedHt = Order::whereIn('status', ['validated', 'ordered'])->sum('amount_ht'); // 3. Montant total TTC des commandes de l'année en cours $totalTtc = Order::whereYear('created_at', now()->year)->sum('amount_ttc'); // 4. Liste des commandes en attente de livraison (Validées + Commandées) // Classées de la plus urgente à la plus lointaine $pendingDeliveries = Order::whereIn('status', ['validated', 'ordered']) ->orderBy('delivery_deadline', 'asc') ->limit(10) ->get(); // 5. Alertes : commandes dont la date souhaitée est dépassée (et non livrées/closes) $overdueOrders = Order::overdue() ->orderBy('delivery_deadline', 'asc') ->get(); return Inertia::render('Dashboard', [ 'metrics' => [ 'counts' => $counts, 'total_engaged_ht' => (float) $totalEngagedHt, 'total_ttc' => (float) $totalTtc, 'overdue_count' => $overdueOrders->count(), ], 'pending_deliveries' => OrderResource::collection($pendingDeliveries), 'overdue_orders' => OrderResource::collection($overdueOrders), ]); })->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); // Suivi des commandes Route::post('/commandes/{commande}/transition', [OrderController::class, 'transition'])->name('commandes.transition'); Route::resource('commandes', OrderController::class); // Pièces jointes Route::get('/attachments/{attachment}', [AttachmentController::class, 'show'])->name('attachments.show'); // Gestion de matériel d'infrastructure Route::resource('materiels', HardwareController::class); }); require __DIR__.'/auth.php';