Documentation Changelog
Point of Sale

Taking and managing orders

How to take an order at the till, send it to the kitchen, assign staff, and follow it through to completion.

This page explains how orders work, from tapping New Order to the order closing.

Orders list page.
The order queue — filterable by status, type, and outlet.

What it is

Every sale goes through Orders — dine-in, takeaway, or delivery. It starts the moment you open a ticket at the till, and ends when the order is paid and closed. Orders turns a table of guests, or a phone-in delivery, into two things: a ticket the kitchen can cook from, and a bill the customer can pay.

  • Who uses it — Cashiers and outlet managers open and manage orders at the till. Waiters handle their own tables from My Orders. Delivery riders handle their own deliveries from My Deliveries. Kitchen staff work from the kitchen display. Managers watch the whole floor from the main Orders screen. Customers can ask for a refund from their own account, and staff then handle that request.
  • Where it lives — Orders are created on the Billing / POS screen (see Billing and payments for the full picture of that screen). After that, you track and update an order on the Orders, My Orders, My Deliveries, or kitchen-display screens.
  • Current status — This is live and working. Dine-in (with table selection), takeaway, and delivery are all built. So are kitchen station routing, waiter and rider accept/decline, and a refund-request queue customers can use.

Where to go

What you want to do Go to
Take an order yourdomain.com/billing
See all orders yourdomain.com/orders
Open one order yourdomain.com/orders/{number}
See the orders assigned to me yourdomain.com/my-orders
See my deliveries yourdomain.com/my-deliveries
Watch the kitchen yourdomain.com/kitchen/display
Handle refund requests yourdomain.com/storefront/refunds

How it works

Taking an order at the till

Open Billing / POS from the sidebar, or go to yourdomain.com/billing.

Choose the order type

At the top of the screen, choose Dine In, Takeaway, or Delivery. Pick this first — it decides what the rest of the screen will ask you for.

The full Billing / POS screen with Dine In selected, an empty cart, and the menu grid on the left.
The till right after opening it — Dine In selected, nothing added yet.
Pick a table (dine-in only)

Click Select Table and choose the table the guests are on.

Select Table dialog showing available and occupied tables grouped by Main Hall and Garden Patio, with a floor tab strip above.
The table picker — available tables in green, the occupied one in red.
Add the customer (optional)

In the order panel on the right, search by name or phone. If the customer already exists, they'll show up as you type. Leave it blank and the order is booked as a walk-in.

Customer search box with 'Arjun' typed, showing a dropdown with a Walk-in (no customer) option and a matching customer, Arjun Sharma, with their phone number and loyalty points.
Type a name or phone number — a matching customer shows up with their loyalty points.
Order panel with Arjun Sharma selected as the customer, showing their phone number, loyalty points, and a clear (×) button to remove them.
Once picked, the customer stays attached to the order — click × to remove them and go back to a walk-in.
Choose the waiter

Use the Select Waiter dropdown, and set the number of people.

Order panel with Ramesh Waiter selected in the Select Waiter dropdown and Persons set to 4.
Waiter picked and party size set to 4.
Add the items

Click items to add them. You can:

  • Filter by category — All, Starters, Main Course, Breads, Beverages, Desserts, Specials
  • Use Search items… to find something by name
  • Click Combos or Offers to add a deal

Each card shows the price, whether the dish is vegetarian, and which kitchen station it goes to (Tandoor, Grill, Fryer, Bar, Dessert, Main Kitchen). A sound confirms each item added. Once an item is in the cart, the − and + buttons next to it change how many you're ordering.

Cart with Butter Chicken at quantity 2 and Butter Naan at quantity 1, each with minus and plus buttons, under a selected customer, Arjun Sharma.
Two items in the cart — Butter Chicken bumped up to 2 with the + button.
Apply any reductions

Under the cart:

  • Discount — choose a rule from the dropdown
  • Coupon — type the code and click Apply
  • Service Chg — choose a service charge rule
  • Tips and Rounding can be entered directly

The Payable figure updates as you go. That is what the customer pays.

Cart totals with a Happy Hour 10% discount applied, showing the discount amount, GST, and the resulting Payable figure.
Happy Hour 10% applied — GST and Payable both recalculate automatically.
Send it to the kitchen

Click Send KOT. The items appear on the kitchen display at their stations. Use KOT & Print instead if the kitchen works from paper.

Order panel with two items in the cart and an enabled Send KOT button, ready to send the order to the kitchen.
Two items, ready to send — Send KOT pushes them to the kitchen display at their stations.
Take payment

Click Bill & Payment. Use Bill or Bill & Print if the customer wants the bill before paying.

