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
- Open the Purchase Orders tab (
/inventory?section=orders) and click New Order. - Select a vendor, set the PO number/name, and optionally set ship-from / ship-to locations and an expected delivery date.
- Add line items by searching variants — set quantity and unit price for each; drag to reorder.
- Add fees (freight, duties, handling, packaging) so they flow into landed cost on receipt.
- Save as Draft, then Submit to create the forecasted bill in Accounts Payable.
- Advance through In Production → Ready → Shipped as the vendor progresses; shipping creates the in-transit transfer.
- 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.
- 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.