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:
| Status | Badge | Description |
|---|---|---|
| Draft | Draft | PO created but not yet sent to supplier. Fully editable. |
| Sent | Sent | PO sent to supplier. Awaiting delivery. Can receive shipments. |
| Partially Received | Partially Received | Some line items received, others still pending. |
| Received | Received | All line items received in full. Inventory updated. |
| Cancelled | Cancelled | PO cancelled before full receipt. No further actions. |
PO List — Columns
| Column | Description |
|---|---|
| PO # | Unique purchase order number (e.g., PO-2024-001) |
| Date | Date the PO was created |
| Supplier | Supplier name linked to this PO |
| Total | Total order value including landed costs (item costs + freight + duty + handling) |
| Status | Current PO status (see badges above) |
| Items | Number of line items in the PO |
| Actions | Context-sensitive action buttons (see below) |
Filter by Status
A dropdown filter above the PO list lets you view only POs with a specific status:
- All (default) — Shows all purchase orders
- Draft — Only draft POs
- Sent — Only sent POs
- Partially Received — Only partially received POs
- Received — Only fully received POs
- Cancelled — Only cancelled POs
Actions by Status
Available actions change based on the PO's current status:
| Status | Available Actions |
|---|---|
| Draft | View/Edit, Send |
| Sent | View/Edit, Receive, Download JSON, Download CSV |
| Partially Received | View/Edit, Receive, Download JSON, Download CSV |
| Received | View/Edit, Download JSON, Download CSV |
| Cancelled | View/Edit, Download JSON, Download CSV |
Action Details
- View/Edit — Opens the PO in edit modal. Available for all statuses.
- Send — Marks the PO as sent to the supplier. Only available for Draft POs. Once sent, the PO can no longer be edited (only received or downloaded).
- Receive — Records an incoming shipment. Available for Sent and Partially Received POs. Opens the Receive modal where you can enter received quantities per line item.
- Download JSON — Exports the full PO as a JSON file. Available for all non-Draft, non-Cancelled POs.
- Download CSV — Exports PO line items as a CSV file. Available for all non-Draft, non-Cancelled POs.
PO View/Edit Modal
Clicking View/Edit on any PO opens a modal with full editing capabilities:
Header Fields
| Field | Description |
|---|---|
| PO # | Read-only unique identifier |
| Supplier | Dropdown to change supplier. Selecting a new supplier updates SKU-specific costs and lead times for all line items. |
| Delivery Date | Expected delivery date from supplier |
| Notes | Free-text notes about the PO |
Line Items
Each line item shows:
| Field | Description |
|---|---|
| Product / SKU | Product name and SKU code |
| Quantity | Order quantity — editable in Draft state |
| Unit Cost | Per-unit cost from the supplier — editable in Draft state |
| Line Total | Quantity × Unit Cost (auto-calculated) |
| Lead Time | SKU-specific lead time in days from the assigned supplier |
| Received Qty | Quantity already received (shown after partial/full receipt) |
| Actions | Remove item from PO (Draft only) |
Adding / Removing Items
- Add Item — Click "Add Item" button to add a new product to the PO. Only available in Draft state.
- Remove Item — Click the remove button on a line item to delete it from the PO. Only available in Draft state.
- When you change the supplier, all line items update to reflect the new supplier's costs and lead times for those SKUs.
Landed Cost
Additional costs can be added to the PO to reflect the true cost of goods:
| Field | Description |
|---|---|
| Freight | Shipping / freight charges for the entire PO |
| Duty | Import duties or tariffs |
| Handling | Handling 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.
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:
- In the PO edit modal, next to each line item
- In the JSON download, per line item
- In the CSV download, as a "Lead Time (days)" column
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
| Data | Source | Update Frequency |
|---|---|---|
| PO List | /api/purchase-orders | Real-time from database |
| Supplier Info | suppliers table | Updated on supplier sync |
| Min Order Qty/Value | suppliers.min_order_qty, suppliers.min_order_value | Set by admin |
| SKU Lead Times | supplier_products.lead_time_days | Updated on supplier sync |
| Landed Cost | purchase_orders.freight, purchase_orders.duty, purchase_orders.handling | User-entered |