<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Models\TrackingUpdate;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function index(Request $request)
{
$query = Order::with('items')->latest();
if ($request->filled('status')) {
$query->where('status', $request->status);
}
if ($request->filled('search')) {
$query->where(function ($q) use ($request) {
$q->where('order_number', 'like', '%' . $request->search . '%')
->orWhere('name', 'like', '%' . $request->search . '%')
->orWhere('mobile', 'like', '%' . $request->search . '%');
});
}
$orders = $query->paginate(20)->withQueryString();
return view('admin.orders.index', compact('orders'));
}
public function show(Order $order)
{
$order->load('items.product', 'trackingUpdates');
return view('admin.orders.show', compact('order'));
}
public function updateStatus(Request $request, Order $order)
{
$request->validate([
'status' => 'required|in:pending,confirmed,processing,shipped,delivered,cancelled',
]);
$order->update(['status' => $request->status]);
return back()->with('success', 'Order status updated.');
}
public function addTracking(Request $request, Order $order)
{
$data = $request->validate([
'status' => 'required|string|max:100',
'message' => 'required|string|max:1000',
]);
$data['order_id'] = $order->id;
TrackingUpdate::create($data);
return back()->with('success', 'Tracking update added.');
}
public function destroy(Order $order)
{
$order->delete();
return redirect()->route('admin.orders.index')->with('success', 'Order deleted.');
}
}