Files
OrderCheck/routes/web.php
T
mrKamooandClaude Sonnet 4.6 7312c7640b feat: add Devis and BesoinInformatique modules
- Devis: CRUD complet, génération PDF (dompdf), paramètres (DevisSetting)
- BesoinInformatique: CRUD complet avec gestion matériels/licences
- Migrations pour les 3 nouvelles tables
- Navigation mise à jour dans AuthenticatedLayout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 14:46:16 +02:00

91 lines
3.6 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;
use App\Http\Controllers\BesoinInformatiqueController;
use App\Http\Controllers\DevisController;
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);
// Besoins Informatiques (Mutualisation)
Route::resource('besoins-informatiques', BesoinInformatiqueController::class)->parameters([
'besoins-informatiques' => 'besoin_informatique',
]);
// Gestion des Devis
Route::get('/devis/settings', [DevisController::class, 'settings'])->name('devis.settings');
Route::put('/devis/settings', [DevisController::class, 'updateSettings'])->name('devis.settings.update');
Route::get('/devis/{devi}/pdf', [DevisController::class, 'downloadPdf'])->name('devis.pdf');
Route::resource('devis', DevisController::class)->parameters([
'devis' => 'devi',
]);
});
require __DIR__.'/auth.php';