Skip to content

Purchase Orders

Purchase orders (POs) manage the process of ordering products from suppliers. A PO tracks what was ordered, from which supplier, for which store, and at what cost. The PO lifecycle ensures proper authorization before committing to supplier purchases.

Purchase Order Lifecycle

Each purchase order progresses through the following statuses:

  1. Draft: The PO is being prepared. Items can be added, edited, or removed freely.
  2. Submitted: The PO has been submitted for approval. It can no longer be edited.
  3. Approved: A manager has reviewed and approved the PO. It is now ready to be sent to the supplier.
  4. Sent: The PO has been communicated to the supplier (by email, fax, or other means). The sent timestamp is recorded.
  5. Partial: Some but not all items have been received. The PO stays in this status until all items arrive or it is manually closed.
  6. Received: All ordered items have been received and the PO is complete. Inventory quantities are updated automatically.
  7. Cancelled: The PO was cancelled before completion.

Creating a Purchase Order

Navigate to HQ Manager > Purchase Orders and click "New Purchase Order".

  1. Select a Supplier: Choose from the supplier list. Only active suppliers appear in the dropdown.
  2. Select a Store: Choose the destination store that will receive the goods.
  3. Add Notes: Optional notes about the order (delivery instructions, reference numbers, etc.).

Adding Line Items

After creating the PO, add products by searching by name, SKU, or barcode. For each product, specify:

  • Quantity Ordered: How many units you are ordering from the supplier.
  • Unit Cost: The cost per unit from the supplier. This defaults to the product's current cost price but can be adjusted.

The system calculates the line total (quantity multiplied by unit cost) and the overall PO total automatically.

Submitting for Approval

When all items are added, click "Submit". This moves the PO to Submitted status and prevents further editing. The submitting user and timestamp are recorded. Requires the purchase_orders.create permission.

Approving a Purchase Order

A user with the purchase_orders.approve permission reviews the submitted PO and clicks "Approve". This confirms that the purchase is authorized. The approving user and timestamp are recorded.

If the PO needs changes, the approver can reject it, which returns it to Draft status for editing.

Sending to Supplier

After approval, click "Mark as Sent" to record that the PO has been communicated to the supplier. The system records the sent timestamp. The actual communication with the supplier (email, phone, EDI) happens outside the POS system.

Receiving Items

When goods arrive at the store, open the PO and click "Receive Items". For each line item, enter the quantity actually received. This may differ from the quantity ordered (short shipments, damaged goods, etc.).

  • If all items are fully received, the PO moves to Received status.
  • If only some items are received, the PO moves to Partial status. You can receive additional items later.

When items are received, the store's inventory quantities are updated automatically. The receiving user and timestamp are recorded for each receipt event.

Cancelling a Purchase Order

Draft, submitted, or approved POs can be cancelled by clicking "Cancel". Sent or partially received POs should only be cancelled after coordinating with the supplier. Fully received POs cannot be cancelled.

Viewing Purchase Order History

The PO list page shows all purchase orders with their status, supplier, store, total, and dates. Filter by status, supplier, store, or date range. Click any PO to see the full detail including all line items, quantities ordered vs. received, and the approval audit trail.

Permissions

PermissionDescription
purchase_orders.viewView purchase order list and details
purchase_orders.createCreate new purchase orders and submit them
purchase_orders.editEdit draft purchase orders
purchase_orders.approveApprove or reject submitted purchase orders
purchase_orders.receiveReceive items from purchase orders
purchase_orders.deleteDelete draft purchase orders