Picking Waves
A picking wave groups the reserved stock for one carrier and one despatch location so it can be picked, labelled, packed and despatched together as a single unit of work.
What a wave is
Once a sale order is approved for despatch, its lines become stock moves reserved against a warehouse location. Rather than handling each order individually, the despatch team works in waves: a wave bundles together every reserved move that shares the same carrier and location, so one physical batch of picking, packing and despatch covers many orders at once.
There is no Create button here. Waves are assembled automatically — by the daily auto-wave scheduler or the API — which groups eligible reserved stock moves by carrier and location and creates the wave already in the Draft state. See Schedulers for how and when this runs. Everything on this page is about what your team does after a wave exists.
Where to find it & who can see it
Open Despatch › Picking Waves in the left navigation. The list is visible to anyone holding wave.view (or a super administrator). The page is index-only for create/edit — there is no create or edit form — but each row can also be opened to a read-only detail view (see below); every column and every action described below appears on the list itself.
The wave lifecycle
A wave moves through eight states. Six of the forward steps are driven by buttons on this list; the step from Draft to ItemsIdentified happens automatically (outside the console) once the scheduler has finished allocating items to the wave.
Columns
| Column | Shows |
|---|---|
name | The wave's identifying name/number, shown as a badge. Searchable and sortable. |
| Carrier | carrier.name — the delivery carrier every package in this wave will use. |
| Route | route.name — the delivery route the wave was grouped onto, or a dash when it has none. Only hand-delivery waves get a route. Hidden by default; switch it on from the Columns menu. |
| Location | location.location_name — the single warehouse stock location the wave was built from. |
wave_type | Badge showing the wave's type (no special colour mapping — rendered in the console's default badge style). |
| State | A coloured badge — see the diagram above for the colour key. |
created_at | Date and time the wave was created. Sortable. |
Filter
Select Filters to open a State drop-down covering all eight WaveState values (Draft, Items Identified, Label Printing, Packing, At Branch, Despatched, Done, Cancelled). Combine it with the search box, which matches the wave's name only — not the carrier or the location, so searching for a carrier name here returns nothing.
Viewing a wave Built
Use the View row action to open a wave's detail page — read-only, gated by the same wave.view permission as the list. It has two info panels and two child tables:
- Wave — the wave's name, the current state (same coloured badge as the list), the wave type, the carrier, the route (hand-delivery waves only; a dash otherwise), the location, the operator, and the created date.
- Despatch — whether an SMS and/or email have been sent, and the despatch date.
- Moves — a table of every stock move in the wave: product, quantity, state, and source/destination location.
- Packages — a table of every package in the wave: package number, box type, weight, tracking number, and state. To see what is inside one, open it from Despatch › Packages and use its Contents tab — see Packages.
Everything here is read-only — a wave is driven through its lifecycle by the row actions below (Print labels, Complete packing, Send to branch, Despatch, Mark done, Cancel), not edited on this page.
Alongside the date_… stamps shown on the detail page, each of the transitions below — Print labels, Complete packing, Send to branch, Despatch, Mark done and Cancel — writes a permanent entry recording the state it came from, the state it went to, and the user who did it. The same is true of a package being sealed, marked labelled, or given a delivery outcome. The timestamps tell you when a step happened; these entries tell you who. There is no screen for them yet — they are queried directly when a wave or package has to be investigated.
Actions
- Print labels — Items Identified → Label Printing
Appears once the scheduler has finished identifying the wave's items. Selecting it stamps the wave's
date_labels_generatedtimestamp and moves it into Label Printing, signalling that despatch staff should now print and apply the shipping labels for every package in the wave. - Complete packing — Label Printing → Packing
Use this once labels are printed and the team is ready to physically pack the wave's packages. It stamps
date_packing_complete. - Send to branch — Packing → At Branch
Use this when the packed wave has been handed over to (or arrived at) the despatching branch/post office counter. It stamps
date_sent_to_branch. This step is optional in the sense that Despatch can also be used straight from Packing — see below. - Despatch — Packing or At Branch → Despatched Confirmation required
This is the point at which the whole wave physically leaves. A confirmation dialog asks you to confirm before it proceeds — there is no undo button, so check the wave is genuinely ready. On confirming, the wave's
date_despatchedis stamped and a cascade runs in one transaction:What the Despatch cascade actually doesEvery package on the wave that is not already in a terminal state becomes Despatched. Every stock move on the wave that is not already Done or Cancelled is shipped — this is the moment physical stock is actually decremented from the warehouse location, via the stock-move service's ship step. In other words, Despatch on one wave silently finalises the state of every package and every stock move it contains; you do not need to (and cannot) despatch packages individually from this screen — see Packages.
Labelling is not a precondition. A package that was sealed but never marked labelled is swept up by this cascade exactly like a labelled one — the cascade skips only packages already delivered, returned, lost or cancelled. If you want to check nothing is going out unlabelled, filter the Packages list on Sealed before despatching.
Each move is shipped by the quantity this wave's packages actually carry, not necessarily its whole quantity — see Packages for how a move can be split across parcels. A move that ended up in no package at all still ships in full, exactly as it always has. A move only earns the Shipped badge once all of it has left; a move that has only partly gone keeps the state it already had, and whatever has not shipped stays reserved for it.
- Mark done — Despatched → Done
Use this once the wave has been fully despatched and there is nothing further to track at the wave level (individual packages continue their own journey — see Packages). It stamps
date_all_doneand is the wave's final, successful state. - Cancel — Draft or Items Identified → Cancelled Confirmation required
Shown in danger red. Only available before any packing work has begun — once labels have started printing, a wave can no longer be cancelled from this screen, only carried forward or, exceptionally, corrected through another process.
Each action's button is only shown when the wave is in the exact state that action requires — for example Despatch only appears on waves that are Packing or At Branch. If a colleague acted on the same wave a moment before you, the buttons you see will already have moved on; the underlying service re-checks the state again regardless, so an out-of-turn click is always refused safely rather than corrupting the wave.
Bulk actions and forms
There are no bulk actions on this list — every wave is progressed one at a time. None of the six actions opens a form; each is a single confirmation (or, for Print labels, Complete packing and Send to branch, an immediate one-click transition).
Related pages
See Sale Orders for how an order's stock is reserved before it ever reaches a wave, Packages for what happens to each individual package inside a wave (including after despatch), and Schedulers for how waves are created in the first place.