all(), [ 'newStatus' => 'required|string|in:En attente de traitement,Traitement en cours,Commande traitée', ]); if ($validator->fails()) { return response()->json([ 'error' => 'newStatus est requis et doit être une chaîne de caractères valide' ], 400); } $newStatus = $request->input('newStatus'); // Vérifier que la commande existe $order = Order::find($orderId); if (!$order) { return response()->json([ 'error' => 'Commande introuvable' ], 404); } // Vérifier si le statut est déjà le même if ($order->status === $newStatus) { return response()->json([ 'error' => "La commande a déjà le statut \"{$newStatus}\"", 'order' => $order ], 400); } // Mettre à jour le statut $order->status = $newStatus; $order->save(); return response()->json($order, 200); } /** * Récupérer les commandes avec pagination */ public function index(Request $request) { $perPage = $request->input('per_page', 10); $page = $request->input('page', 1); $status = $request->input('status'); $query = Order::query()->orderBy('created_at', 'desc'); if ($status) { $query->where('status', $status); } $orders = $query->paginate($perPage, ['*'], 'page', $page); return response()->json([ 'data' => $orders->items(), 'total' => $orders->total(), 'per_page' => $orders->perPage(), 'current_page' => $orders->currentPage(), 'last_page' => $orders->lastPage(), ]); } /** * Récupérer les métriques des commandes */ public function metrics() { $total = Order::count(); $pending = Order::where('status', 'En attente de traitement')->count(); $processing = Order::where('status', 'Traitement en cours')->count(); $completed = Order::where('status', 'Commande traitée')->count(); $totalRevenue = Order::sum('price'); $pendingRevenue = Order::where('status', 'En attente de traitement')->sum('price'); $processingRevenue = Order::where('status', 'Traitement en cours')->sum('price'); $completedRevenue = Order::where('status', 'Commande traitée')->sum('price'); return response()->json([ 'total' => $total, 'pending' => $pending, 'processing' => $processing, 'completed' => $completed, 'totalRevenue' => $totalRevenue, 'pendingRevenue' => $pendingRevenue, 'processingRevenue' => $processingRevenue, 'completedRevenue' => $completedRevenue, ]); } }