Purchase Orders

Create and manage purchase orders to your vendors and drive each one through its full supply-chain lifecycle. A PO captures line items by variant, fees, payments, and shipments; as it advances it creates a forecasted bill in Accounts Payable, spins up an in-transit transfer when shipped, posts received quantities to on-hand at the destination location, and writes landed-cost snapshots so COGS reflects what you actually paid. Generate a PDF to send, and export the whole list to Excel or CSV.

Key capabilities

  • Full PO lifecycle: draft → submitted → in production → ready → shipped → partially received → received (or canceled)
  • Vendor selection with PO number, currency, and optional ship-from / ship-to locations
  • Line items by variant with quantity and unit price, reorderable
  • Additional fees (freight, duties, handling, packaging) stored on the order
  • Order total and running balance, with partial payments that link to bank transactions
  • Submit creates a forecasted bill; receive flips it to a received bill in AP
  • Mark-shipped creates a linked in-transit transfer that carries the in-transit inventory math
  • Receive posts quantities to on-hand at the ship-to location and writes cost snapshots
  • Cancel reverses any linked in-transit transfer
  • Expected delivery date, payment term, and expected pay date for cash-flow planning
  • PDF generation to send to vendors, plus Excel and CSV export of all orders
  • Status and vendor filters with pagination

How it works

Each transition owns its side effects: submit forecasts a bill, ship creates the in-transit transfer, and receive posts stock, flips the bill, and snapshots landed cost.

flowchart LR
  draft["Draft"] --> submitted["Submitted (forecasted bill)"]
  submitted --> shipped["Shipped (in-transit transfer)"]
  shipped --> received["Received"]
  received --> stock["On-hand posted at ship-to + cost snapshot"]
  received --> bill["Bill flips forecasted to received"]
  submitted -.->|"Cancel"| canceled["Canceled (reverse transfer)"]

How to use it

  1. Open the Purchase Orders tab (/inventory?section=orders) and click New Order.
  2. Select a vendor, set the PO number/name, and optionally set ship-from / ship-to locations and an expected delivery date.
  3. Add line items by searching variants — set quantity and unit price for each; drag to reorder.
  4. Add fees (freight, duties, handling, packaging) so they flow into landed cost on receipt.
  5. Save as Draft, then Submit to create the forecasted bill in Accounts Payable.
  6. Advance through In Production → Ready → Shipped as the vendor progresses; shipping creates the in-transit transfer.
  7. Receive the PO to post stock to the ship-to location, write cost snapshots, and flip the bill to received; record payments as they're made.
  8. Generate PDF to send to the vendor, and use Export Excel / Export CSV for reporting.

Pro tips

  • Use the status filter chips and the status stepper to separate outstanding orders from received/completed ones at a glance.
  • Submit a PO to get a forecasted bill into AP early — it improves cash-forecast accuracy before goods arrive.
  • Put freight, duties, and handling in fees rather than padding unit prices; those layers are amortized per unit into landed COGS on receipt.
  • If a shipment already received covers only part of the PO, the order shows partially received until the remainder lands.
  • Receiving is idempotent with shipments: when a received shipment is already linked to the PO, the receive step skips re-posting inventory so quantities aren't double-counted.
  • Expand a PO row to see line items, fees, payments, and shipments together; balances tie back to AP.

In-depth guide

Status lifecycle

Status Meaning
draft Editable, not yet sent; can be updated or deleted
outstanding Legacy "open" state (kept for reporting)
submitted Confirmed with vendor; forecasted bill created
in_production Vendor is actively producing
ready Goods produced, not yet shipped
shipped Left the source; linked transfer holds the in-transit math
partially_received At least one shipment received, more pending
received Fully received; stock posted, bill flipped
completed Closed out
canceled Cancelled; linked in-transit transfer reversed

A PO can be updated or deleted only while draft or outstanding. PDFs can be generated once a PO is outstanding, partially received, received, or completed.

Lifecycle side effects

Transition Side effects
Submit PO → submitted; creates a forecasted bill in AP
Mark in production / ready Status-only transitions for the supply-chain map and stepper
Mark shipped PO → shipped; creates an in-transit transfer
Mark partially received PO → partially_received (set by the shipment flow)
Receive PO → received; flips bill forecasted → received, marks the linked transfer received, writes cost snapshots, posts received quantities to on-hand at the ship-to location
Cancel PO → canceled; reverses the linked in-transit transfer

Landed cost on receipt

When a PO is received, costs are amortized into landed COGS:

  • Each line's unit price becomes the material layer.
  • The order-level shipping cost (freight) plus fees (duties, handling, packaging) are amortized equally across total received units.
  • All six landed-cost layers — material, packaging, processing, freight, duties, handling — are written to that variant's monthly cost snapshot (tagged with the PO number), feeding the Landed COGS view.
  • Fee labels are matched loosely (e.g. duty / duties / tariff / customs) so labels from import wizards or accounting bills still slot into the right layer.

Payments & AP

  • Record partial payments by linking a bank transaction with an amount and an optional pay date.
  • The balance updates automatically; the order is fully paid once the balance reaches zero.
  • The forecasted bill created at submit (then flipped to a received bill at receipt) is what carries the obligation into Accounts Payable and the AP approval workflow.

Access & export

  • The purchase-orders module is gated by the Commerce add-on.
  • Generate a PDF per order to send to vendors, and fetch PDF download URLs in bulk.
  • Export the full order list to Excel (.xlsx) or CSV for reporting.

Edge cases

  • If two people edit the same PO at once, the conflict is flagged so concurrent edits don't clobber each other.
  • Receiving skips inventory posting when a received shipment is already associated with the PO, preventing double counts.
  • Deleting is only allowed for draft/outstanding orders; cancel (not delete) anything already in flight.

Start free and streamline your purchasing from PO to received stock.