Order detail page showing the Bill Summary panel — Subtotal, Tax, Total Payable — and the transaction history with a cash payment marked Paid.
Once paid, the order's Bill Summary shows the same breakdown and the payment method in the transaction history.

The till screen has two layouts. Switch between them using Beam and Counter at the top right. Beam shows a grid of picture cards. Counter shows a compact list built for fast service. Your choice is remembered on that device.

Exit to POS takes you back to the terminal screen. Logout signs you out completely. These are kept separate on purpose, so finishing a sale never accidentally signs the till out.

A dine-in order needs a waiter assigned before it can be sent, and a delivery order needs a rider. The system won't let either go through without one. It also checks that the person you picked is actually a waiter or rider at this outlet — not just any staff account.

Working offline

If the till loses its internet connection in the middle of a sale, it keeps working. It always tries to send the order normally first. Only if that truly fails to reach the server — not if the server comes back with a real error, like a missing field — does the till save the order on the device itself and carry on as if it had gone through.

You keep working, uninterrupted

The order appears on screen right away, just like it would if you were online. You can keep taking the next order without missing a beat.

A banner tells you what's happening

A small banner appears at the bottom of the screen. It turns red and says "You're offline — orders will queue and sync when reconnected" while the connection is down. The moment the connection returns, it turns green and says "Syncing N offline orders..." while it catches up.

It syncs itself

The device checks the connection every 20 seconds on its own, and again the instant it senses it's back online. There's no button to press — nothing for the cashier to remember.

What works while offline: creating an order, marking it as paid in cash, and moving an order through its stages. What doesn't work: any payment that isn't cash. Card, UPI, wallet, and similar all need a live connection, so the till will refuse them with a clear message instead of accepting them and failing later.

Every order and payment saved while offline gets its own unique ID, created on the device before it's sent. If it gets sent twice — say, because of a shaky connection retrying it — the server recognizes it's already been recorded and doesn't create a duplicate. This is what makes it safe for the till to keep retrying on its own. A cashier never has to worry about a sale being booked twice.

The server doesn't just trust a device blindly. Before accepting a queued order, it checks that the order really belongs to the outlet that device is signed into — a device can't queue an order and later claim it was for a different branch. It also checks the timing. If an offline status change, like marking an order Ready, is out of date by the time it syncs — because someone else already moved that order along in the meantime — the server refuses the outdated update rather than overwriting what really happened. It flags this as something to sort out, instead of quietly losing the newer information.

Managing orders

Go to Orders in the sidebar, or yourdomain.com/orders.

The top of the page shows Total Orders, Order Placed, Completed and Payment Due for the period you are looking at.

Finding an order

  • Status tabs — All, Placed, Confirmed, Preparing, Ready, Picked Up, Out for Delivery, Reached, Delivered, Served, Completed, Cancelled
  • Search by order number or customer name
  • All Types to filter dine-in, takeaway or delivery
  • Date range, with Today, Yesterday and This Week shortcuts
  • Payment Due only to show just the unpaid

Switch between Orders and Tables at the top right to see the same trading as a list of orders or as a floor plan.

There's also a faster way to jump straight to an order from anywhere in the app: the Search anything… box in the top header — not the search box on this page. Click it, or press Ctrl K (⌘K on a Mac) from anywhere, and a centered search panel opens with the cursor already in the box. It searches five things at once: Orders, Customers, Menu Items, Tables and Staff. Each type shows with its own colored icon, so a mixed list of results is still easy to read. Type at least two characters — an order number, a customer's name, a dish name, a table name, or a staff member's name — and results appear about a third of a second after you stop typing (up to 5 per category), grouped by type. Click a result, or use the arrow keys and Enter, to open it. Press Esc to close the panel.

Orders, Customers, Menu Items and Tables only appear if you hold that module's own list permission — a Waiter, for example, never sees an Orders group here, because that needs the same permission as the main Orders screen itself. Staff is the one exception: it's deliberately open to every logged-in user regardless of permissions, so anyone can look up a colleague — it doesn't require the admin-only permission the Users screen itself needs.

A Table or Staff result doesn't jump to that specific table or person — neither screen has a URL-addressable search yet, so clicking one just opens the Tables or Staff list unfiltered. Orders, Customers and Menu Items do jump straight to (or pre-filter to) the specific result.

On a phone or narrow tablet, this search box isn't reachable at all. It's hidden from the header below a width breakpoint to save space, and nothing in the mobile layout currently opens the same panel another way — Ctrl K/⌘K only works if a physical keyboard is attached. On a touch-only device, use each screen's own on-page search instead (Orders, Customers, Menu Items all have one).

