WH- reference. The same four steps serve a direct booking and a quote being converted. The code is in lib/booking/service.ts, and the page in components/book/.
Step 1: the supplier confirms the price
The check-rate step (checkOffer) handles every way an offer can have changed since the search:
For a direct booking, Omnibeds also looks for the same product cheaper from another supplier and offers to switch. A quote books exactly what was quoted, so it skips this.
Step 2: every guest is named
Each room’s guests are named one by one. Saved travellers can fill the rows, and a booking can be added to a trip here. Before going on, the names are checked against the supplier’s own rules, and the rule is shown in the screen. For example, RateHawk accepts letters and a few punctuation marks (no digits), forbids placeholder names, and needs at least one adult with a real name in every room. A name the supplier would refuse blocks the step. A name still marked as a placeholder (“Dummy”, “Test”) is asked about at confirmation, not blocked, for suppliers that accept it.Step 3: review and confirm
The agent sees the hotel, room, board, dates, every guest, the cancellation timeline and the total, then confirms.Step 4: the booking is made
1
The supplier books
The adapter sends the booking with every guest, room by room.
2
If the offer expired at the last moment
Nothing is booked. Omnibeds checks the price again and answers
OFFER_REFRESHED (409) with the new check, and the page goes back to step 1. A different price is never booked silently.3
The selling price is worked out on the server
From the price the supplier booked, with the agency’s margin rules. The browser never sends the selling price. A selling price the agent set on a quoted option is kept.
4
Our record is saved
The booking gets its
WH- reference, the supplier’s reference, every room and traveller, its cancellation policy and a history of events.Confirmed, or waiting for the supplier
Some suppliers accept a booking and confirm it a little later. Then the booking is saved asreconciliation_needed with a “pending” event, and reconciliation finishes it. See Reconciliation and jobs.