Files
OrderCheck/routes/web.php
2026-06-15 08:13:42 +02:00

76 lines
2.9 KiB
PHP

<?php
use App\Http\Controllers\ProfileController;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use App\Http\Controllers\OrderController;
use App\Http\Controllers\AttachmentController;
use App\Http\Controllers\HardwareController;
Route::get('/', function () {
return redirect()->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';