Stock Moves Built
A stock move is a single planned movement of a product's quantity from one stock location to another. This screen is where you review every move in the system and step in when one needs to be held or stopped — it is not where moves are created.
What a stock move is
Every physical or logical movement of stock — an order line being released for despatch, a stock transfer between warehouses, a closing-stock adjustment, a returned package coming back in — is recorded as one StockMove row: a product, a quantity, a source location, a destination location, and a state. The state tracks the move through its life, and the console's job is to let you see that history and intervene when something needs to be suspended or cancelled.
There is no Create button here — the resource is deliberately read-only for that. Delivery moves are generated automatically once an approved order's product is released for despatch (a background job creates one move per order line, already Confirmed, and advances the order to In Despatch); other moves are created behind the scenes by stock transfers, closing-stock reconciliation and returns processing. Everything on this page is about what your team does after a move exists — reviewing it, and, when necessary, suspending or cancelling it.
Where to find it & who can see it
Open Inventory › Stock move in the left navigation. The list is visible to anyone holding stock_move.view (or a super administrator). There is no create, edit or delete page for this resource — every column and every action described below appears on the list itself.
The state machine
StockMoveState has nine cases, but a single move only ever follows one of two short paths through them, plus the exception actions this screen exposes.
In practice a move follows one of two short routes:
- Delivery moves (an order line released for despatch): Draft → Confirmed — created together, in the same background job — then Reserved by the daily auto-reserve job (see Schedulers), then Shipped the moment its picking wave is despatched (see Picking Waves). Shipped is where a delivery move's story ends today — nothing in the console or the services currently advances it to Done.
- Transfer / closing-stock / receipt moves: Draft → Confirmed, then straight to Done — skipping Reserved and Shipped entirely — when the owning process (a stock transfer, a closing-stock statement, a goods receipt) marks it complete.
StockMoveState has nine cases, but Picked and Packed are not reached by any move today — no service, job or console action assigns them. They are shown here for completeness and because the enum's badge colours are defined for them, but you will never see a move sitting in either state.
Columns
| Column | Shows |
|---|---|
reference | The move's identifying number, shown as a badge. Searchable and sortable. |
operation_type | Badge showing what kind of move this is — Receipt, Delivery, ReturnIn, ReturnOut, Adjustment or Internal. |
| Product | product.code — the product code being moved. Searchable. |
| Qty | product_qty — the quantity on the move. |
| From → To | A computed column reading sourceLocation.location_name and destLocation.location_name as "From → To" (an em-dash on either side stands in for a missing location). |
| State | A coloured badge — see the diagram above for the colour key. |
| Carrier | carrier.name, toggleable — the delivery carrier assigned to the move, where relevant. |
| Hold reason | suspendReason.name, toggleable, blank when the move has never been suspended. |
scheduled_date | The date the move is due to happen. Sortable, toggleable. |
created_at | Date and time the move was created. Sortable, hidden by default. |
Filters
Select Filters to open two drop-downs: State (all nine StockMoveState values) and Operation type (all six OperationType values). Combine either with the search box, which matches on the move's reference or product code.
Actions
- Suspend Form
Available on any move that is not already Done, Cancelled or Suspended — that covers Draft, Confirmed, Reserved and even Shipped. Selecting it opens a form rather than a plain confirmation dialog:
Field Type Required Notes Reason Select Yes Drawn from active StockMoveSuspendReasonrecords that are flagged for manual selection — the list is curated by an administrator, not free text.Remark Textarea No Max 500 characters — add context for whoever unsuspends it later. Submitting the form is the confirmation — there is no separate "are you sure?" step. If the move was Reserved, its reservation is released immediately (the reserved quantity on Stock on hand drops back to available) before the state changes to Suspended.
- Unsuspend Confirmation required
Available only on a Suspended move. It returns the move to whichever state it held immediately before it was suspended (recorded on its move log) — typically Confirmed or Reserved. If that prior state was Reserved, unsuspending re-attempts the reservation there and then; if there is no longer enough available stock to reserve, the move settles at Confirmed instead rather than failing outright.
- Cancel Confirmation required
Available on any move that is not already Done or Cancelled — notably, unlike Suspend, this includes a move that is currently Suspended; you do not need to unsuspend something before cancelling it. A confirmation dialog is all it asks for — no reason field. If the move was Reserved at the time, its reservation is released as part of cancelling.
Each action is only offered when the move is in a state its underlying service will actually accept — the same safety rule as everywhere else in the console (see Getting started). A Done or Cancelled move never shows any action at all; it has reached the end of its life.
Bulk actions and forms
There are no bulk actions on this list — every move is actioned one row at a time. This is a read-only base resource: no create page, no edit page, no delete. The only forms are the small ones opened by Suspend described above; Unsuspend and Cancel are single-click confirmations.
Related pages
See Stock on hand to watch qty_reserved rise and fall as moves are reserved, suspended, unsuspended or cancelled; Picking Waves for how a wave's Despatch action ships every one of its reserved moves in one cascade; and Schedulers for the daily auto-reservation job that advances Confirmed delivery moves to Reserved.