Global search dropdown showing an Order and a Customer result for a search term, with a keyboard-shortcut hint footer.
The Search anything… box, mid-search — results grouped by category with a colour-coded icon per type.

What each order card tells you

The order number and status, the type, the customer, whether it is PAID or UNPAID, a STOREFRONT badge if it came from your website, the date, the number of items and the total. A BILL button opens the bill.

Six order cards showing Confirmed and Completed statuses, PAID and UNPAID badges, a dine-in order awaiting waiter assignment, and a delivery order awaiting rider assignment.
Order cards on the Orders screen — status, payment badge, item count and total, plus the next action (Confirm, or assign a waiter/rider).

This matches the "online vs offline" split you'll see in Reports. Every order remembers where it came from. An order with a STOREFRONT badge is what Reports calls online — it was placed by a customer on your own website. An order with no badge — taken at the till or over the phone — is what Reports calls offline. See Reports → Sales Report for the table this feeds into.

Moving an order along

The card shows the next action:

  • Confirm — accept a newly placed order
  • Assign waiter — dine-in orders with nobody assigned
  • Assign delivery boy — delivery orders with no rider
Confirm the order

Click Confirm on a Placed order.

Assign someone

Click Assign waiter or Assign delivery boy and choose from the list. They then accept or decline it on their own screen.

Let the kitchen work

Items move to Preparing and then Ready as the kitchen bumps them.

Kitchen Display Cooking tab showing a ticket with a Mark Ready button for each item, and Mark Ready All at the bottom.
The kitchen's own view of the same order — cooking, one tap from Ready.
Hand it over

Dine-in is Served, takeaway is Picked Up, delivery runs through Out for Delivery, Reached and Delivered.

Order detail page for a Served dine-in order, with a per-item timeline showing Started cooking, Ready and Served timestamps for each dish.
Every item's own timeline — Started cooking, Ready, Served, each with a real timestamp.
Complete it

The order closes.

Order detail page for a Completed, Paid order — no Complete or Cancel buttons remain, and the transaction history shows the cash payment.
Completed and Paid — the order is now frozen; no further changes are possible.

Staff don't set an order's status directly. It's worked out automatically from the status of the individual items on it. Serve the last ready item, and the order becomes Served on its own — there's no separate "mark order served" step to remember. This also stops a whole table from being marked served while one dish is still cooking. The order can't reach that status until every item on it has.

Completing an order also does a few things automatically. It frees up the table for the next guests (if that setting is switched on), credits any loyalty points the customer earned, and — if the order used store credit and later gets cancelled — puts that credit back automatically.

What actually triggers this, and where to turn it on or off. The table frees up when the order's status reaches Completed — not simply when the bill is paid, since payment and status are tracked separately. The on/off switch is in Brand Settings → Tables (/brand-settings, Super Admin only). With it off, a completed order leaves the table marked occupied until someone frees it by hand from the Tables screen.

Cancelling a dine-in order always frees its table, no matter this setting — the switch only affects what happens when an order is completed.

A delivery order can't be completed until it's paid, and can't be picked up until a rider is assigned — you'll see the message "Assign a delivery boy first". Dine-in and takeaway orders can be completed even if payment is still outstanding.

You cannot mark a whole order Served while any item that was sent to the kitchen is still being cooked. Serve items as they become ready, and the order updates itself.


If a customer wants to cancel or be refunded

There are two different situations here, and they work differently.

Cancelling an order

Open the order and cancel it, picking a reason from the list. The reasons are set centrally, so the same wording is used everywhere and can be reported on later. The order itself keeps a record of who cancelled it and when, so it's always clear afterward.

Cancel Order dialog with a Reason dropdown, a Refund section showing Cash/UPI/Credit Card/Netbanking/Other tabs and a refund amount, a Credit Balance field, Total refunded, and Additional Notes.
Cancelling a paid order — pick a reason, then decide how the money goes back.
Reason dropdown open, showing a searchable list: Customer changed their mind, Wrong order placed, Item not available, Long wait time, Duplicate order, scrollable for more.
The reason list is searchable — useful once an outlet has all twelve set up.

The list of reasons is edited on its own screen — Cancel Reasons, under System. Each reason has a name, can be turned on or off, and can be dragged into a new order. Put the reasons staff pick most often near the top — staff are choosing under pressure, and the order you set affects how useful your cancellation data ends up being. Turn a reason off instead of deleting it, so past orders keep the wording they were cancelled with. The list comes with twelve reasons already set up: Customer changed their mind, Wrong order placed, Item not available, Long wait time, Duplicate order, Customer left, Payment issue, Other, Customer requested to cancel, Customer no longer wants the order, System error/Technical issue, Restaurant closing early.

