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.

Moves are not created from this screen

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:

Picked and Packed exist, but nothing sets them

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

ColumnShows
referenceThe move's identifying number, shown as a badge. Searchable and sortable.
operation_typeBadge showing what kind of move this is — Receipt, Delivery, ReturnIn, ReturnOut, Adjustment or Internal.
Productproduct.code — the product code being moved. Searchable.
Qtyproduct_qty — the quantity on the move.
From → ToA 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).
StateA coloured badge — see the diagram above for the colour key.
Carriercarrier.name, toggleable — the delivery carrier assigned to the move, where relevant.
Hold reasonsuspendReason.name, toggleable, blank when the move has never been suspended.
scheduled_dateThe date the move is due to happen. Sortable, toggleable.
created_atDate 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.

Screenshot placeholderThe Stock Moves list: Reference, Operation type, Product, Qty, From → To, State, Carrier and Hold reason columns, with the State and Operation type filter panel open, and Suspend/Cancel row actions visible on a Confirmed move.

Actions

Permissions

Suspend and Unsuspend both need stock_move.suspend. Cancel needs the separate stock_move.edit permission — a colleague can hold up despatch by suspending moves without also being able to cancel them outright, and vice versa. All three additionally require stock_move.view to see the list at all.

  1. 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:

    FieldTypeRequiredNotes
    ReasonSelectYesDrawn from active StockMoveSuspendReason records that are flagged for manual selection — the list is curated by an administrator, not free text.
    RemarkTextareaNoMax 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.

  2. 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.

  3. 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.

Why the buttons you see change from row to row

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.