Purchase order pricing
Every line on a purchase order takes its unit price from the chosen store's price list. The price is recorded on the line, refreshed while the order is a draft, and checked once more against the price list when the order is confirmed.
Overview#
Nobody types a unit price on a purchase order. Each line takes the price of its SKU at the selected store from that store's current price list, and the price field is read-only. The price is saved on the line together with a snapshot of it, so later changes to the price list never alter an order that has already left Draft. While the order is a draft, its prices can be refreshed with Refresh Prices and are fetched again when its store changes; the order takes the new prices when the draft is saved. At confirmation, every line is checked against the current price list again, and any mismatch stops the confirmation. This page covers how orders use prices; how merchants set them up is on Price lists.
Rules#
Which price a line gets
- The price comes from the store's price-list entry for that SKU that is in force now: it has started, and it has no end date or its end date has not passed. If several entries are in force, the one with the latest start wins. If two entries start at the same moment, the one entered last wins.
- A price entry that is scheduled to start later does not price an order until it starts. An expired entry never does.
- A price entry counts only while it is active and its SKU is active. A store that has been deactivated prices nothing.
- On the web, the server looks the price up again for every new or changed line when the order is saved, and ignores whatever price the form sent. If such a line's SKU has lost its price by then, the save stops with the message "[SKU name]: price no longer available.".
- In the Driver App, the price is taken from the store's price list in the same way when the driver submits. If any SKU has no current price at that store, the whole order is refused.
Which SKUs can be chosen
- The SKU list on a line shows only non-fuel SKUs that have a current price at the selected store. It stays empty until a store is chosen.
- On the web, the server applies the same restriction when the order is saved, so a SKU that is not priced at the store cannot be added to a line. A line that is already saved keeps its SKU even after that SKU loses its price, so the draft can still be opened.
- Which stores a tenant can order from is described on Which stores tenants and drivers can see.
What is recorded on the line
| Recorded | When it is set |
|---|---|
| Unit price | When the line is first saved, and again whenever the line is changed or refreshed and the draft is saved. |
| Price snapshot | Set to the unit price when the line is created and again whenever the line is saved. A refresh compares the current price with it. |
| VAT basis (price includes VAT or not) | Taken from the price-list entry that priced the line when it is first added. |
| VAT rate, VAT amount, line total | Worked out from the price, quantity and VAT basis whenever the line is saved, using the VAT rate in force when the order was created. |
How VAT is worked out from the rate and basis is on VAT rates and VAT-inclusive prices.
Refreshing a draft's prices
- When a Draft purchase order is opened for editing, a line whose SKU no longer has a price at the store is highlighted and marked Price unavailable.
- Click Refresh Prices to see which prices changed — the old price struck through, then an arrow, then the new price — and to put the new prices into Unit Price, Subtotal and Grand Total. Save the draft to keep them. A line you neither refreshed nor changed keeps its saved price.
- Refresh Prices is on the edit form of an existing draft, not on the form for a new order.
- A line with no price must be removed before the draft can be confirmed.
- Saving a re-priced draft also changes the amount held from the tenant's wallet. If the wallet cannot cover a higher total, nothing in the edit is saved and the original hold stays. See Order funds holds and expiry.
Changing the store
- Choosing a different store re-filters the SKU list on every line to the SKUs that the new store has priced, and re-prices the lines that remain from the new store's price list.
- Lines whose SKU has no price at the new store are removed from the form. No confirmation is asked for: the change applies straight away.
- If the new store has no priced non-fuel SKUs at all, the form shows "This store has no available SKUs with valid prices.".
Re-checking prices at confirmation
- Confirming a draft checks every line's unit price against the store's current price list.
- All lines are checked together. If any line fails, the whole confirmation is refused and the order stays Draft.
- The same check runs when a driver confirms in the Driver App and when a supervisor approves an order waiting for approval. A refused approval leaves the order waiting for approval, not in Draft.
- After confirmation the line prices are not re-checked again. Later price-list changes do not affect the order. A merchant accepting the order in the Merchant App can confirm the lines actually supplied, which replaces their SKU, quantity and unit price; see Purchase orders.
Edge cases#
| What you see | Why | What to do |
|---|---|---|
| "[SKU name]: price changed from [old price] to [new price]." when confirming | The store's price for that SKU changed after the line's price was last saved. | On the web, open the draft for editing, click Refresh Prices, save it, then confirm. The Driver App has no price refresh. |
| "[SKU name]: price no longer available." when saving or confirming | The store no longer has a current price for that SKU: its price entry ended, was deactivated or deleted, or the SKU was deactivated. | Remove the line, or choose a store that prices the SKU. |
| A line disappears from the form after you change the store | The new store has no current price for that SKU. | Add a SKU the new store sells. |
| The SKU list is empty | No store is chosen yet, or the store has no priced non-fuel SKUs. | Choose a store, or ask the merchant to add prices. |
Because every confirmation runs this check, an order reaches the merchant only at the store's current prices.