Appearance
Table Sections
Overview
Table sections organize tables into logical groups for Table QR ordering and in-house management.
Key Purpose: Organize tables into sections for easier management.
Purpose
This page lets you organize a location's physical tables into named sections, each with auto-generated QR codes for table-based QR ordering.
Key Concepts
- Table Section: A named group of tables belonging to a single location (e.g., "Main Floor," "Terrace," "Bar Area"), stored in MongoDB's
settingscollection with soft delete support - Automatic Naming: Tables are named as "{section_name} {label} {index}" (e.g., "Terrace Table 1") based on a label (max 10 chars) and a count of tables
- Custom Naming: Users manually enter each table name individually (max 20 chars each), allowing flexible naming like "Window Seat" or "VIP Booth 3"
- QR Code Generation: QR codes (PDF and SVG zip files) are generated asynchronously via background jobs and stored in Cloudflare R2 storage — regenerated automatically when sections are created or updated
- Free Table Detection: The system tracks active
OrderSessionrecords per section to determine which tables are currently occupied, used by Kassanet POS integrations (Hendrickx/Vanhoutte)
Actions
Create a Table Section
Navigate to In-House Settings → Tables & Sections, click Add Section. Enter a name (required, max 25 chars, must be unique), choose Automatic or Custom naming, and configure table details.
Edit a Table Section
Modify the section name, naming type, or table configuration. Saving triggers QR code regeneration via background jobs.
Delete a Table Section
Remove a section and its tables. Blocked if the section is used in QR Ordering or is a Kassanet-integrated section (prefixed with "Hendrickx" or "Vanhoutte").
Download QR Codes
Access qr_code_zip_path (SVG zip) or qr_code_pdf_path (PDF) from the section response to download all QR codes for that section.
Location
- Backoffice Route:
/in-house/qr-ordering - Backend Controller:
app/Http/Controllers/Api/TableQrOrderingController.php
Fields
Section Name
| Property | Value |
|---|---|
| Field ID | name |
| Label | Section Name |
| Type | Text |
| Required | Yes |
Description: Name of the section (e.g., "Terrace", "Main Floor").
Tables
| Property | Value |
|---|---|
| Field ID | tables |
| Label | Tables |
| Type | Array |
Description: Tables in this section.
Table Fields
Table Number
| Property | Value |
|---|---|
| Field ID | table_number |
| Label | Table Number |
| Type | Text |
| Required | Yes |
Description: Identifier for the table.
Table Name
| Property | Value |
|---|---|
| Field ID | table_name |
| Label | Table Name |
| Type | Text |
| Required | No |
Description: Optional friendly name.
Seats
| Property | Value |
|---|---|
| Field ID | seats |
| Label | Number of Seats |
| Type | Number |
| Default | 4 |
Description: Seating capacity.
QR Code
| Property | Value |
|---|---|
| Field ID | qr_code |
| Label | QR Code |
| Type | Generated |
Description: Unique QR code for this table.
Business Logic
Section Organization
Location
├── Section: Main Floor
│ ├── Table 1 (4 seats)
│ ├── Table 2 (4 seats)
│ ├── Table 3 (2 seats)
│ └── Table 4 (6 seats)
│
├── Section: Terrace
│ ├── Table T1 (4 seats)
│ ├── Table T2 (4 seats)
│ └── Table T3 (2 seats)
│
└── Section: Private Room
└── Table P1 (10 seats)QR Code Flow
Customer scans QR code
│
▼
Identify table from QR
│
▼
Load menu for location
│
▼
Orders linked to table
│
▼
KDS shows table numberBusiness Rules
- Section names are required, limited to 25 characters, and must be unique within the location
- For Automatic naming,
table_numbers(min 1) is required; for Custom naming, atable_namesarray of non-empty strings (max 20 chars each) is required - QR code files (PDF + SVG zip) are regenerated via background jobs when sections are created or updated, with a 5-minute lock per location to prevent concurrent generation
- Deleting a section triggers cleanup of both PDF and SVG zip files from Cloudflare R2 storage (errors are logged if cleanup fails)
- Kassanet-integrated sections (names prefixed with "Hendrickx " or "Vanhoutte ") cannot be deleted or modified through the UI and have special free-table detection logic
FAQs
- "Can a table belong to multiple sections?" No, each table is defined within exactly one section. Table names should be unique within a location to avoid confusion on the KDS.
- "What happens to QR codes when a section is updated?" QR codes are regenerated automatically via a background job whenever the section is saved or updated.
- "How are table names generated in Automatic mode?" Names follow the pattern "{section_name} {label} {index}" (e.g., "Terrace Table 1"). If no label is provided, it uses "{section_name} {index}".
- "What is the QR code URL format?"
https://table-eu.upvendo.com/{location_slug}?table={table_id}— scanning opens the online ordering menu linked to that specific table. - "Why can't I delete a section?" The section may be used in QR Ordering settings or may be a Kassanet-integrated section (Hendrickx/Vanhoutte). Remove it from QR Ordering first, or contact support for POS-integrated sections.
Troubleshooting
- QR codes not generating → QR code generation runs as a background job. Check that the queue worker is running. If the job was recently submitted, wait a few minutes for it to complete.
- Cannot delete a section → The section is either used in QR Ordering settings or is a Kassanet-integrated section (Hendrickx/Vanhoutte prefix). Remove it from QR Ordering first.
- Table names not updating on QR codes → QR codes are regenerated when sections are saved. Verify the save was successful and check for any background job failures.
- Duplicate table names across sections → While allowed by the system, duplicate names cause confusion on the KDS. Use unique table names across all sections within a location.
Customer Impact
Table QR Ordering
- Scan QR to start ordering
- Orders linked to table
- Multiple orders per table session
- Pay at table option
KDS
- Orders show table number
- Section grouping optional
- Easy identification
Relations
Depends On
- Locations: Sections per location
- QR Ordering: Table QR settings
Affects
- Transactions: Table linked to order
- KDS: Table display
- Reports: Table analytics
Related Features
Examples
Section with Tables
json
{
"section": {
"id": "section-1",
"name": "Main Floor",
"tables": [
{
"id": "table-1",
"table_number": "1",
"table_name": "Window Table",
"seats": 4,
"qr_code_url": "https://table.upvendo.com/loc123/t1"
},
{
"id": "table-2",
"table_number": "2",
"seats": 2,
"qr_code_url": "https://table.upvendo.com/loc123/t2"
}
]
}
}Multiple Sections
json
{
"sections": [
{
"name": "Main Floor",
"tables": [
{ "table_number": "1", "seats": 4 },
{ "table_number": "2", "seats": 4 },
{ "table_number": "3", "seats": 2 }
]
},
{
"name": "Terrace",
"tables": [
{ "table_number": "T1", "seats": 4 },
{ "table_number": "T2", "seats": 4 }
]
}
]
}QR Code URL Format
https://table-eu.upvendo.com/{location_slug}?table={table_id}