Like every other brand-only screen, if someone at outlet level tries to open this page directly by typing its address, they won't see an error — they'll just be sent back to the dashboard instead. See Menu management for the same behavior on Item Types.

Refund requests from customers

Go to Refund Requests (yourdomain.com/storefront/refunds).

Refund Requests screen with Total, Pending, Approved, Refunded, Pending amount and Refunded amount stat boxes, search and filter controls, and an empty queue reading No refund requests here.
The queue — empty on this outlet right now, but the stat boxes and filters are always there.

Approving a refund and actually paying it are two separate steps — you can agree to a refund before the money moves. You can also decline a request.

A refund can go back as money, or as credit the customer can spend with you next time. The amount paid out can never be more than the amount approved. This wasn't always true — a past incident let an approved ₹30 refund pay out ₹80 — but that gap is now closed with a hard limit.


Waiters and delivery riders

Go to My Orders (yourdomain.com/my-orders).

The screen has five tabs, each with its own live count: New, Ready, Accepted, Served, Rejected. A busy waiter can jump straight to the tab that matters, instead of scanning one long list.

My Orders screen, New tab, showing one order card for Table T01 with Ordered, Assigned and Awaiting timestamps, and Accept and Reject buttons.
A new assignment, waiting for the waiter to accept or decline it.
  • Orders assigned to you appear here — accept or decline them
  • Declining asks for a reason from a list — a different list from order cancellation, since declining sends the order back to be reassigned to another waiter rather than ending it. The list currently has six reasons: Busy with another table, Section not assigned to me, End of my shift, On a break, Reassigned by manager, Other. It's edited on its own screen, Waiter Reject Reasons, the same way Cancel Reasons is above.
  • You are alerted when an order you accepted becomes ready
  • Serve items one at a time as they come out
  • Take payment, and free the table when the guests leave
My Orders screen, Accepted tab, showing the same order now with an Accepted timestamp and a With the Kitchen section listing Paneer Tikka and Butter Chicken, both Not Started.
Once accepted, the card shows exactly what the kitchen still has to cook.

Go to My Deliveries (yourdomain.com/my-deliveries).

My Deliveries screen, New tab, showing two pending deliveries awaiting the rider's response, each with an Accept and Reject button.
Two deliveries waiting for a response — accept or decline each one.
  • Deliveries assigned to you appear here — accept or decline
  • Declining asks for a reason
  • Move the order through Picked Up, Out for Delivery, Reached, Delivered
  • There is a mute control if you do not want the alert sound
My Deliveries screen with one delivery accepted and now under an In Progress heading, showing an Accepted timestamp and a Waiting for kitchen status.
Accepted — this one is still waiting on the kitchen before it can move to Picked Up.

The kitchen

Screen URL
Kitchen display yourdomain.com/kitchen/display
Waiter board yourdomain.com/kitchen/display-board
Customer board yourdomain.com/kitchen/customer-board
Kitchen stations yourdomain.com/kitchen/stations
Transfer between kitchens yourdomain.com/kitchen/transfer

Stations — where each dish goes

A station is a named section of the kitchen — Tandoor, Grill, Fryer, Bar, Dessert, and Main Kitchen, six in total. Each menu item is tagged with the station that cooks it. So once an order is placed, its items automatically split onto the right station's queue, instead of arriving as one mixed-up ticket. Set stations up once, before service starts, under Kitchen → Stations. After that, they only need to change when your kitchen's physical layout changes — a new station added, or one merged into another.

Each station also has its own colour, shown next to its name on the Stations screen. This isn't just decoration — it's how staff tell stations apart at a glance on a busy kitchen display. Pick colours that are easy to tell apart.

The queue — bump, recall, reassign

The main kitchen display, the waiter board, and the customer board all show the same live queue — just filtered or styled differently for each audience. As items cook, staff bump an item when it's done, which clears it from the screen. Recall undoes a bump made by mistake. An item can be reassigned to a different station — one at a time, or several at once — if it was sent to the wrong one.

Kitchen Display Pending tab with tickets grouped by station — Main Kitchen and Tandoor — each with a Start Cooking button.
Pending tickets, grouped by station — Main Kitchen and Tandoor here.
Kitchen Display Ready tab showing a ticket with a Back to Cooking button, for undoing a bump made by mistake.
Ready — a mistaken bump gets undone with Back to Cooking, right on the ticket.

Waiters can see station names on the menu and billing screens, but they don't have access to the full station list. Because of this, they sometimes see the plain internal name, like "tandoor," instead of the nicer label, like "Tandoor." This is just a display quirk, not a security issue — see Billing for another place this shows up.

