Advance Booking
Advance Booking (also called Lay-by) lets a customer reserve items with a deposit and pay off the balance in instalments over time; once the balance reaches zero the order can be converted straight into a normal sales invoice.
Overview
Every lay-by order tracks a Total Amount, how much has been paid in Deposit Paid, and the remaining Balance Due — as instalments are recorded, the balance shrinks until it reaches zero.
Orders move through three statuses: ACTIVE (still being paid off), COMPLETED (fully paid), and CANCELLED (called off before completion).
A due date can be set on each order; if that date has passed while the order is still ACTIVE, the due date is shown in red and bold in the list so overdue lay-bys stand out.
Before You Start
- Advance Booking appears in the sidebar only on the Advanced plan tier or above.
- The lay-by order itself (with its deposit and items) is created from the Sales/billing screen; this page is for tracking, collecting further instalments, cancelling and converting existing orders.
- Recording a payment, cancelling an order, or converting a completed order to an invoice all require Create/Edit permission.
Step-by-Step Guide
1 Filter and find a lay-by order
- Use the status tabs (All, Active, Completed, Cancelled) at the top to filter the list.
- Type in the search box to filter by order number or customer ID.
- Click any sortable column header (Order #, Total, Paid, Balance Due, Due Date) to sort ascending/descending.
- Switch between Table and Grid layout with the view toggle, and use Export to download the current filtered list.
2 Record an instalment payment
- Click anywhere on an ACTIVE order's row (or card) to expand it and reveal the payment history and payment form.
- Enter the Amount to collect — it cannot exceed the order's remaining Balance Due; the form blocks over-payment with an error naming the exact balance due.
- Choose the Payment Method: Cash, Card, UPI, Wallet or Bank Transfer.
- Optionally add Notes (e.g. "2nd instalment") for your own record-keeping.
- Click Record Payment — if the payment brings the balance to zero the order automatically flips to COMPLETED and a success message confirms this; otherwise you see the new balance due.
3 Cancel or convert an order
- To call off an order before it is paid off, expand it and click Cancel Order — you must confirm the action in a browser confirmation dialog before it proceeds.
- Once an order reaches COMPLETED status and has not yet been converted, expand it and click Convert to Invoice — confirm the prompt naming the lay-by order number.
- On success, a new sales invoice is created from the lay-by order and a toast shows the new invoice number; the order is then marked as converted and the button is replaced with a "converted" label.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Status tabs (All/Active/Completed/Cancelled) | Filters the order list; resets to page 1 and collapses any expanded row when changed. |
Search box | Filters visible orders by order number or customer ID. |
Order #, Total, Paid, Balance Due, Due Date columns | Sortable table columns — clicking toggles ascending/descending sort direction. |
Table / Grid view toggle | Switches the layout of the order list between a table and a card grid. |
Export | Downloads the current sorted/filtered list (Order #, Customer, Total, Paid, Balance Due, Due Date, Status). |
Amount (payment form) | Instalment amount to record; capped at the order's remaining balance due. |
Payment Method (payment form) | Cash, Card, UPI, Wallet or Bank Transfer. |
Notes (payment form) | Optional free-text note attached to the instalment. |
Record Payment | Submits the instalment; auto-completes the order if it brings the balance to zero. |
Cancel Order | Cancels an ACTIVE order after a confirmation prompt. |
Convert to Invoice | Turns a fully-paid COMPLETED order into a normal sales invoice; a one-time action shown only before conversion. |
Payment history | List of past instalments shown when an order is expanded (amount, method, date/time, notes). |
Active / Completed / Cancelled stat cards | Counts by status, plus the total balance still owed across all Active orders. |
Tips & Best Practices
- Always set a realistic Due Date when the lay-by order is created at billing — the overdue highlighting on this page only works off that date.
- Use the Notes field on each instalment to record how the customer paid or any special circumstance, since it is the only free-text trail attached to that payment.
- Convert completed orders to an invoice promptly so your reports and accounting reflect the sale as finalised rather than sitting as a lay-by.
Troubleshooting & FAQ
Why can't I record a payment larger than what the customer owes?
The Convert to Invoice button is missing on a completed order.
I don't see any way to create a brand-new lay-by order on this page.
Advance Booking is not in my sidebar at all.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/LaybyPage.jsx
Backend endpoints used:
GET /laybyGET /layby/:idPOST /layby/:id/installmentPUT /layby/:id/cancelPOST /layby/:id/convert
Related tables (db-core repositories):
LaybyOrderLaybyInstallmentSale
Redux slices:
scope (selectCurrentScope / getScopeQueryParams)
Feature flag key: layby (requires advanced plan tier or above)
Sorting, searching and pagination (10 rows/page) all happen client-side against the full order list returned by GET /layby rather than server-side, so very large lay-by histories are fetched in one call. Order line items are stored as a JSON string on the order (items field) and parsed client-side just to display an item count.