101 lines
4.5 KiB
PHP
101 lines
4.5 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;
|
|
use App\Http\Controllers\UserController;
|
|
|
|
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::get('/commandes/{commande}/sous-devis/create', [DevisController::class, 'createFromCommande'])->name('commandes.sous-devis.create');
|
|
Route::post('/commandes/{commande}/sous-devis', [DevisController::class, 'storeFromCommande'])->name('commandes.sous-devis.store');
|
|
Route::resource('commandes', OrderController::class);
|
|
|
|
// Pièces jointes
|
|
Route::get('/attachments/{attachment}', [AttachmentController::class, 'show'])->name('attachments.show');
|
|
Route::post('/attachments/{attachment}/ocr', [AttachmentController::class, 'ocr'])->name('attachments.ocr');
|
|
Route::post('/attachments/ocr-upload', [AttachmentController::class, 'ocrUpload'])->name('attachments.ocr-upload');
|
|
|
|
// 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::get('/devis/{devi}/sous-devis/create', [DevisController::class, 'createSousDevis'])->name('devis.sous-devis.create');
|
|
Route::post('/devis/{devi}/sous-devis', [DevisController::class, 'storeSousDevis'])->name('devis.sous-devis.store');
|
|
Route::resource('devis', DevisController::class)->parameters([
|
|
'devis' => 'devi',
|
|
]);
|
|
|
|
// Gestion des utilisateurs
|
|
Route::resource('users', UserController::class);
|
|
});
|
|
|
|
require __DIR__.'/auth.php';
|