iAttendance · Restaurant Manager
How to set up a restaurant
The complete path to putting a restaurant on iAttendance: build the menu, create the restaurant, print a QR code for every table, open the counter, kitchen and payment screens, then run a real order from the moment a guest scans to the moment their receipt lands. Every step is illustrated with a screenshot taken from the live product.
✅ Before you start
- An iAttendance company (admin) account — every restaurant screen is opened from it.
- One computer at the counter. Two monitors is ideal: the main one for staff, a second one turned towards the guest to show the bill.
- One screen or tablet in the kitchen. You can skip this if the kitchen is right behind the counter.
- Dish photos as .png or .jpg, max 250 KB each. Note that .jpeg is not accepted.
- An ordinary printer to print the QR code for each table.
🧭 The setup steps
Work through steps 1 to 16 in order. The first six build the menu, steps 7 to 12 create the restaurant and its screens, and from step 13 onward you are running a real service.
🔑 Sign in and open the Restaurant Manager menu
Left navigation › Restaurant Manager
Sign in to the company portal at iattendance.co. You can switch the interface language right on the sign-in card using the "Language/Ngôn Ngữ" selector, then fill "Email" and "Password" and press "Admin".
In the left navigation open the "Restaurant Manager" group. It contains exactly 8 entries, in this order: Counter, Kitchen, All Orders, Restaurants, Tables, Menus, Payment Config and Payment Page.
The whole restaurant module lives in the company portal. The staff portal has no restaurant menu at all.
- The most efficient order is: Menu → Food groups → Dishes → Restaurant → Tables & QR. You link a menu to the restaurant while creating the restaurant, so build the menu first.
📋 Create the menu and pick its currency
Restaurant Manager › Menus
Open "Menus". In the bar at the top press "Manage menus" to open the "Create Menu" dialog.
Fill in "Name Menu", add a "Note" if you want, then choose the currency in the selector below. Press "Create Menu". The new menu appears immediately in the dialog's own grid with status "Active".
Close the dialog with the ✕. The "Select Menu" selector on the page reloads and your new menu becomes selectable.
| Field | Required? | Notes |
|---|---|---|
Name Menu | Required | Leaving it blank shows "Please input name menu". |
Note | Optional | Internal note, never shown to guests. |
Currency | Required | An unlabelled selector directly under the two fields. |
- Currency is chosen at MENU level, not on the restaurant. A dish has no currency field of its own — it inherits the menu currency. Selling in two currencies therefore means two menus and two restaurants.
🗂️ Create the food groups
Menus › left rail "Food Groups"
Pick your menu in "Select Menu" — nothing else on the page works until a menu is selected.
The left rail then lists the groups as vertical tabs. The first tab is always "All". Press "+ Add group" pinned at the bottom of the rail to open the "Food Group" dialog.
Type "Name Food Group", add a "Note" if useful, then press "Create Food Group". Repeat for each group, for example Starters, Main dishes, Drinks.
| Field | Required? | Notes |
|---|---|---|
Name Food Group | Required | Blank shows "Please input name food group". |
Note | Optional | A different field from the menu's own "Note". |
- Plan your groups before entering dishes — you CANNOT add a dish while the "All" tab is selected.
🍜 Add the dishes, with photo and price
Menus › select a group › Add Food
Click the group tab you want to fill (any tab except "All"). A green "Add Food" button slides into view inside that tab. Press it to open the "Food" dialog.
"Name" and "Description" are rich-text editors, so you must click inside the editing area before typing. Enter "Price" as a plain number, with no currency symbol.
Press "Upload Photo" and pick the dish image, then press "Create Food". The dialog stays open so you can keep adding dishes to the same group.
| Field | Required? | Notes |
|---|---|---|
Name | Required | Rich-text editor, 110 px tall. |
Description | Optional | Rich-text editor, 150 px tall. |
Price | Required | Plain number, expressed in the menu currency. |
Upload Photo | Recommended | .png or .jpg, max 250 KB, one image per dish. |
- An image over 250 KB is rejected with "File is too big". The .jpeg extension is NOT accepted — rename to .jpg or re-export the image.
👀 Review the menu you just built
Menus › the "All" tab
Click the "All" tab to see every dish of the menu in one grid. The columns are: Actions, Image, Name, Description, Price, Status, Change status, Add Option and Preview Food.
The "Change status" button flips a dish between "Active" and "InActive". It saves instantly, with no confirmation dialog.
An "InActive" dish is still visible on the guest's phone, but its add button turns grey and cannot be pressed. This is the fastest way to mark something sold out for the day.
- "Preview Food" shows exactly what the guest will see on their phone — very handy for checking a photo and description before you open for service.
⚙️ Add options to a dish (optional)
Menus › dish grid › Add Option
On the dish row press "Add Option" to open the "Create Option" dialog.
Type a group name (for example "Size"), choose "Select Type" as "Single" or "Multi", then press "Add Group Option". Inside the group type the item name (for example "Large"), set its surcharge in "Price" and press "Add Option Item".
Finally press "Save". On the guest's phone the selected option surcharges are added to the base price and multiplied by the quantity — the confirm button relabels live to "Add : <total>".
| Field | Required? | Notes |
|---|---|---|
Name of Group Option | Required | For example Size, Toppings, Sugar level. |
Select Type | Defaults to "Single" | Only limits how many items a guest may pick. |
Price | Defaults to 0 | A non-negative surcharge. A free option is simply 0. |
- There is NO concept of a required option group. "Single" and "Multi" only control how many items a guest may pick — never whether they must pick one.
- Pressing "Save" is a destructive replace: the system clears the dish's existing option groups and re-saves exactly what is in the dialog. Do not open it, accidentally delete a group, and save.
- Limits: at most 10 option groups per dish and 10 items per group — so up to 100 option items on one dish.
🏪 Create the restaurant, set tax and service fee, link the menu
Restaurant Manager › Restaurants
Open "Restaurants" and press the ➕ button at the top right of the grid to open the "Add Restaurant" dialog.
Fill in the restaurant details, set "Tax (%)" and "Service Fee(%)" to your local rates, then pick the menu you built in "Select Menu". Press "Add New Restaurant".
If you fill "Access code", guests will have to type it after scanning the QR before they can order.
| Field | Required? | Notes |
|---|---|---|
Email | Required | Contact address for the restaurant. |
Name | Required | Shown on the guest's phone and on the receipt. |
Phone / Address | Optional | Printed on the receipt. |
Tax (%) | Defaults to 0 | Non-negative, with no upper bound. |
Service Fee(%) | Defaults to 0 | Non-negative, with no upper bound. |
Select Menu | Required to trade | Without a menu, a guest scanning the QR sees no dishes. |
Access code | Optional | No length limit and no format rule. |
- A menu belongs to exactly one restaurant. A chain has to duplicate its menu per branch — there is no shared master menu.
- A restaurant-level access code short-circuits the check: once it is set, the per-table codes are never evaluated at all.
- Tax and service fee are frozen onto an order only when it becomes Completed or Cancelled. That is why changing your rates later never rewrites old receipts.
🪑 Create one row per table and print its QR code
Restaurant Manager › Tables
Open "Tables", pick your restaurant in "Select Restaurant", then press ➕ to add a table. Type the table "Name" (for example Table 1), add a "Note" if useful and press "Add New Table".
Create one row for every physical table in the room. Each row gets its own QR code.
Press "Show QR" on the table row to see the code at full size, then print it and stick it on that table.
| Field | Required? | Notes |
|---|---|---|
Name | Required | The table name your staff will see, e.g. Table 1. |
Access code | Optional | Only has any effect if the restaurant has NO access code. |
Note | Optional | For example: 4 seats, by the window. |
- The QR dialog is view-only — there is no download button and no print button. Print the browser page or capture the image.
- The "Change status" button flips a table between "Enable" and "Disable" and saves instantly, with no confirmation. Scanning the QR of a disabled table does not open the ordering page.
🔳 Show and print the table QR code
Tables › Show QR
The QR code simply encodes an ordinary web link. A guest opens the ordering page straight from their phone camera — no app to install.
Print the code large and sharp, and laminate or frame it so it survives daily use.
You can reopen this dialog at any time to reprint a code that has been lost or damaged.
- Because the QR is just a link, staff can bookmark each table's link on their own phone to help a guest whose camera will not scan.
💳 Configure the customer-facing payment screen
Restaurant Manager › Payment Config
Open "Payment Config" and press ➕ to open the "Add Payment Config" dialog.
Pick the restaurant, type the "Welcome Message" the guest will read on the second screen, and a "Note Message" if you want.
For each bank or e-wallet you accept, fill "Payment Name 1/2/3" and upload its transfer QR image. Press "Add New Payment Config".
| Field | Required? | Notes |
|---|---|---|
Select Restaurant | Required | Each restaurant has exactly one payment config. |
Welcome Message | Recommended | Shown next to the restaurant name on the guest screen. |
Payment Name 1–3 | Optional | Required if you upload the matching QR. |
Upload Payment QR 1–3 | Optional | .png or .jpg, max 250 KB each. |
- Only one payment config per restaurant. A second attempt is blocked with "'<restaurant>' already existed" — edit the existing row instead.
- If you upload a QR but leave its name blank, the save is blocked with "Please input payment Name 1".
- The delete confirmation for a payment config wrongly reuses the restaurant wording ("Delete Restaurant"). It really does only delete the payment config.
🖥️ Open the customer-facing display on the second screen
Restaurant Manager › Payment Page
On the second monitor (the one facing the guest) open a browser, sign in and go to "Payment Page". Pick the restaurant, choose the language, then press the button, which carries the same name.
The browser switches to a standalone display page with no left menu. Put it in full screen with F11 and leave it there for the whole shift.
Normally it shows the restaurant name with your welcome message, the note line and your payment QR codes. When an order moves to "Payment", the itemised bill appears automatically for the guest to check.
- You can open as many payment, counter and kitchen screens as you like for one restaurant. They all receive the same real-time updates.
- The display is designed to stay open all shift: it sends a keep-alive every 4 minutes so it never quietly drops off the live feed.
- The bill is shown ONLY while the order sits in "Payment". The moment staff move it to "Completed", the screen clears back to the welcome text. So let the guest check the figures BEFORE you complete the order.
👨🍳 Open the Counter and Kitchen boards
Restaurant Manager › Counter · Kitchen
On the counter PC's main monitor open "Counter" and select your restaurant. On the kitchen screen open "Kitchen" and select the same restaurant.
Both show a "List Orders" grid. New orders appear by themselves — no need to press reload.
The Counter board adds four columns the Kitchen board does not have: "Discount %", "Discount Amount", "Additional Fee" and "Notes".
- The Kitchen board deliberately cannot finish or cancel an order. Its status selector offers only three values: New, Processing and In Servicing. Only the Counter can move an order to Payment, Cancelled or Completed.
- Real-time delivery depends on the platform message queue. If an order does not appear by itself, use the "Refresh" button.
📱 What the guest does: scan and order
The guest's phone
The guest scans the QR on the table. The first screen is an "Information" dialog where they choose the language, pick "Dine-in" or "Take Away", type their name and an email address for the receipt. If the restaurant or the table has an access code, they enter it here.
After confirming, they see the menu as cards with photo, description and price. Pressing "Add" on a dish opens a detail panel for quantity and any options.
The number of chosen items shows in the bar at the bottom. The guest opens the cart, reviews it and places the order — which appears at the Counter and in the Kitchen straight away.
- Several guests at the same table can scan the same QR and order together. Their items are merged into one order for that table, and the order moves to "User Updated" so staff can see something was added.
- The email field is optional. If nobody enters one, the order still completes normally — no receipt is simply sent.
- Guests CANNOT cancel items they have already placed. Before pressing the order button they can remove their own lines; afterwards only counter staff can amend or cancel.
🛒 The menu and cart on the guest's phone
The guest's phone
The menu is a grid of cards, each with the dish photo, name, short description and price.
As the guest picks a quantity and options, the confirm button relabels live so the exact amount being added to the cart is always visible.
The bottom bar always shows how many items are selected; tapping it opens the cart to place the order.
- In the cart the guest sees only four money rows: Subtotal, Service Fee, Tax and Grand Total. Discounts and additional fees are staff tools and never appear on the guest side.
🔄 Run the service: move the order through its statuses
Counter · Kitchen
A new order arrives as "New". The kitchen sets it to "Processing" when cooking starts, then "In Servicing" once the dishes go out.
When the guest pays, counter staff enter any discount or additional fee, press "Save", then move the order to "Payment". The bill now appears on the second screen for the guest to check.
Once the money is in, move the order to "Completed". The row disappears from the counter grid and the system emails the receipt.
- You cannot type into the grand total. To change what the guest pays, adjust "Discount %", "Discount Amount" or "Additional Fee" and press "Save" — the total is recalculated on every save.
- The cancel status is shown as "Cancelled". Cancelling also removes the row from the counter grid.
📊 Email receipts and revenue reports
Restaurant Manager › All Orders
When an order becomes "Completed", the system emails the receipt to every address entered on that order. Each address gets exactly one email even if that guest ordered several rounds, and each receipt is rendered in the language that guest chose when they scanned.
Open "All Orders" to look orders up by date range, table or status, and press "Export to Excel" to download the data.
The monthly revenue chart lives on the "Dashboard" page of the company portal.
- Any All Orders query is capped at a 65-day range.
- Revenue counts only "Completed" orders, buckets them by the order's creation date (not its completion date), and separates them per restaurant and per currency.
- The statistics are compiled as a scheduled batch, so today's orders may not show on the chart immediately.
🔄 Order status reference
| Status | What it means | Who can set it |
|---|---|---|
| New | The guest has just ordered. The order shows at both the counter and the kitchen. | Guest |
| Processing | The kitchen has taken it and started cooking. | Kitchen or Counter |
| User Updated | The guest added more items to an open order. The row is highlighted. | Guest |
| In Servicing | The dishes are ready and have gone out to the table. | Kitchen or Counter |
| Payment | The bill is on the customer-facing screen for the guest to check. | Counter only |
| Cancelled | The order is cancelled. The row leaves the counter grid. | Counter only |
| Completed | Paid in full. The receipt is emailed and the guest screen returns to the welcome text. | Counter only |
The usual flow is New → Processing → In Servicing → Payment → Completed. The Kitchen board can only set the first three.
🧮 The grand total formula
- Items total = the sum of (dish price + option surcharges) × quantity across every line of the order
- Percentage discount = Discount % × (Items total + Additional Fee) ÷ 100
- Subtotal = (Items total + Additional Fee) − (Discount Amount + Percentage discount)
- Service Fee = Service Fee(%) × Subtotal ÷ 100
- Tax = Tax (%) × Subtotal ÷ 100
- Grand Total = Subtotal + Service Fee + Tax (floored at 0)
Worked example
2 dishes × 50,000 = 100,000 items total · Additional Fee 10,000 · Discount 10% · Tax 10% · Service Fee 5%
Percentage discount = 10 × 110,000 ÷ 100 = 11,000 → Subtotal = 110,000 − 11,000 = 99,000 → Service Fee = 4,950 · Tax = 9,900 → Grand Total = 113,850
📏 Limits worth knowing
| Item | Limit | Notes |
|---|---|---|
| Size of each image | 250 KB | Applies to dish photos, the restaurant photo and all three payment QRs. |
| Image formats | .png and .jpg | .jpeg is not accepted. |
| Items per order | 200 | Counts both total quantity and the number of cart lines. |
| Option groups per dish | 10 | For example Size, Toppings, Ice level. |
| Items per option group | 10 | So up to 100 option items on one dish. |
| Order lookup range | 65 days | The cap on any single "All Orders" query. |
Restaurants, tables (QRs), menus, food groups and order-history retention depend on your plan — see the pricing page.
❓ Frequently asked questions
1 Can I set an access code for the table QR?
Yes, at two levels. Restaurant level: the "Access code" field in the add/edit restaurant dialog, shared by every table. Table level: the "Access code" field in the add/edit table dialog.
The part most people get wrong: the restaurant-level code does not merely "win a tie" — it SHORT-CIRCUITS the whole check. Once the restaurant field has a value, only that code is ever evaluated and the per-table codes are never read at all. A table code only matters while the restaurant field is empty.
On a wrong code the guest sees the information dialog reopen with "Restaurant access code is incorrect" or "Table access code is incorrect" — not an error page.
Access codes have no length limit, no format rule and no uniqueness check. You can reuse one code across restaurants, or rotate it daily without reprinting anything — the QR code and the access code are entirely independent.
Practical guidance: use a restaurant-level code if you just want to stop passers-by from ordering; use table-level codes if you want per-table control, and remember to leave the restaurant field empty in that case.
2 Can I close/open individual tables?
Yes. In "Tables" the "Change status" button on the table row flips it between "Enable" and "Disable".
You can also right-click the row and choose "Change Status" to open a dialog of the same name, pick the value and press "Save" (or "Close" to discard).
Warning: the in-grid "Change status" button saves IMMEDIATELY, with no confirmation and no undo. One misplaced click and that table stops accepting orders straight away.
When a table is set to "Disable", scanning its QR redirects the guest to the sign-in page rather than showing an error message. This is a common source of confusion — if a guest says "scanning does nothing", check the table status first.
Re-enabling the table makes the exact same QR work again; there is no need to print a new one.
3 Can I take a dish off sale temporarily?
Yes. In the dish grid on "Menus", the "Change status" button flips a dish between "Active" and "InActive". As with tables, this saves instantly with no confirmation dialog.
Guests still SEE a disabled dish on their phone but cannot order it: the add button loses its cart icon, turns grey and stops responding to taps.
The system shows no error message and adds no "sold out" badge. If you want guests to understand why, add a line to the dish "Description", for example "Sold out today".
This is the fastest way to handle running out mid-service — much quicker than deleting the dish and recreating it later, and it preserves the photo and any options you configured.
4 Can one account create several restaurants?
Yes. There is a per-company cap on the number of restaurants. Once you hit it, the add button is blocked with "Your company reached max restaurants allowed".
The free plan allows up to 2 restaurants and 50 tables in total across all of them. If you need more, upgrade — see the pricing page for the limits on each plan.
One thing to plan around when scaling: the table (QR) quota is counted COMPANY-WIDE, added up across all your restaurants, not per restaurant. Budget for the combined table count of the whole chain when choosing a plan.
Each restaurant needs its own menu, because a menu can be linked to only one restaurant.
5 How do guests receive receipts by email?
The guest types their own address into "Email (to receive receipt)" on the information screen, right after scanning the QR.
The receipt is sent at exactly one moment: when staff move the order to "Completed". There is no "resend" button and nothing is sent at any other status.
The system collects every email address on that order and de-duplicates them, so each address receives exactly ONE email even if that person ordered three or four separate rounds within the same order.
Each receipt is rendered in the language that particular recipient chose when they scanned. A single order can quite happily send a Vietnamese receipt to one guest and an English one to another.
The email field is OPTIONAL. If nobody at the table enters an address, the order still completes normally, no error is shown, and simply no email goes out.
The receipt contains: the restaurant name, address, email and phone; the table number; the order ID; the timestamp; the total item count; the items total; percentage and fixed discounts; the additional fee; the subtotal; the service fee and tax with their percentages; the grand total; and any note. The subject line is "Restaurant Receipt".
The email is generated automatically and states that it should not be replied to. Delivery depends on the mail queue, so avoid promising a guest that it arrives instantly.
6 Can several guests at one table order at the same time?
Yes, and this is how the system is designed to be used. Several guests scanning the same QR all add to a SINGLE order for that table, and items ordered earlier are preserved.
When someone adds to an already-open order, the order moves to "User Updated" and its row is highlighted on both the counter and the kitchen board, so staff immediately notice that something new came in.
Before pressing the order button, each guest can remove the lines they just picked — the system asks for confirmation through a "Remove Food Item" dialog.
After placing, guests can no longer remove anything: the red delete button disappears from their view. Only staff on the Counter board can amend or cancel.
Each guest enters their own email address, so everyone at the table can get a receipt if they want one.
7 Can I add options to a dish?
Yes. On the dish row in the dish grid, press "Add Option" to open the "Create Option" dialog.
The structure has two levels: first create an option GROUP (for example "Size", "Toppings", "Sugar level") with the "Add Group Option" button, then add individual ITEMS to that group (for example "Large", "Regular") with the "Add Option Item" button. Finish with "Save".
Each item has its own "Price" field, which acts as a surcharge. It is non-negative and defaults to 0 — a free option is simply left at 0.
Each group has a "Select Type" field with two values, "Single" or "Multi". These ONLY control how many items a guest may pick from that group.
There is NO concept of a mandatory option group. Nothing forces a guest to choose before adding to the cart. If a choice is genuinely required by your business rules, split it into two separate dishes rather than relying on the system to enforce it.
Important warning: pressing "Save" is a DESTRUCTIVE REPLACE. The system clears the dish's existing option groups and re-saves exactly what is in the dialog. Do not open it, accidentally delete a group and then save — what was removed cannot be recovered.
Limits: at most 10 groups per dish, and at most 10 items per group, so up to 100 option items on one dish.
On the guest's phone, the selected surcharges are added to the base price and multiplied by the quantity, and the confirm button relabels live so the guest always sees the exact amount about to be added.
8 How do I see revenue reports?
There are two routes. For detailed data, open "All Orders", set the filters, press "Query" and then "Export to Excel". For an overview chart, open the "Dashboard" page of the company portal and pick the restaurant.
The "All Orders" filters are: "Select Restaurant", "Select Table" (which includes an "All" entry), "Select Status", "From Date" and "To Date". Leaving the restaurant field empty is valid and queries across every restaurant.
Date rules are checked in this order and stop at the first failure: a missing start date gives "Please select from date"; a missing end date gives "Please select to date"; a start date after the end date gives "From Date cannot after To Date"; and a range over 65 days gives "Range is not more than 65 days". Exactly 65 days is still accepted.
That means a single query can never span more than 65 days. For a full-year report you have to export in several passes and combine them.
If there is no data, the export button still works but the system shows "No data" instead of downloading an empty file. Exported filenames start with "ListOrders_" followed by the company name.
The page also has an "AI Summary" button that produces an automatic summary of the data you just filtered.
About the revenue chart: it counts only orders in status "Completed", summing the grand total stored on each order; it buckets by the order's CREATION date rather than its completion date; and it separates figures per restaurant and per currency — so a company trading in several currencies sees several series rather than one merged number.
It is a scheduled batch statistic rather than a live query, so today's orders may not appear on the chart immediately. For up-to-the-minute numbers, use "All Orders".
9 Can I run restaurants in several countries?
Yes, but three details are worth understanding before you roll out, because they differ from what most people expect.
Currency: a restaurant has NO currency field. Currency lives on the menu and is chosen in the "Create Menu" dialog. Since a menu links to only one restaurant, branches trading in different currencies must have separate menus.
Language: the GUEST picks the language on the information screen after scanning. There is no per-restaurant language setting, so you cannot make a Japanese branch always display Japanese — but Japanese guests can select it themselves, and their receipt arrives in Japanese too.
Time zone: the whole company shares ONE time zone. A restaurant has no time-zone field of its own. A branch in another zone will see order creation and update times rendered in the head-office zone — worth remembering when reconciling end-of-shift reports across countries.
A restaurant also has no country field, so put the country or city into the "Name" or "Address" field to tell branches apart in the list.
10 How many accounts do I need?
In practice ONE company (admin) account runs the entire workflow.
The Counter, Kitchen and Payment Page screens are all opened from that account. In real use you sign in with the same account on several machines: the counter PC, the kitchen screen and the customer-facing display.
There are currently no scoped staff logins for the restaurant module — all eight restaurant screens live in the company portal, and the staff portal has no restaurant menu at all.
Operationally that means you should leave the kitchen machine and the customer display parked on just the page they need, since the signed-in account still has access to the rest of the system.
11 The QR scans but no dishes appear — what should I check?
Work through these six checks. The useful part is that each cause has a different symptom, so you can tell them apart.
1. Has a menu been linked to the restaurant? Open "Restaurants" and look at the "Menu" column — empty means unlinked.
2. Has the menu or the restaurant behind that QR been deleted? In this case the guest is redirected to the sign-in page.
3. Is the table set to "Disable"? This also redirects to the sign-in page rather than showing an error — easy to mistake for a network problem.
4. If an access code is set, was it typed correctly? A wrong code reopens the information dialog with a mismatch message, which looks quite different from the two cases above.
5. A restaurant with no usable menu shows the message "This table is not ready for order now" rather than a blank page.
6. If the company record is gone, the page shows "No events are assigned to this QR".
Quick way to tell them apart: bounced to the sign-in page means a disabled table or deleted data; a code mismatch message means an access-code problem; "This table is not ready for order now" means a missing menu.
12 How does the secondary counter screen work?
Open "Payment Page" in the Restaurant Manager group, pick the restaurant and the language, then press the button of the same name. The browser switches to a standalone display page with no left menu. Go full screen with F11 and turn the monitor towards the guest.
Normally the screen shows the restaurant name with the "Welcome Message" you configured, the "Note Message" underneath, and up to three transfer QR codes. Any slot without an uploaded image is simply skipped.
When an order moves to "Payment", the itemised bill appears automatically with these rows: Total Items, Amount, Discount (%), Discount (Amount), Additional Fee, Subtotal, Service Fee with its actual percentage, Tax with its actual percentage, and a Grand Total styled larger. The Order ID and Time appear above.
The single most important point: the bill only shows while the order is in "Payment". Every other status — including "Completed" — clears it and returns the screen to the welcome text. So let the guest check the figures BEFORE you complete the order.
The display is built to stay open for the whole shift: it sends a keep-alive every 4 minutes, without which the session would expire after 15 minutes and the screen would quietly stop receiving updates.
If you need to adjust a discount or fee while the bill is on the guest screen, just change it on the counter and press "Save" — the display refreshes to match.
13 Can an order be cancelled?
Not by the guest. There is no cancel button anywhere on the guest side.
Staff on the "Counter" board right-click the order row and choose "Cancelled", or pick that value in the row's status selector.
A note on wording: this status always displays as "Cancelled" to users. Avoid saying "rejected" to guests or in internal documentation, so your language matches the interface.
After cancelling, the row disappears from the counter grid and the tax and service-fee rates are frozen onto that order.
On their phone the guest sees a cancellation message and can no longer add to the old order; a "New Order" button appears in their cart so they can start again. Re-scanning the QR also starts a fresh order.
The Kitchen board CANNOT cancel an order — that is deliberate, and the ability sits only with the counter.
14 Can I open several screens for one restaurant?
Yes, with no limit. You can run several Counter screens, several Kitchen screens and several Payment Page displays for the same restaurant at once.
They are all registered against the restaurant, and they all receive the same update stream, so a new order appears simultaneously on every open screen.
A practical example: a two-floor venue can put a kitchen screen on each floor, and a busy venue can run two counter machines to take payments in parallel.
Updates travel through the platform message queue, so this keeps working when the application runs as multiple processes. If the queue has a problem, orders will not appear by themselves — use the "Refresh" button on the board in that case.
Each screen sends a keep-alive every 4 minutes, so a display left untouched still keeps receiving updates.
15 Can I edit an order's grand total directly?
No. The grand total is always calculated and cannot be typed into.
To change what the guest pays, adjust one of the three fields on the "Counter" board — "Discount %", "Discount Amount" or "Additional Fee" — and press "Save".
The total is recalculated after EVERY save, and the new value is written to the order at that moment.
You can still adjust after the order has reached "Payment" and the bill is already on the guest screen; the display refreshes to match. Just finish adjusting before you move it to "Completed".
None of the three fields accepts a negative value. If a discount is large enough to push the result below zero, the system stores a grand total of 0 rather than a negative number.
The "Notes" field alongside them is the place to record why a discount was given — worth filling in for end-of-shift reconciliation.
16 How do I add tax and a service fee?
When you create or edit a restaurant, fill in "Tax (%)" and "Service Fee(%)". These are restaurant-level settings and apply to every order of that restaurant.
Both default to 0 and reject negative values, but there is NO upper bound — nothing stops you typing 80 when you meant 8. Double-check after entering them.
Both are calculated on the amount AFTER discounts, not on the raw items total. See question 17 for the full formula.
The rates are frozen onto an order only when it becomes "Completed" or "Cancelled". That is why changing your tax rate next month leaves old receipts showing the figures that applied at the time of sale — historical reports are never rewritten.
One consequence to watch: if you change a rate while an order is still open, that order will use the NEW rate when it completes. Change rates when no orders are in service.
On the receipt and the customer display, these two rows show the percentage actually applied, for example "Service Fee (5 %)".
17 What is the grand total formula?
The full calculation has four steps, in this exact order:
Step 1 — Percentage discount = Discount % × (Items total + Additional Fee) ÷ 100
Step 2 — Subtotal = (Items total + Additional Fee) − (Discount Amount + Percentage discount)
Step 3 — Service Fee = Service Fee(%) × Subtotal ÷ 100, and Tax = Tax (%) × Subtotal ÷ 100
Step 4 — Grand Total = Subtotal + Service Fee + Tax. If the result would be negative, it becomes 0.
"Items total" here is the sum of (dish price + option surcharges) × quantity across every line of the order.
Three things are easy to get wrong. One: the percentage discount applies to (items + additional fee), not to the items alone. Two: tax and service fee are calculated on the DISCOUNTED subtotal, not on the raw items total. Three: the grand total is never negative.
Example: 2 dishes × 50,000 = 100,000 items total, additional fee 10,000, discount 10%, tax 10%, service fee 5%. Percentage discount = 10 × 110,000 ÷ 100 = 11,000. Subtotal = 110,000 − 11,000 = 99,000. Service fee = 4,950. Tax = 9,900. Grand total = 113,850.
A worked example of the zero floor: one dish at 10,000 with a 50% discount plus a further 10,000 off produces a negative figure, but the system stores a grand total of 0.
The same formula is used in all three places — the counter, the customer display and the email receipt — so those three figures always agree.
18 How should I set this up for a chain?
Standardise at one branch first: build the menu, run a few real services, settle on your table-naming convention and how you handle discounts, and only then roll out.
The most important technical constraint: a menu belongs to exactly one restaurant. There is NO shared chain-wide master menu, so every branch needs its own menu even when the menus are identical.
The consequence: a chain-wide price change means editing every menu. Factor that effort in if you have many branches.
Adopt a naming convention from day one, for example "Sen Vàng - District 1" and "Sen Vàng - District 1 - Main menu", because the menu selector displays entries as "restaurant name - menu name".
Remember that the table (QR) quota is counted company-wide across every branch, while the dish quota is counted per FOOD GROUP.
Revenue reporting is already separated per restaurant and per currency, so you get per-branch figures without any extra configuration.
19 What limits should I know about?
Images: 250 KB per image, and only the .png or .jpg extensions. The .jpeg extension is NOT accepted. This limit applies equally to dish photos, restaurant photos and all three payment QR codes. An oversized file is rejected with "File is too big".
Orders: at most 200 items in one order, counting both the total quantity and the number of cart lines. Going over shows "You reached maximum number of food items".
Options: at most 10 groups per dish and 10 items per group — up to 100 option items on a single dish.
Dishes: the dish quota is counted PER FOOD GROUP, not per menu. So a menu with several groups holds considerably more dishes than the headline number suggests.
Order lookup: any single "All Orders" query is capped at a 65-day range.
Payment config: exactly one per restaurant, with a maximum of three payment QR codes.
Menus: each menu links to exactly one restaurant.
Plan-dependent: the number of restaurants, tables (QR codes, counted company-wide), menus, food groups per menu, and how long order history is kept. The free plan allows 2 restaurants, 50 tables in total across all of them and 6 months of history — see the pricing page for the paid tiers.
20 What if a guest cannot scan the QR?
First, the constraint: every order MUST originate from a table QR. There is no screen anywhere that lets staff create an order on a guest's behalf from scratch.
The quickest workaround: a staff member scans that table's QR on their own phone and places the order for the guest. The order is still recorded against the correct table.
Because the QR encodes an ordinary web link, staff can bookmark each table's link on their phone. Opening the bookmark goes straight to the ordering page for that exact table, with no scanning at all.
If a printed code is smudged, torn or missing, open "Tables" and press "Show QR" on the table row to bring the code back up at any time.
Note that the QR dialog is VIEW-ONLY — there is no download button and no print button. Use your browser's print function, or screenshot the code and print that.
If the guest can scan but sees no dishes, that is a different problem — see question 11.
21 What does it cost?
iAttendance runs entirely in the browser, so there is no dedicated POS hardware to buy. A phone, a tablet, a laptop or an old spare monitor all work perfectly well.
Guests do not install anything either: a phone camera pointed at the QR opens the ordering page.
In practice the hardware cost for a small venue is: one computer at the counter, one secondary monitor facing the guest, one screen in the kitchen if it is far from the counter, and the cost of printing the table QR codes.
On the software side there is a free plan for small venues — 2 restaurants, 50 tables in total across both and 6 months of history — plus monthly paid plans when you need more restaurants, more tables or longer history.
See the pricing page for the details of each plan and its limits.
🔗 Related pages
- iAttendance introduction
- iAttendance FAQs
- iAttendance pricing
- Contact support
- A real-world write-up: article on tinhte.vn