Home / Help Center / pos-app-bakery / bakery / Standing Orders
♻️ bakery

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.

📍 Menu path: Bakery → Standing Orders
👤 Who uses it: Staff managing recurring customer subscriptions
🏷️ Plan tier: advanced+

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

Step-by-Step Guide

1 Create a new standing order

  1. Click New Standing Order.
  2. 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.
  3. 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.
  4. 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.
  5. Fill in the customer's name/phone and any delivery-instruction notes, then click Create.
💡 GST is calculated at invoice generation time using the linked product's or selected tax group's rate — not shown as part of the order's stored total.

2 Edit, pause, resume or cancel an order

  1. Use the Frequency tabs at the top (All / Active / Paused / Cancelled) to filter the list.
  2. Click the edit (pencil) icon on a row to reopen the same form and change the schedule, items or customer details.
  3. 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.
  4. 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.
  5. Once an order is Cancelled, a trash icon appears to permanently delete it.

3 Bill a standing order's current run through POS

  1. On any Active order, click the invoice icon (Bill via POS) in the Actions column.
  2. 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.
  3. 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 / ButtonWhat it does
New Standing OrderOpens 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 tagShows 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 columnHuman-readable schedule, e.g. "Every MON" or "Monthly, day 1", plus the computed or server-provided Next Date underneath.
Items columnUp 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 columnThe order's stored subtotal minus discounts, explicitly excluding tax (calculated later at invoicing).
Next Date columnThe next date this standing order is due to run.
Status badgeActive (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 nameSearch 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

Troubleshooting & FAQ

I can't save a new standing order — it says to add at least one item with a name and price.
Every line item needs both a non-empty name and a Unit Price greater than zero before the order can be created or updated; remove or fill in any blank rows.
The Bill via POS icon is missing on an order.
It is only shown for orders currently in Active status — Paused and Cancelled orders cannot be billed from this screen until reactivated.
I want to delete an order but there's no delete icon.
Orders must be Cancelled first before they can be permanently deleted — this is a safeguard so an order's history isn't lost accidentally.
The GST amount isn't showing anywhere on the order.
By design, this page only tracks the pre-tax total. GST is calculated fresh using the current product/tax-group rate only when an actual invoice is generated for that run via Bill via POS.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/pos-app-backery/src/pages/bakery/StandingOrdersPage.jsx
  • frontend-app/packages/pos-react-lib (GenericOrderModal, ItemSearch, openInBilling — shared utilities)

Backend endpoints used:

  • GET /bakery/standing-orders
  • POST /bakery/standing-orders
  • PUT /bakery/standing-orders/:id
  • DELETE /bakery/standing-orders/:id
  • GET /tax-master/tax-groups

Related tables (db-core repositories):

  • StandingOrder
  • StandingOrderItem
  • TaxGroup
  • Product
  • Customer

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.