This article covers purchase orders the document you send a vendor when you're ordering materials from them, and the receipt trail that puts those materials into your inventory when they arrive. POs live in Financials → Purchase Orders, next to Bills and Vendors.
A purchase order in PortaPro is a non-posting document (Xero and QuickBooks Online use the same convention): it doesn't hit your books. The bill you enter later when the vendor sends you their invoice is what posts to your P&L. A PO's job is to (a) put the order in writing for the vendor, (b) track what's been received against what was ordered, and (c) hand you a pre-filled Bill when the vendor invoices you.
The full lifecycle:
Draft → Ordered → Partially Received → Received (or Cancelled at any point before Received).
Everything below walks each step.
---
PO-1: Prerequisites & Access
Who can use it: office staff only admins and dispatchers. Drivers, mechanics, and customer-portal users don't see the tab.
Plan requirement: Core tier (or higher). Starter accounts see the upgrade gate on the Purchase Orders tab, same as Bills and Expenses.
What you need before creating one:
Where to find it: left nav → Financials → Purchase Orders tab (cart icon, between Bills and Vendors).
---
PO-2: Creating a Purchase Order
Click New Purchase Order in the tab header. A modal opens with the fields below. Every required field is marked with `*` and validation errors show inline as you go nothing is submitted silently.
Vendor *(required)*
Pick from the list of your active vendors (archived vendors are hidden). If the vendor doesn't exist yet, choose + Create new vendor at the bottom a quick-create modal appears (name, email, phone, contact name), and after saving the vendor is auto-selected on the PO. The full vendor detail (tax ID, W-9, address, notes) can be filled in later from the Vendors tab.
Order Date *(required)*
Defaults to today. This is the date on the PO itself not necessarily the date it was sent.
Expected Date *(optional)*
When you expect the materials to arrive or be ready for pickup. Prints on the PDF and shows in the Expected column on the list.
Fulfillment
Receive at
Which of your facilities the stock lands at when the PO is received. Defaults to your default facility (whichever one has "Default" flagged in Settings → Inventory → Storage Locations); switch to any active facility, or choose "No facility specified" to fall back to each item's own default location on receipt. The address of the selected facility shows underneath.
Ship to address (only shown when Fulfillment = Delivery)
Optional free-text override. Blank means the PDF prints the facility address instead which is usually what you want. Use this only when the delivery goes somewhere other than the Receive-at facility (a job site, a customer's yard, etc.).
Line Items *(at least one required)*
Two button choices:
For each line: Qty must be ≥ 1, Unit Cost must be ≥ 0. Line total is computed live; running totals update as you go. Remove a line with the trash icon.
Tax Rate (%) *(optional)*
The vendor's tax rate, if they charge one. This is *your vendor's tax on the materials they sell you* it's not the same as the customer sales tax your invoices calculate. PortaPro doesn't run its sales-tax engine here; you enter the rate manually because a vendor's tax is whatever their invoice says. Leave blank if the vendor doesn't charge tax on this order.
Notes / Instructions *(optional)*
Anything the vendor needs to know: delivery gate codes, ship-to contact, special handling. Prints on the PDF at the bottom.
PO Number
You do not enter it. PortaPro assigns it when you save, using the prefix and padding from Settings (default `PO-0001`, `PO-0002`, …). The modal shows a preview at the top ("Will be numbered PO-0037 when saved"). Once assigned, the number is immutable it can't be edited or reused.
Click Create Purchase Order to save. The PO lands in the list as Draft.
---
PO-3: PO Numbering & Settings
Every org has its own counter. `PO-0001` on your account has no connection to `PO-0001` on anyone else's.
Where to configure: Settings → Finance → Invoices → Purchase order numbering card.
The card shows a live preview ("Next PO preview: PO-0001") so you can see the format before saving. Existing PO numbers are never changed by a prefix/padding change only future ones.
Concurrent creates: if two operators create a PO at the same instant, PortaPro assigns sequential numbers atomically you won't get two `PO-0001`s.
---
PO-4: Editing a Draft
Only Draft POs can be edited. Once you send a PO (or the vendor sees it), the numbers, lines, and totals should not change without a paper trail that's the whole point of the document.
To edit: open the PO from the list → Edit. The same form opens with everything pre-filled. Change what you need and save.
If you need to change an ordered or received PO, your options are:
The PO number itself is permanent cancelling a PO doesn't reuse its number.
---
PO-5: Sending the PO to Your Vendor
Once the draft is right, hit Send to Vendor. A modal opens with:
Click Send. What happens:
A resend has the same modal (button just reads "Resend") and works exactly the same way. The system tracks that it's a resend so you can see chase-up effort in the list ("2 resends" under the delivery badge).
Which email address does the vendor see? see the next section.
---
PO-6: Delivery Tracking (Sent / Delivered / Opened / Bounced)
PO emails have the same delivery tracking as customer invoices and quotes. Every PO row shows a Delivery badge next to the status pill:
The badge shows the strongest signal seen so far: an opened PO also had to be delivered first, so it shows Opened. Once a PO has been sent more than once, "· 2 resends" appears next to the badge so you can see how many nudges it took.
Open a PO to see the full send history in the detail modal every send with its recipient and timestamp, and every delivery event (delivered / opened / bounced) with the exact time it happened.
Which sender path was used?
PortaPro picks the best sender available for your org:
If you want tracking on every PO, verify a sending domain in Settings.
---
PO-7: Downloading & Printing the PDF
You don't need to email the PO to get the PDF. From the detail modal:
The PDF is the same file the email attachment carries. It shows your company at the top (logo + address + phone + email), the vendor on the left, the ship-to/pickup block on the right, PO number and dates, the line items with SKU (for catalog lines), totals, and any notes.
Downloading is only available for non-draft POs a Draft is a working document, not an outgoing one. Send it (or cancel and rebuild) if you need a PDF version.
---
PO-8: Receiving Items
When materials arrive from the vendor, open the PO → Receive Items.
The modal shows every line on the PO with four columns:
How to receive a partial shipment: enter the quantity that arrived on each line, leave lines you didn't get at `0` (or type `0` to skip). PO status becomes Partially Received; the modal footer confirms this ("This will mark the purchase order as partially received").
How to receive the rest later: reopen Receive Items; the Received column now shows what came in last time, Remaining is updated, and you enter whatever arrived this round.
Over-receipt is blocked. You can't receive more than Remaining the input turns red and Save is disabled, and the server rejects it too if you somehow bypass the UI. If the vendor actually shipped extra, cancel the PO and open a new one for the excess (or add the extra to a fresh PO), so the paper trail stays accurate.
What happens when you save:
Where does the stock land? at the Receive at facility on the PO. If none was set, PortaPro uses each consumable's default storage location. Check Inventory → Consumables after a receipt and the on-hand count reflects the new quantity.
Only office staff (admin/dispatcher) can receive. Drivers and mechanics can't.
---
PO-9: Cancelling a Purchase Order
Open the PO → Cancel PO (red button, bottom of the detail modal). A confirmation dialog appears. If the PO has already been sent, the dialog warns you that cancelling here does not notify the vendor you need to contact them separately to confirm the order is void.
Cancellable at any status except Received. Received quantities and stock adjustments are not reversed by cancelling cancellation is about the PO, not about unwinding the receipt. If you received items in error, adjust the consumable's stock manually.
Cancelled POs stay in the list (grayed out with a "Cancelled" pill) they're part of the paper trail. Their PO number is not reused.
---
PO-10: Convert to Bill (Closing the PO into Your Books)
When the vendor sends you their invoice for the PO, you record it as a Bill in PortaPro. The PO itself doesn't post to your books the Bill does. This is the QuickBooks Online / Xero convention: POs are non-posting; Bills are the AP posting document.
Open the PO → Convert to Bill. A pre-filled Bill form opens:
Save. The Bill goes onto the Bills tab and the PO's linked Bill number appears in two places:
When can you convert? From Ordered onward you don't have to wait for Received. Many vendors invoice before delivery, and QBO permits billing pre-receipt for exactly that reason.
Amounts don't have to match. If the vendor's invoice is $10 off the PO restocking fees, short shipment, whatever enter the vendor's actual amount on the Bill. The PO records what you ordered; the Bill records what you owe. They're allowed to differ.
---
PO-11: What Happens to Attributions (`Created by`, `Received by`)
Neither is currently displayed in the UI, but they exist for audit and future reporting. Every action is tied to a real user in the org.
---
PO-12: How POs Relate to the Other Financial Documents
| Document | Direction | Posts to books | Ties to |
|---|---|---|---|
| Quote | Sell-side (to your customer) | No (non-posting) | Becomes an Invoice on acceptance |
| Invoice | Sell-side (to your customer) | Yes | Payments come in against it |
| Purchase Order | Buy-side (to your vendor) | No (non-posting) | Becomes a Bill when vendor invoices you |
| Bill | Buy-side (from your vendor) | Yes (AP) | Payments go out against it |
| Expense | Buy-side (already paid) | Yes | Standalone; no vendor invoice expected |
If you're not sure whether to record something as a Bill or an Expense: if the vendor sent you an invoice with terms (Net 30, Net 15), it's a Bill. If you paid at the counter and got a receipt, it's an Expense.
---
PO-13: Things POs Do NOT Do (Yet)
Being explicit so you don't hunt for these:
These are known gaps, not bugs. If any of them are important to you, tell us.
---
PO-14: Auto-Reorder Drafts
PortaPro can turn low consumables into draft purchase orders once a day. It's off by default — switch it on in Settings → Purchasing.
Each morning it looks at every consumable whose on-hand quantity has fallen to or below its reorder threshold (a threshold of zero means the item isn't watched) and drafts POs grouped by each item's Preferred Vendor. Items with no preferred vendor land on a single Vendor TBD draft, so nothing is silently skipped.
Drafts never send themselves. Sending stays a human action — an auto-draft is a prepared order waiting for your review, not an order placed.
How the quantity is decided, first rule that has a value:
| Order | Source |
|---|---|
| 1 | Reorder Quantity you set on the consumable |
| 2 | PortaPro's recommended quantity from 90 days of usage history |
| 3 | A top-up to twice the threshold |
An item with no usage history simply falls through to the next rule rather than inventing a number.
One open auto-draft per vendor. The next day's run appends new lines to the existing draft instead of creating a second one, and anything already on an open PO (draft, ordered, or partially received) is skipped — so you never reorder what's already on order.
Set Preferred Vendor and Reorder Quantity on a consumable in its Costing tab. You get one “reorder drafted” notification per day, and only when lines were actually drafted.
---
PO-14: Troubleshooting
"Send to Vendor" says the vendor has no email.
The Vendors tab is where you fix that: open the vendor, add an email address, save. Next PO will prefill it. In the meantime, type an address into the To field on the send modal it works for the current send.
The Delivery badge is stuck on "Sent" and never changes.
Two possibilities:
If a PO shows Sent for over a week with no signal, and you know it's not the Gmail case, check the vendor's email address for typos and resend.
I received items but on-hand didn't go up.
Check whether the lines were catalog items or custom lines. Custom lines are free-text and intentionally do not update stock the receive modal marks them "not tracked in inventory." If they *were* catalog items and stock didn't update, the receipt itself would have failed with an error check whether the receive actually completed (the PO status should have changed).
I get "Cannot receive more than N remain" when trying to receive.
The line has already been fully received on a prior receipt, or you typed a quantity higher than what's actually outstanding. Check the Received column against Ordered if they match, that line is done.
A PO's Convert to Bill button is gone.
The PO is either still in Draft (send or manually change status to move it forward), was Cancelled, or has already been converted (look for a "Billed as [BILL-NUMBER]" chip in the detail modal).
The PO number I want to use is already taken / I want to start a new sequence.
You can't manually assign PO numbers the trigger owns them and they're permanent. You can change your prefix (Settings → Finance → Invoices → Purchase order numbering) so future POs read `SUP-0001` or whatever, but existing numbers stay put.
I sent a PO and now the details are wrong.
Edit is disabled on non-draft POs by design (once the vendor has seen it, the numbers are the vendor's reference). Cancel it and issue a new one at the corrected numbers. If the vendor already fulfilled it and only the internal record is off, add a note on the Bill when you convert.
A resend didn't send.
Check the vendor's email address hasn't lost its `@` since the first send, and look at the send history in the PO detail modal a failed send shows with an error message in the metadata. Contact support if the error isn't clear.
