Festival Orders
Festival Orders runs an entire festival advance-order campaign (Diwali sweets, Christmas cakes, and similar) in one place — set target production quantities per product, log every customer order with an advance payment, and watch fulfilment progress toward each target.
Overview
You start by creating a Festival — its name, Event Date, an optional Order Cutoff Date, and a list of Products with a target production Quantity and price for each.
Selecting a festival from the left-hand list opens its Orders panel: summary cards for total Orders, Advance collected, Total value and Balance pending, plus a Production Needs section showing an ordered-vs-target progress bar for every product in the festival.
Each customer order moves through a fixed status flow — Received → Confirmed → Ready → Delivered (or Cancelled at any point) — using a single "advance status" button that always shows the next step.
Orders can be billed straight into POS (once, via a "Bill via POS" action) and, after billing, the printed invoice can be reopened directly from the order row.
Before You Start
- Requires the Advanced plan tier or above.
- A festival must be created with at least its name and Event Date before any orders can be logged against it.
Step-by-Step Guide
1 Set up a festival and its production targets
- Click New Festival, enter the Festival Name (e.g. "Diwali 2026") and Event Date, and optionally an Order Cutoff Date and Notes.
- Under Products & Target Quantities, search for and select each product you plan to sell for this festival (or type a custom name), set its Target Qty and Price, and click Add for more rows.
- Click Create Festival — it appears in the left-hand festival list, selected automatically if it's the first one.
2 Log a customer's festival order
- Select the festival from the left list, then click Add Order in the Orders panel.
- Enter the customer's name and phone, then enter a Quantity against each product already defined for the festival (only products with a quantity greater than zero are included).
- Enter any Advance Amount collected and Notes, then click Add Order — the order is added with status Received.
3 Track fulfilment status and production needs
- Review the Production Needs progress bars — each shows Ordered vs. Target quantity for a product, turning green once the target is fully met.
- On each order card, click the "→ [Next Status]" button to advance it one step: Received → Confirmed → Ready → Delivered.
- Watch the summary cards (Orders / Advance / Total / Balance) update as orders are added or their amounts change.
4 Bill an order and print its invoice
- On an order that hasn't been billed yet (no linked sale), click the invoice icon (Bill via POS) to open Billing pre-loaded with that order's items, customer and a note referencing the festival and advance collected.
- Once a sale exists for the order, the invoice icon is replaced with a print icon — click it to reopen and print that sale's invoice directly from this page.
5 Edit or delete a festival
- Click the pencil icon on a festival in the left list to edit its name, dates, notes or product targets.
- Click the ✕ icon to delete a festival — you are warned this also deletes every order logged against it, and must confirm.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
New Festival | Opens the form to create a new festival campaign with its name, event date, cutoff date, notes and product targets. |
Festival list (left panel) | Every festival created, showing its event date, a "Order cutoff passed" warning once relevant, and its product count; click one to view its orders. |
Orders / Advance / Total / Balance summary cards | Live totals for the selected festival — order count, advance collected, total order value and balance still pending. |
Production Needs | One progress bar per product in the festival, comparing quantity ordered so far against its target quantity. |
Add Order | Opens the order form pre-populated with the festival's product list for entering a customer's quantities and advance payment. |
Order status badge | Received (blue), Confirmed (purple), Ready (green), Delivered (teal) or Cancelled (red). |
"→ Next Status" button | Advances an order one step along Received → Confirmed → Ready → Delivered; not shown once Delivered or Cancelled. |
Bill via POS (invoice icon) | Opens Billing pre-loaded with the order's items and customer; only shown before a sale has been created for that order. |
Print Invoice (printer icon) | Reopens and prints the linked sale's invoice; only shown once the order has been billed. |
Edit / Delete festival (pencil / ✕ icons) | Edits the festival's setup, or deletes it and all its logged orders after confirmation. |
Tips & Best Practices
- Set realistic Target Qty values per product when creating the festival — the Production Needs bars are only useful if the targets reflect what your kitchen can actually produce.
- Set an Order Cutoff Date ahead of the event date to give your kitchen enough lead time; the festival list flags once that cutoff has passed.
- Advance the order status promptly as batches come out of the oven — Production Needs and the summary cards are more useful when statuses are kept current.
Troubleshooting & FAQ
I can't add an order — it says a customer name is required.
The invoice/print icon is missing from an order.
A product doesn't show up in Production Needs even though I logged orders for it.
I deleted a festival by mistake.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/fnb/FestivalOrdersPage.jsx (exported as FnbFestivalOrdersPage)frontend-app/packages/pos-react-lib (GenericOrderModal, openInBilling, InvoicePrint — shared components)
Backend endpoints used:
GET /bakery/festivalsPOST /bakery/festivalsPUT /bakery/festivals/:idDELETE /bakery/festivals/:idGET /bakery/festivals/:id/ordersPOST /bakery/festivals/:id/ordersPATCH /bakery/festivals/:id/orders/:orderId/statusGET /productsGET /settingsGET /sales/:id
Related tables (db-core repositories):
FestivalFestivalProductFestivalOrderSale
Feature flag key: festival_orders (requires advanced plan tier or above)
The component lives under the shared pos-react-lib/src/pages/fnb/ folder (exported as FnbFestivalOrdersPage), meaning it is written to be reusable across food & beverage variants, not bakery-exclusive at the code level — the bakery variant currently mounts it at /bakery/festival-orders. "Bill via POS" uses the shared openInBilling utility with sourceOrder: { type: "FESTIVAL", id, festivalId, returnPath: "/bakery/festival-orders" }.