← Back to Docs

Purchase Orders

Overview

The Purchase Orders page manages the full PO lifecycle — from draft creation through supplier delivery. Create POs from the Reorder Queue, edit line items and costs, send to suppliers, and track receipts. Supports landed cost tracking, per-item lead times, and export in JSON or CSV format.

PO Statuses

Each purchase order moves through a defined set of statuses:

StatusBadgeDescription
DraftDraftPO created but not yet sent to supplier. Fully editable.
SentSentPO sent to supplier. Awaiting delivery. Can receive shipments.
Partially ReceivedPartially ReceivedSome line items received, others still pending.
ReceivedReceivedAll line items received in full. Inventory updated.
CancelledCancelledPO cancelled before full receipt. No further actions.
Status Flow: Draft → Sent → Partially Received → Received. Cancelled is terminal and can be set from Draft or Sent states.

PO List — Columns

ColumnDescription
PO #Unique purchase order number (e.g., PO-2024-001)
DateDate the PO was created
SupplierSupplier name linked to this PO
TotalTotal order value including landed costs (item costs + freight + duty + handling)
StatusCurrent PO status (see badges above)
ItemsNumber of line items in the PO
ActionsContext-sensitive action buttons (see below)

Filter by Status

A dropdown filter above the PO list lets you view only POs with a specific status:

Actions by Status

Available actions change based on the PO's current status:

StatusAvailable Actions
DraftView/Edit, Send
SentView/Edit, Receive, Download JSON, Download CSV
Partially ReceivedView/Edit, Receive, Download JSON, Download CSV
ReceivedView/Edit, Download JSON, Download CSV
CancelledView/Edit, Download JSON, Download CSV

Action Details

PO View/Edit Modal

Clicking View/Edit on any PO opens a modal with full editing capabilities:

Header Fields

FieldDescription
PO #Read-only unique identifier
SupplierDropdown to change supplier. Selecting a new supplier updates SKU-specific costs and lead times for all line items.
Delivery DateExpected delivery date from supplier
NotesFree-text notes about the PO

Line Items

Each line item shows:

FieldDescription
Product / SKUProduct name and SKU code
QuantityOrder quantity — editable in Draft state
Unit CostPer-unit cost from the supplier — editable in Draft state
Line TotalQuantity × Unit Cost (auto-calculated)
Lead TimeSKU-specific lead time in days from the assigned supplier
Received QtyQuantity already received (shown after partial/full receipt)
ActionsRemove item from PO (Draft only)

Adding / Removing Items

Landed Cost

Additional costs can be added to the PO to reflect the true cost of goods:

FieldDescription
FreightShipping / freight charges for the entire PO
DutyImport duties or tariffs
HandlingHandling fees (warehouse, customs broker, etc.)

Landed cost is added to the item subtotal to produce the Total value shown in the PO list. Landed cost is editable in Draft and Sent states.

Validation Rules

Min Order Qty (per Supplier)

Each supplier can define a minimum order quantity. When sending a Draft PO, the system validates that the total quantity across all line items meets or exceeds this minimum. If not, a warning is shown with the shortfall amount.

Min Order Value (per Supplier)

Each supplier can define a minimum order value (in dollars). When sending a Draft PO, the system validates that the item subtotal (before landed cost) meets or exceeds this minimum. If not, a warning is shown with the shortfall amount.

Blocking vs. Warning: Min order qty and min order value produce warnings but do not block sending. The user can proceed or return to editing.

Download Formats

JSON (Full PO)

Exports the complete purchase order as a structured JSON file:

{
  "po_number": "PO-2024-001",
  "status": "Sent",
  "date": "2024-01-15",
  "supplier": {
    "id": 12,
    "name": "TechParts Co."
  },
  "line_items": [
    {
      "sku": "SPK-RED-001",
      "product": "Bluetooth Speaker - Red",
      "quantity": 100,
      "unit_cost": 12.50,
      "line_total": 1250.00,
      "lead_time_days": 14,
      "received_qty": 0
    }
  ],
  "landed_cost": {
    "freight": 50.00,
    "duty": 25.00,
    "handling": 15.00
  },
  "subtotal": 1250.00,
  "total": 1340.00,
  "delivery_date": "2024-01-29",
  "notes": "Rush order for restock"
}

CSV (Line Items)

Exports only the line items as a flat CSV file for spreadsheet import:

SKU,Product,Quantity,Unit Cost,Line Total,Lead Time (days),Received Qty
SPK-RED-001,Bluetooth Speaker - Red,100,12.50,1250.00,14,0
CABLE-USB-C,USB-C Cable - 2m,200,3.75,750.00,10,0

Lead Time per Line Item

Each line item displays the SKU-specific lead time (in days) from the assigned supplier. Lead times are set at the supplier-product level and are shown:

When the supplier is changed on a PO, all line items update their lead times to match the new supplier's lead times for those SKUs. If the new supplier does not carry a SKU, the lead time shows as N/A and the line item is flagged.

Data Sources

DataSourceUpdate Frequency
PO List/api/purchase-ordersReal-time from database
Supplier Infosuppliers tableUpdated on supplier sync
Min Order Qty/Valuesuppliers.min_order_qty, suppliers.min_order_valueSet by admin
SKU Lead Timessupplier_products.lead_time_daysUpdated on supplier sync
Landed Costpurchase_orders.freight, purchase_orders.duty, purchase_orders.handlingUser-entered