Appearance
In-House Settings
Overview
In-House Settings configure dine-in operations including table management, service modes, and in-store ordering options.
Key Purpose: Configure dine-in and in-store ordering settings.
Purpose
This page lets you configure dine-in ordering operations including table sections, order capacity, tipping, checkout notes, and menu assignment per location.
Key Concepts
- In-House Settings: Configuration stored per location as
in_house_settingon the Location model, controlling dine-in ordering behavior for kiosk and QR ordering channels - Table Sections: Named groups of tables (e.g., "Main Floor," "Terrace") with either automatic or custom naming, used for QR code generation and table identification on KDS
- Order Capacity: Time slot-based limits on orders and items per slot, with support for category-specific limits and time-specific override rules — shared configuration with online ordering
- Tip Collection: Optional gratuity collection with three configurable percentage options (default 10/15/20%) and choice of calculating tips before or after taxes
- Checkout Notes: Optional free-text field allowing customers to add special instructions to items, with a customizable placeholder message (max 150 chars)
Actions
Configure Order Capacity
Set time slot duration, limits per slot (orders and items), enable flexible limits, add category-specific limits, and define time-specific override rules with custom schedules.
Manage Table Sections
Create, edit, or delete table sections with automatic naming (prefix + sequential numbers) or custom naming (manually entered table names, max 20 chars each). Section names must be unique and max 25 characters.
Enable Tip Collection
Toggle collect_tips.enabled, configure three percentage options, and choose whether tips are calculated before or after taxes.
Enable Checkout Notes
Toggle allow_notes.enabled and set a placeholder message for the notes field (default: "E.g. 'For Oliver' or 'I'm allergic to mushrooms'").
Assign Menus
Set a default menu (must be eligible for kiosk/QR visibility) and optionally add extra menus with scheduled availability. Extra menus cannot duplicate the default or overlap schedules.
Location
- Backoffice Route:
/in-house/settings - Backend Controller:
app/Http/Controllers/Api/InHouseController.php - Vue Component:
src/views/in-house/settings/index.vue
Fields
In-House Ordering Enabled
| Property | Value |
|---|---|
| Field ID | enabled |
| Label | Enable In-House Ordering |
| Type | Toggle |
| Default | true |
Description: Master switch for in-house ordering features.
Service Mode
| Property | Value |
|---|---|
| Field ID | service_mode |
| Label | Service Mode |
| Type | Select |
| Options | counter, table, both |
| Default | both |
Description: How orders are handled in-store.
Options:
- Counter: Orders placed and collected at counter
- Table: Orders delivered to tables
- Both: Customer chooses
Table Service
| Property | Value |
|---|---|
| Field ID | table_service |
| Label | Table Service |
| Type | Toggle |
| Default | true |
Description: Enable table service (orders delivered to tables).
Counter Service
| Property | Value |
|---|---|
| Field ID | counter_service |
| Label | Counter Service |
| Type | Toggle |
| Default | true |
Description: Enable counter service (customers collect orders).
Order Number Display
| Property | Value |
|---|---|
| Field ID | show_order_number |
| Label | Show Order Number |
| Type | Toggle |
| Default | true |
Description: Display order number after ordering.
Order Number Format
| Property | Value |
|---|---|
| Field ID | order_number_format |
| Label | Order Number Format |
| Type | Select |
| Options | sequential, daily_reset, custom |
| Default | daily_reset |
Description: How order numbers are generated.
Options:
- Sequential: Continuous numbering (1, 2, 3...)
- Daily Reset: Resets each day (starts at 1)
- Custom: Custom format
Starting Number
| Property | Value |
|---|---|
| Field ID | starting_number |
| Label | Starting Number |
| Type | Number |
| Default | 1 |
Description: First order number of the day/sequence.
Preparation Time
| Property | Value |
|---|---|
| Field ID | prep_time |
| Label | Preparation Time |
| Type | Number |
| Unit | Minutes |
| Default | 15 |
Description: Estimated preparation time for in-house orders.
Table Management
A location's tables are organized into sections (e.g. "Dining Room", "Bar"). Each section has a Section Name (max 25 characters) and a Naming type.
Naming (per section)
| Property | Value |
|---|---|
| Field ID | naming_type |
| Label | Naming |
| Type | Select |
| Options | Automatic Table Names, Custom Table Names |
Description: How a section's tables are named.
Options:
- Automatic Table Names: enter a Label (e.g. "Table") and a Number of Tables; the section generates a numbered set — Table 1, Table 2, …
- Custom Table Names: manually enter each table's name (up to 20 characters each).
Order Acceptance & POS Forwarding
In-house orders placed via Kiosk, Table QR, or staff are processed automatically. There is no toggle to hold orders for manual acceptance, and no setting to stop forwarding orders to a connected POS — when a POS integration (MplusKassa, Hendrickx/Vanhoutte) is connected, paid orders are pushed to it automatically as part of order processing.
To manage incoming order volume instead, use:
- the Accept online orders switch (Online Ordering) to open or close the channel,
- the order cut-off time (
accept_orders_until, e.g. until closing time) in Online Ordering / Table QR settings, and - Order Capacity limits (Online Settings) to cap orders/items per time slot.
These order-flow toggles are not real settings. The in-house setting does not store
auto_accept,service_mode,send_to_kds,print_kitchen_ticket, orprint_receipt— it manages table sections, tip collection, order notes, and the default/extra menus (see the FAQs below).
Business Logic
In-House Order Flow
In-house orders (Kiosk, Table QR, or staff-entered) are placed and paid, then processed automatically: when a POS integration is connected the order is pushed to the POS, kitchen-bound items appear on the KDS (where used), and the order moves through preparation to ready. There is no manual-acceptance gate in this flow.
Relations
Depends On
- Locations: Settings per location
- KDS: For kitchen display
- Printers: For tickets
Affects
- Kiosk: In-house ordering
- QR Ordering: Table ordering
- KDS: Order display
- Transactions: In-house orders
Related Features
Business Rules
- At least one table section is required — the frontend enforces this before allowing save
- Extra menus cannot be the same as the default menu or each other, and their schedules must not overlap
- Kassanet-originated sections (names prefixed with "Hendrickx " or "Vanhoutte ") cannot be deleted or modified through the UI
- Sections used in QR Ordering cannot be deleted until removed from QR Ordering first
- Saving triggers a
ReloadMenuevent that syncs settings to all kiosk devices via Cloudflare D1, plusGenerateQrCodesForSectionjobs if table names changed
FAQs
- "What fields does the in-house setting actually store?"
order_capacity,collect_tips,allow_notes,default_menu_id, andextra_menu_ids— NOTservice_mode,auto_accept, orprint_kitchen_ticket. - "How do table sections work?" Each section has a name (max 25 chars, unique), a naming type (Automatic with label + count, or Custom with manually entered names up to 20 chars each), and automatically generates QR codes for QR Ordering.
- "How does tip collection work?" When enabled, three percentage options are offered (default 10/15/20%), and tips can be calculated on the subtotal before or after taxes. The default is After Taxes.
- "What happens when I delete a section?" The system checks if the section is used by QR Ordering (blocks deletion if so) and whether it's a Kassanet section (blocks deletion if so). Otherwise it deletes the section and regenerates QR codes.
- "Do changes apply immediately?" Changes trigger a
ReloadMenuevent, syncing to all connected devices. However, QR code regeneration happens asynchronously via background jobs.
Troubleshooting
- Table section not saving → Verify the section name is unique and does not exceed 25 characters. For custom naming, each table name must be 20 characters or fewer.
- Cannot delete a table section → The section may be in use by QR Ordering (remove it from QR Ordering first) or it may be a Kassanet-originated section (prefixed with "Hendrickx " or "Vanhoutte "), which cannot be deleted through the UI.
- Menu not appearing in default menu dropdown → The menu must be eligible for kiosk/QR visibility. Verify the menu is published and configured for the correct channel.
- Changes not reflected on kiosk → Saving triggers a
ReloadMenuevent. Verify the kiosk device is connected and receiving sync updates via Cloudflare D1.
Examples
Counter Service Only
json
{
"enabled": true,
"service_mode": "counter",
"table_service": false,
"counter_service": true,
"show_order_number": true,
"order_number_format": "daily_reset",
"starting_number": 1,
"prep_time": 10,
"auto_accept": true,
"send_to_kds": true,
"print_kitchen_ticket": true,
"print_receipt": true
}Full Table Service
json
{
"enabled": true,
"service_mode": "table",
"table_service": true,
"counter_service": false,
"table_count": 20,
"table_naming": "numbers",
"prep_time": 20,
"auto_accept": true,
"send_to_kds": true
}Mixed Service
json
{
"enabled": true,
"service_mode": "both",
"table_service": true,
"counter_service": true,
"table_count": 15,
"show_order_number": true,
"prep_time": 15,
"auto_accept": true
}