Transfer between kitchens

/kitchen/transfer is its own screen for the same bulk-move action the kitchen display offers inline. Pick a station, tick the tickets you want to move, and move them all to a different station at once.

This screen only works if Allow Kitchen Transfer is switched on, under Brand Settings → Kitchen (see Settings reference). With it switched off, items stay at whichever station they were first sent to, and this screen has nothing to do.

How it is secured

On-screen permissions. Almost every action on an order has its own on/off switch on the Roles & Permissions screen — viewing the order list, creating an order, updating it, cancelling it, confirming it, assigning a waiter or rider, accepting or declining an assignment, serving items, and handling a refund request. You can build a role that allows exactly the actions it needs — for example, a role that can create orders but never cancel one.

Role access. Out of the box the system ships four starting roles:

  • Super Admin — the brand owner. Sees everything across every outlet, including day-to-day order actions.

  • Outlet Owner — gets nearly every ability at their own branch automatically. The one deliberate exception: they don't see My Orders, because an outlet owner is never meant to be assigned orders themselves.

  • Waiter — can create and update orders, sees only My Orders (their own assigned work, not the general list), can accept or decline what's assigned to them, and can serve. A waiter cannot see the general Orders list and cannot cancel an order — those stay with management.

    A waiter can open the Orders list without getting an error message — but what they see is automatically narrowed down to just their own assigned orders. They can't see the rest of the outlet's orders this way, any more than they can through the normal screen.

  • Delivery Rider — sees only My Deliveries, can accept or decline, and can move a delivery through its stages, but cannot assign a rider (to themselves or anyone else) — that has to come from a manager.

Confirmed, low impact. The waiter's queue screen, My Orders, isn't in a rider's sidebar menu — but it isn't actually blocked either. A rider who types /my-orders into the address bar directly isn't sent back to the dashboard the way they would be for /orders or /billing. The screen loads fully, with all the waiter tabs, because riders and waiters share the same underlying permission for viewing assigned orders. No real data is exposed — the screen just shows zero orders, the same way it's narrowed down for waiters. The only downside is a rider can land on a screen built for serving tables, including a Served tab that means nothing for delivery work.

Editing the Cancel Reasons and Waiter Reject Reasons lists is a brand-level action, held by Super Admin by default — the wording is set once so it stays consistent across every branch. Just seeing either list, to pick a reason while cancelling or declining, is open more widely, to anyone who can already see orders.

A few other roles — Head Chef, Cashier, dedicated Kitchen Staff, and similar — were once planned as ready-made templates, but they aren't included out of the box today. A restaurant that wants a kitchen-only login right now can build one from scratch on the Roles & Permissions screen, picking just the kitchen-display abilities it needs.

Approving a refund and paying it out use the same single permission. Whoever can see the Refund Requests queue can both approve it and pay it — there's no separate "can approve" versus "can pay" setting. This is a deliberate design choice, but worth knowing if you want two different people involved in a refund. That would have to be a rule you enforce yourselves, not something the system requires.

Tenancy. Every order belongs to one outlet, and staff only ever see orders from their own branch — a login for one outlet can't browse another outlet's orders. The individual items on an order, and its tax lines, are kept private only because they're always looked up through the order they belong to, not because they're separately locked to a branch. As long as every screen looks things up through the order first — which is true everywhere we checked — this keeps different outlets' data apart, though it's a slightly less direct safeguard than a separate check would be. Refund requests are different: each one is directly tagged with its outlet, so a request from another outlet is genuinely invisible, not just hidden on screen. Cancel-reason and decline-reason lists are shared across the whole brand rather than per outlet, which matches how they're managed — set once for the whole brand so the wording stays consistent everywhere.

Validation. Creating a dine-in order requires the number of guests to be filled in. Creating a delivery or dine-in order requires a rider or waiter to be chosen, and the system checks that the person chosen really does hold that role at that outlet — not just any account.

Audit trail. Every change to an order — created, updated, cancelled — is written to a central activity log, along with who made the change, when, and what changed. This means a total that looks wrong can be traced back later. Cancelling an order also stamps who cancelled it and when, directly on the order. Refund-request decisions keep their own record of who decided and when, but that record isn't part of the same central activity log — you'd need to check the Refund Requests screen directly rather than search the general activity log.

A delivery rider's live location updates are accepted simply because they come from the rider assigned to that delivery — not because of any general staff permission, the way every other order change works. This isn't necessarily a problem, since only the assigned rider can send their own location, but it's a different kind of check from everything else on this page, and worth knowing about.