What It Does
An order that holds a received online payment cannot be deleted or cancelled, so it is kept apart from the other orders of its table and these restaurant actions are refused for it.
The server separates a pre-paid order from another order of its table
When the server sees an order that holds a received online payment and another open order on one table in a save - a new order for the table, another order moved onto it, or an older copy of the pre-paid order saved back onto it - it makes the pre-paid order a floating order, without a table, named after its table with the first letter, from B on (for example 5B), that no other open order of the point of sale already uses on the server. An unsent split bill still on another till, and an order of another point of sale sharing the floor, are not seen. The table keeps the other order.
The money stays on the order that was paid
When the server releases a pre-paid order it does not change its lines or its payments. The till that saved the orders receives the released order in the same response, and the other tills receive it with the usual synchronisation notification and the read that follows. A till that holds the pre-paid order learns of the release in the same read as the other order of the table, when it has no change waiting to be sent on the pre-paid order. The server separates orders when it receives them: an order still waiting on a till is not seen by the server until it is synchronised. A till that holds an unsent order of a table and then learns of a pre-paid order on that table sends its own order first, so the server separates them instead of the Restaurant app merging them.
Finding a floating order
On a large screen, open it from its tab in the navbar; on any screen, open it from the dialog opened by the table selector button in the navbar (the button shows the name of the current order, or Table - a table icon on a small screen - when there is no current order), where a floating order is listed as a tab, then finish it. The Orders list opens filtered on the selected table and may hide it; opened from the floor plan, unfiltered, it lists the order.
Moving or merging on the till
The till refuses to move or merge a pre-paid order onto a table that already has an order, or onto a table whose group shows another order, before any item is copied; otherwise the Restaurant app would copy its items to the other order and remove the paid order. It also refuses to move or merge another order into a table's pre-paid order, so unpaid items are not mixed into the paid order. The till does not see a payment it has not yet received, so this guard cannot act on it.
Linking tables
Linking the table of a pre-paid order to a table that has another order, or whose group is shown by another order, is refused, so the pre-paid order is not hidden behind that order. It is refused on the till before anything is written, and again on the server for other clients, naming the order.
Still allowed
Moving a pre-paid order onto an empty table, linking its table to an empty table, and unlinking tables are not refused.
Cancellation refused
When the server refuses to cancel a pre-paid order (for example a cancellation made offline), the order comes back to the till and the till makes it a floating order at once, named after its table with a letter (for example 5B), and saves it with the next synchronisation, which can be the one that also sends the next guests' order. When the server saves the guests' order it separates the two orders, so the table then holds only the guests' order. If the floating order is not saved (for example while offline), the till retries it, and the server makes the order floating in the save of any other order claiming its table.
Known limitations
When an order whose online payment this till has not yet received is merged, while offline, into the order of another table and the cancel of the merged order is then refused, the order comes back with its lines while the other table's order on this till keeps showing the copied items, and a plain sync does not push them to the server. When two devices each hold an open order for the same table and none of them holds a received online payment, the Restaurant app still merges them into one order, as it does without this module. An empty order not yet sent, next to a pre-paid order on the same table, is merged by the Restaurant app into the pre-paid order on the next read, as when opening an occupied table; items tapped afterwards are added to the pre-paid order, so check which order is shown before tapping products. A payment the till has not yet received is unknown to the till: the Restaurant app may merge an order not yet sent into the order that was paid, which adds that order's items to it, and the till's transfer guard does not act; nothing is removed from the paid order by that merge. When the server refuses to save an order not yet sent, beside a pre-paid order, for a reason other than a lost connection, the cashier sees one "Order not sent" dialog and the till keeps receiving updates; after the read that follows the dialog, the cashier normally holds the pre-paid order with the refused items on it, because the Restaurant app merges the refused order into the pre-paid order of the table, so check the pre-paid order, and move or remove the items that do not belong to it. When two devices save an order for the same free table within about a second of each other, the server can let both pass, and a pre-paid order and another open order then stay on the table until either is saved again; check both orders before collecting the rest. A pre-paid order with a change waiting on the till, for example items just added after a part payment, is not separated in that read when the other order is saved within about a second of the pre-paid order's last server write; check both orders before collecting the rest. When two unpaid orders that Odoo itself left on one table are held by a till and one of them then receives an online payment, the Restaurant app merges them into the order with the higher id and deletes the other on the till. If the paid order is the older one, its items move onto the other order and the till asks the server to delete the paid order, which the server refuses; check both orders before collecting the rest, and find the paid order as a floating order in the table selector to finish it.