Order List Views
The 9 filtered order pages in the Ordering Portal
Order List Views
The Ordering Portal provides 9 separate views for orders, each filtered by status. All are accessible from the sidebar "Orders" submenu.
Available Views
| View | Route | Status Filter | Special Features |
|---|---|---|---|
| All Orders | /orders/current | pending, ordered, unprocessed, submitted, on-hold, received | Groups orders by project and creation time |
| In Progress | /orders/in-progress | pending | Cancel buttons (single + batch) |
| Submitted | /orders/submitted | submitted | Standard table |
| On Hold | /orders/on-hold | on-hold | Resubmit capability |
| Resubmitted | /orders/resubmitted | resubmitted | Standard table |
| Ordered | /orders/ordered | ordered | Standard table |
| Completed | /orders/completed | completed | Standard table |
| Received | /orders/received | received | Standard table |
| History | /orders/history | received (historical) | Standard table |
Page Structure
All order list pages share a common structure:
- Page header with title and subtitle showing the count
- Search input for filtering
- Order cards or table displaying the orders
- Pagination controls
All Orders View (Current Orders)
This is the primary orders view. It differs from the others by using card-based layout instead of a table.
Order Grouping
Orders created together (within a 5-minute window for the same project) are grouped into a single card:
Group Card shows:
- "Multiple Orders (X)" badge with green accent border
- Combined service titles
- Project address
- Multiple status badges (one per order in the group)
- Created date, combined Order IDs, total amount, document count
- "View All Orders" button — links to multi-order confirmation page
Single Order Card shows:
- Order number
- Service title
- Project address
- Status badge
- Created date, Ordered date (if set), Expected date (if set), Document count, SLA
- "View Order" button
Empty State
When no current orders exist, a centered message with a "Create New Order" button is shown.
Status-Filtered Views (Table Format)
The remaining views use a shared responsive table component (_orders_table.html.twig).
Table Columns
| Column | Visibility |
|---|---|
| Expander | Mobile only (toggle for details) |
| Order | Always (ID + Service inline) |
| Service | Configurable per view |
| Job Number | Desktop only |
| Project Address | Desktop only |
| Status | Configurable per view |
| Created | Configurable per view |
| Actions | Always (View button) |
On mobile, hidden columns are shown in an expandable detail row when the user taps the expander.
Search
- Real-time client-side filtering with 300ms debounce
- Searches across: Order ID, service name, job number, project address
- Updates the subtitle count dynamically
- Clear button to reset search
Pagination
- 20 items per page (client-side)
- Previous / page numbers / Next controls
- Page count updates with search results
In Progress View — Special Features
The In Progress view has additional capabilities:
Cancel Buttons
- Single order: "Cancel" button appears on each order card (only when status is "pending")
- Order group: "Cancel All" button cancels all orders in the group
- Cancel triggers
POST /order/{id}/cancelorPOST /orders/cancel-multiple - Cancellation requires confirmation dialog
Clickable Cards
- The entire card is clickable (not just the "View" button)
- Clicking navigates to the order detail page
Status Badge Colours
| Status | Colour | Hex |
|---|---|---|
| Unprocessed | Yellow | #fbbf24 |
| Pending | Yellow | #fbbf24 |
| Allocated | Blue | #60a5fa |
| Ordered | Blue | #3b82f6 |
| Submitted | Blue | #3b82f6 |
| On Hold | Red | #f87171 |
| Feedback Received | Green | #34d399 |
| Complete / Completed / Received | Green | #10b981 |
AJAX Loading
Order data is loaded via AJAX:
- The page renders a shell with search and pagination UI
- A search request fires to
/orders/status/{statusTag}/search - The server returns rendered HTML table rows + count
- The frontend injects the rows and updates the count
This keeps initial page load fast and allows real-time search without full page reload.