Standing Orders
Standing Orders manages recurring customer subscriptions — daily bread, weekly cakes, monthly office snack boxes — with a schedule, a line-item list, and a one-click "Bill via POS" action each time a run comes due.
Overview
Each standing order has a Frequency (Daily, Weekly, or Monthly with a chosen day-of-week or day-of-month), a Start Date and optional End Date, and one or more line items — each either a real product (searched and linked) or a free-text custom item name.
Line items can each have their own quantity, unit price, discount and tax group; if a real product is linked, its tax rate is used automatically instead of a manually picked tax group. GST itself is only calculated later, at the moment an invoice is actually generated for that run — the order screen shows a pre-tax total.
Every order carries a Status of Active, Paused or Cancelled — pausing stops a subscription temporarily without losing its setup, and only a Cancelled order can be permanently deleted.
Orders linked to an existing customer record show a small green "CRM" tag next to the customer name, confirming the order is tied to that customer's history rather than just a typed-in name.
Before You Start
- Requires the Advanced plan tier or above.
- Linking a line item to a real product requires that product to already exist (searched via the item search box); otherwise you can still type a free-text item name with a manual price and tax group.
Step-by-Step Guide
1 Create a new standing order
- Click New Standing Order.
- Choose a Frequency — Daily, Weekly (then pick a Day of Week) or Monthly (then pick a Day of Month, 1–28) — plus a Start Date and optional End Date.
- Add one or more Line Items: search for an existing product (its price and tax rate pre-fill automatically) or just type a custom item name and set its Unit Price and Tax Group yourself.
- Enter Quantity and an optional Discount per line; the running Subtotal / Discount / Pre-tax Total appears at the bottom once any line has a price.
- Fill in the customer's name/phone and any delivery-instruction notes, then click Create.
2 Edit, pause, resume or cancel an order
- Use the Frequency tabs at the top (All / Active / Paused / Cancelled) to filter the list.
- Click the edit (pencil) icon on a row to reopen the same form and change the schedule, items or customer details.
- On an Active order, click the pause icon to move it to Paused (the subscription stops generating new runs but keeps its full setup); on a Paused order, click the play icon to set it back to Active.
- Click the ✕ (Cancel) icon on any non-cancelled order to mark it Cancelled — cancelling is not the same as deleting, the record and its history remain.
- Once an order is Cancelled, a trash icon appears to permanently delete it.
3 Bill a standing order's current run through POS
- On any Active order, click the invoice icon (Bill via POS) in the Actions column.
- BazaarPOS opens the Billing screen pre-loaded with that order's items, quantities, discounts and tax rates, the linked customer (if any), and a note referencing the standing order number and frequency.
- Complete the sale as normal in Billing — the standing order itself is not automatically marked or advanced; it simply supplies the starting cart for that run.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
New Standing Order | Opens the form to create a fresh recurring order. |
Status tabs (All / Active / Paused / Cancelled) | Filters the order list by its current status. |
Customer column + CRM tag | Shows customer name and phone; a green "CRM" tag confirms the order is linked to an actual customer record rather than a typed name only. |
Frequency column | Human-readable schedule, e.g. "Every MON" or "Monthly, day 1", plus the computed or server-provided Next Date underneath. |
Items column | Up to 2 line items shown inline (qty × name @ price, with a "product" tag for linked products or the tax group name for custom items), with a "+N more" indicator if there are additional lines. |
Pre-tax Total column | The order's stored subtotal minus discounts, explicitly excluding tax (calculated later at invoicing). |
Next Date column | The next date this standing order is due to run. |
Status badge | Active (green), Paused (amber) or Cancelled (grey). |
Bill via POS (invoice icon) | Opens Billing pre-loaded with this order's items and customer; only shown while the order is Active. |
Edit (pencil icon) | Reopens the order form to change schedule, items, customer or notes. |
Pause / Resume (pause/play icon) | Toggles an order between Active and Paused. |
Cancel (✕ icon) | Marks a non-cancelled order as Cancelled, available at any status except Cancelled itself. |
Delete (trash icon) | Permanently removes the order; only available once its status is Cancelled. |
Frequency field (form) | Daily, Weekly or Monthly — reveals a Day of Week or Day of Month field depending on the choice. |
Line item search / custom name | Search box that links a real product (auto-filling price and tax rate) or accepts free-text for an item not in your catalogue. |
Tax Group column (per line) | Manually selectable only for custom (non-product) line items; linked products show their own GST % instead, read-only. |
Tips & Best Practices
- Link line items to real products wherever possible — it keeps the tax rate accurate automatically and avoids re-typing a price every time you edit the order.
- Use Pause instead of Cancel for a customer going on holiday — resuming later keeps the exact same schedule and items instead of rebuilding the order from scratch.
- Check the Next Date column each morning to know which standing orders are due to be billed that day.
Troubleshooting & FAQ
I can't save a new standing order — it says to add at least one item with a name and price.
The Bill via POS icon is missing on an order.
I want to delete an order but there's no delete icon.
The GST amount isn't showing anywhere on the order.
🧑💻 Developer Notes
Source component(s):
frontend-app/pos-app-backery/src/pages/bakery/StandingOrdersPage.jsxfrontend-app/packages/pos-react-lib (GenericOrderModal, ItemSearch, openInBilling — shared utilities)
Backend endpoints used:
GET /bakery/standing-ordersPOST /bakery/standing-ordersPUT /bakery/standing-orders/:idDELETE /bakery/standing-orders/:idGET /tax-master/tax-groups
Related tables (db-core repositories):
StandingOrderStandingOrderItemTaxGroupProductCustomer
Feature flag key: standing_orders (requires advanced plan tier or above)
Bakery-only local component (pos-app-backery/src/pages/bakery/StandingOrdersPage.jsx) mounted at /bakery/standing. "Bill via POS" uses the shared openInBilling utility with sourceOrder: { type: "STANDING", id, returnPath: "/bakery/standing" } so Billing knows where to send the user back after completing the sale. Next-run-date is computed client-side as a fallback (computeNextDate) whenever the server doesn't already supply nextRunDate.