Ordering Portal
Ordering Portal Overview
Self-service ordering portal for placing and managing service orders
Ordering Portal Overview
The Ordering Portal is the primary self-service interface for external customers (builders, developers) to manage their projects and orders. It is replacing the legacy Customer Portal and provides a streamlined workflow for placing orders, uploading documents, communicating with FTS staff, and tracking order progress.
Who Uses It
- Builders and developers who need building permit services
- Customer contacts managing projects on behalf of companies
- Users authenticated via Auth0 SSO
Key Capabilities
| Feature | Description |
|---|---|
| Project Search | Find existing projects by address, SPI, or job number |
| Project Creation | Create new projects with address geocoding and map confirmation |
| Order Wizard | 4-step guided flow to place single or multiple service orders |
| Document Management | Upload, categorise, assign, and version documents across orders |
| Order Tracking | 9 filtered views by status with search and pagination |
| Notes & Communication | Chat-style notes on orders with file attachments |
| Payment | Free submission, account billing, or Stripe credit card |
| Order Actions | Cancel, resubmit, and manage order lifecycle |
Architecture
The portal is built on:
- Backend: Symfony controllers rendering Twig templates
- API: v3 REST API with JSON-LD/Hydra format
- Frontend: jQuery UI, Uppy (file uploads), Bootstrap 5, inline JavaScript
- Auth: Auth0 SSO with Bearer token propagation to API
The main controller (OrderController.php) handles 50+ routes. A V3OrderingApiClient service proxies all data operations to the v3 API.
Sidebar Navigation
The portal uses a collapsible sidebar (280px, collapses to 80px) with state saved to localStorage. Badge counts are loaded asynchronously via /ordering/api/sidebar-counts.
| Menu Item | Badge | Description |
|---|---|---|
| Dashboard | — | Project search and landing page |
| Projects | total count | Browse all customer projects |
| Orders | total orders | Expandable submenu (see below) |
| New Order | — | Start the order creation wizard |
| Logout | — | Sign out |
Orders Submenu
| View | Badge | Status Filter |
|---|---|---|
| All Orders | — | pending, ordered, unprocessed, submitted, on-hold, received |
| In Progress | count | pending |
| Submitted | — | submitted |
| On Hold | count | on-hold |
| Resubmitted | — | resubmitted |
| Ordered | — | ordered |
| Completed | — | completed |
Order Status Lifecycle
unprocessed → pending → submitted → ordered → allocated → received → complete
↓ ↓
on-hold ← rejected cancelled
↓
resubmitted → (re-enters queue)Guide Pages
| Page | What You'll Learn |
|---|---|
| Dashboard & Search | Project search, autocomplete, navigation |
| Creating Projects | New project flow with address geocoding |
| Order Creation Wizard | The 4-step order placement flow |
| Order List Views | 9 filtered order pages, search, pagination |
| Order Details | Single order view, status, delivery performance |
| Documents & Uploads | Upload, assign, categorise, version documents |
| Notes & Communication | Order notes with attachments |
| Payment & Submission | Free, account, and Stripe payment flows |
| Order Actions | Cancel, resubmit, status transitions |