Order Management
Routes:
/admin/orders— Order list/admin/orders/[id]— Order detail
Files:
ayts-admin/app/(admin)/orders/page.tsxayts-admin/app/(admin)/orders/[id]/page.tsx
Auth required: Admin
Purpose
Admins view all orders across the platform, update order statuses, process refunds, and resolve disputes.
Order List
Filters
- Status: Pending / Confirmed / Preparing / Ready / Out for Delivery / Delivered / Cancelled
- Date range picker
- Store selector
- Search by order ID or customer name
Table Columns
| Column | Source |
|---|---|
| Order ID | orders.order_number (e.g., AYTS-20260107-4976) |
| Customer | users.first_name + last_name |
| Store | stores.name |
| Items | Count of order_items |
| Total | orders.total_amount |
| Payment | orders.payment_method + payment_status |
| Status | orders.status |
| Date | orders.created_at |
| Actions | View / Update Status |
Components Used
| Component | File |
|---|---|
OrdersTable | components/orders-table.tsx |
OrdersFilters | components/orders-filters.tsx |
OrdersStats | components/orders-stats.tsx |
OrderTimeline | components/order-timeline.tsx |
Data Fetching
// Get all orders (admin)
GET /api/admin/orders?status={status}&storeId={id}&limit=20&offset={page}
// Get single order
GET /api/orders/{id}
// Update order status
PATCH /api/orders/{id}/status
{ status: 'confirmed' | 'preparing' | 'ready' | 'out_for_delivery' | 'delivered' | 'cancelled' }
Order Detail (/admin/orders/[id])
Sections
Order Info
- Order ID, date, status badge
- Customer name + contact
Order Timeline
- Visual step tracker showing status history
Line Items
- Product name, quantity, unit price, subtotal
- Store name
Payment Info
- Payment method
- Payment status
- PayMongo reference (if online payment)
- Refund button (if eligible)
Rider Assignment
- Current rider (if assigned)
- Assign/reassign rider dropdown
Refund Processing
// Process refund (admin only)
PATCH /api/payments/refund/{orderId}/process
{
amount: number, // partial or full refund
reason: string,
}
Refund UI
The API endpoint exists but there is no UI built yet. The refund button and form must be added to the order detail page.
Known Issues / Status
| Item | Status |
|---|---|
| Order list | ✅ Working |
| Status filter | ⚠️ Missing "preparing" status option |
| Order items count | ✅ Fixed (order_items now saved correctly) |
| Status update | ✅ Working |
| Refund button | ❌ No UI — API exists |
| Rider assignment | ⚠️ Route exists, UI not verified |
Order Statuses (Normalized)
| Status | Meaning |
|---|---|
pending | Placed, awaiting payment |
confirmed | Payment confirmed |
preparing | Vendor is preparing |
ready | Ready for pickup |
out_for_delivery | Rider has it |
delivered | Completed |
cancelled | Cancelled |
refunded | Refund processed |