How to assign tables to a reservation
Replace the complete table set assigned to a reservation in a service occurrence. This is a full replacement: saving C4 and T1 for Liam Scott at Harbor Soho replaces the previous set, while saving an empty set clears the assignment.
In this article
Use this flow when a host or floor manager needs to change where a booked party will sit during a service. The Schedule board and table selector help the operator see the current reservation, table layout, selected tables and warnings before saving.
The saved action is not an incremental add or remove. Antylogic sends the final `table_ids` list for the reservation, stores the result as manually fixed table assignments and refreshes the occurrence so the board and reservation list show the new table set.
Before you start
- The operator is signed in with an organisation and location selected, for example Harbor Demo Group and Harbor Soho.
- The reservation occurrence detail can be opened at `/:orgId/:locationId/reservations/:occurrenceId`.
- The occurrence has reservations loaded and a layout that can be resolved from the occurrence or event payload.
- Viewing requires `reservation:view` or `reservation:manage`; saving table assignments requires `reservation:manage`.
- For en-GB captures, use `BOOKING_TABLES_DETAIL_OCCURRENCE_ID`, `BOOKING_TABLES_SELECTOR_LAYOUT_ID`, `BOOKING_DETAIL_RESERVATION_LABEL`, `BOOKING_TABLES_UPDATE_TABLE_1` and `BOOKING_TABLES_UPDATE_TABLE_2` from the GB runtime.
Instructions
- 1.
Open the occurrence
Open the Harbor Soho service occurrence and switch to the Schedule view. Confirm that the table board, reservations and occurrence mode are visible before changing any table assignment.
- 2.
Review the current assignment
Find the reservation that needs a new table set, for example Liam Scott. Use the board to compare assigned tables, unassigned reservations and table availability for the same occurrence.
- 3.
Choose the final table set
Select the reservation and add or remove tables until the selected tables are exactly the set that should remain assigned. In the editor flow, choose the table mode that assigns real tables, open the selector, pick the tables and return to the editor.
- 4.
Save the replacement
Save the change. The app sends `PUT /api/app/{orgId}/{locationId}/reservations/{reservationId}/tables` with `{ "table_ids": [...] }`, and the backend replaces the reservation's persisted assignments with that full list.
- 5.
Confirm manual mode when required
If the occurrence is automatic and open, Antylogic can preview whether the new table set is still feasible. When the app asks to save and switch to manual, confirm only if the operator accepts that the occurrence will move to Manual mode.
- 6.
Verify the result
After saving, check that the reservation shows the new table set in the Schedule board and in the reservation list table column. Resolve any draft changes before leaving the occurrence.
Validations and limits
- The UI does not save if `orgId`, `locationId`, `occurrenceId` or the management permission is missing.
- The selector de-duplicates selected table IDs and keeps only IDs present in the loaded layout.
- Any table mode other than indifferent requires at least one selected table in the editor.
- The replacement endpoint rejects invalid JSON and requires the reservation to belong to the active location.
- Sending an empty `table_ids` list removes all persisted table assignments for the reservation.
- Waitlist reservations cannot receive non-empty `table_ids`.
- Saved manual replacements are stored as `manual_fixed`; `preferred_table_ids` and `restricted_table_ids` are handled by the reservation editor endpoint, not by the assignment replacement endpoint.
- In an automatic open occurrence, an infeasible preview returns `error.optimization.manual_confirmation_required` until the client retries with `confirm_manual_mode: true`.
Expected result
The reservation keeps the new complete table set, the occurrence context refreshes, and any manual confirmation leaves the occurrence in Manual mode with optimisation state invalidated.