Navigation
19.4. Purchasing: Vendors, Price Lists, Purchase Orders, Landed Costs, and Vendor Bills
Run MSP hardware purchasing in AlgaPSA: vendor records and price lists, the purchase order lifecycle, receiving with serial capture, landed cost allocation, vendor bills, and opening-balance imports.
Purchasing covers everything between "we need more stock" and "it's on the shelf and the bill is tracked": vendors, their prices, purchase orders, receiving, freight and duty allocation, and payables.
Purchase orders track vendor, value, received progress, and expected date from Draft through Received.
Vendors
Inventory → Vendors holds your distributors and suppliers — name, contact, payment terms, account number. Vendors are never hard-deleted; deactivate them instead. A vendor with open purchase orders cannot be deactivated until those POs are closed out.
Vendor price lists
Each vendor row has a Price list — what that vendor charges you per product, with their SKU, unit cost, and lead time. Mark one vendor as Preferred vendor for this product: that preference (one per product) drives reorder suggestions and backorder purchasing, and its cost becomes the default when a PO line is created for the product.
The purchase order lifecycle
| Status | Meaning |
|---|---|
| Draft | Being built — lines can still change |
| Open | Submitted to the vendor; tracked toward receiving, and shown on the dashboard the day it is due to land |
| Partially received | Some lines have arrived |
| Received | Everything has arrived |
| Cancelled | Called off — blocked once anything has been received |
- Create the PO: pick the vendor, currency, and expected date, then add product lines with quantity and unit cost (pre-filled from the vendor's price list where available).
- Submit it. The PO becomes Open and is tracked for receiving, with its expected arrival date.
- Receive shipments as they arrive — full or partial. The receive dialog defaults to your default location and pre-fills the remaining quantity; serialized products ask for the serial numbers, one per line. Receiving more than ordered is allowed but flagged, so a vendor over-shipment doesn't block the dock. A PO Received event fires for notification rules.
Receiving is what actually creates stock: serialized units are registered individually; non-serialized receipts update the product's moving-average cost. A purchase order is priced in one currency, and AlgaPSA blocks a receipt whose cost is in a different currency from blending into that average, so your unit costs never mix dollars and euros by accident.
Receiving without a purchase order
Not every box arrives against a PO. Receive stock on the Stock screen records an ad-hoc receipt — the counter delivery, the cash-and-carry run, the part a vendor drops off. Pick the product, location, quantity, and unit cost; serialized products take one serial per unit. It lands in the ledger as a real receipt, exactly like a PO receipt, just without a purchase order behind it.
Landed costs
Freight, duty, and similar charges arrive after the fact and belong in your unit costs — otherwise your margins flatter you. Use Landed cost on a received PO to record the charge and allocate it across the received lines, either by line value or by quantity. A preview shows the effective unit cost before you commit. Applying an allocation is a deliberate step, and it works on what has actually landed:
- You must receive the PO first — there is nothing to allocate against on an unreceived order.
- Costs land on the quantities received, and for serialized products only on units still in stock. Units already delivered keep the COGS they were sold at, so history is not rewritten.
- Each entry applies once. Re-opening the dialog will not double-count a charge you already applied, and an applied entry cannot be deleted.
Vendor bills
Inventory → Vendor Bills is lightweight payables tracking — not a general ledger. Create a bill from a received PO (pre-filled from what actually arrived), and AlgaPSA runs a two-way match: it compares the billed amount to the received value at the bill level and per line, flagging "billed above/below received value" and vendor price creep against the PO without blocking you. Bills move Draft → Open → Paid (mark paid manually), or to Void if a bill needs to be cancelled, with due dates defaulted from the vendor's payment terms. Where an accounting integration is connected, an approved bill can be exported to QuickBooks Online. The Vendor Bills screen keeps an aging view of what is owed and when it is due, so nothing is paid on autopilot.
Loading existing stock: opening balances
When you first adopt the module, don't hand-type your stockroom. Import opening balances on the Stock screen takes a CSV (sku, product, location, quantity, serial_number, mac_address, unit_cost) and runs in two phases — validate first, then import all-or-nothing, up to 5,000 rows. Rows with a serial number become individual units; rows without become bulk quantities. Every imported row lands as a real receipt in the ledger, so even day-zero stock has an audit trail.
Operational checks
- Keep price lists current — reorder suggestions and PO defaults are only as good as the costs behind them.
- Apply landed costs before reviewing the Margin report for the month, or your COGS will run low.
- Reconcile Vendor Bills against statements monthly; the variance flags make the mismatches obvious.
