Purchase Orders & Receiving
POs are the in-flow side of inventory. Create a PO against a manufacturer, add line items (inventory item × quantity × unit cost), then receive stock against lines as it arrives. Receives are atomic — each receive bumps the PO line's qtyReceived, increments the inventory item's quantityOnHand, optionally pins the item to a bin, and writes a StockMovement audit row, all in one transaction. Lives at Inventory > Purchase Orders.
Steps
- Go to Inventory > Purchase Orders. Click "+ Create PO".
- Pick a manufacturer (from your Manufacturers directory), add line items — for each, choose an inventory item and qty ordered, optional unit cost and notes.
- Save. The PO opens at status "draft"; auto-PO number ("PO-YY-NNN") is generated.
- When stock arrives, open the PO and click "Receive". For each line, enter qty received and optionally pick a bin. Save.
- PO auto-transitions: status flips to "partial" once any line has qtyReceived > 0, then to "fulfilled" when every line has qtyReceived ≥ qtyOrdered.
- Movements tab shows every receive as an immutable audit row with type "po_received", quantity, user, and a link back to the PO + the bin.
- On the mobile app (Inventory > Purchase Orders), the receive flow is scan-driven: open a PO, tap a line, scan the bin, type the qty, hit save.
Good to know
- You can't hard-delete a PO that has any stock received against it — would orphan StockMovement audit rows. Force-cancel by editing the PO status instead.
- You can't remove a PO line that has qtyReceived > 0 either, for the same reason. Lines stay in the PO history forever.
- Reorder tab → "Create PO from suggestions" pre-fills a PO with all items below threshold for a manufacturer. Faster than typing.
- Over-receive is allowed (qty received > qty ordered). The PO still hits "fulfilled"; the extra qty just lands in inventory.
Example: A plumbing-parts distributor receives a 30-line container from their main valve supplier on Tuesday. The receiver opens the PO on mobile, scans the first bin on the rack, then scans each box of valves as it comes off the truck — the camera reads the SKU label, the app pre-fills the PO line, the receiver types the qty and taps Save. Repeat 30 times. Total elapsed: under 12 minutes, no clipboard, no data-entry mistakes. The Movements tab logs all 30 receives with the same user and a sub-second spread.
Troubleshooting
PO status stuck at "partial" even though every line is filled
Some lines may have qtyReceived strictly less than qtyOrdered (under-receive). The auto-transition to "fulfilled" only fires when EVERY line is fully received or over-received.
Fix: Open the PO and check each line. Either receive the missing qty, or edit qtyOrdered down to match what was actually received.
Plans
Enterprise suite required.
Related
- Inventory & Fulfillment — Overview
- Reorder Report & Manufacturer Emails
- Bins & QR Scanning