Hotel front office

Advance bookings (deposit, cancel, check-in, email)

An advance booking is a reservation taken before the guest arrives — the calendar shows it, the room is held against new bookings, and (if a deposit was taken) the money is sitting on the guest's account until the guest actually checks in.

This page covers the full lifecycle: book → confirm by email → either check in OR cancel.

Before you start

  • You need Booking Management access.
  • The guest can be: a past guest in the registry, a brand-new walk-in registered on the spot, or a guest currently in-house who wants to add a future stay. The wizard handles all three.
  • For the deposit step you need at least one payment method on Setup → Payment Methods. Both atomic methods (Cash / Cheque / Bank Transfer / manual Card) and gateway-orchestrated methods (Paystack bank transfer / QR / Moniepoint terminal etc.) are supported.

Creating a booking

New advance bookings now follow a two-step wizard, mirroring the Check-In wizard so the muscle-memory carries over.

Step 1 — Who is the guest?

Open Front Office → New Advance Booking (or click a vacant cell on the Booking Calendar). Pick one of the three guest sources:

  • Pick existing guest — search the full guest registry by name, phone or guest #. Use this when the guest has stayed before or was pre-registered.
  • + New guest — quick-register a brand-new guest inline. Fill the surname, first name, phone (required) plus any optional demographics you have, then pick the Sponsorship mode:
    • Self — the guest pays. Default.
    • Employer — an organisation pays. Pick the organisation Customer.
    • Complimentary / House Use — the hotel absorbs the bill.
    • Existing Guest — the booking rolls up to another guest's folio. Pick the host (a past self-sponsored guest).
  • Add to in-house guest — pick from the list of guests currently in-house. Use this when an in-house guest wants to extend or pre-book another stay; the booking attaches to their existing sponsor without creating a duplicate guest record.

Click Next: Rooms & deposit when ready. Validation runs at the gate — missing fields are flagged before you advance.

Step 2 — Rooms & deposit

  1. Confirm the booking date and the due date (when the guest is expected to arrive). On new bookings, Booking Date can't be set in the future and Due Date can't be set in the past — the date pickers enforce both.
  2. Add one or more room rows. Per-row columns:
    • Room Type (required) — the category being held. Picking it unlocks the rest of the row.
    • Billing Interval (required) — pulls the Daily / Hourly /etc. rate ladder configured on the room type. Selecting a row auto-fills the Rate.
    • Room No. (optional) — filtered to vacant rooms of the picked type. Leave blank to hold "any of type"; assign on check-in.
    • Rate / No. Days / Discount / Tax — operator-editable. Discount is the total for the row, not per night.
    • Tax fills in from the room type's taxes (its main tax and other tax, e.g. VAT), charged on Rate × Days − Discount. It refreshes when you change the rate, days, discount or billing interval. A tax you type yourself is kept.
    • Amount = Rate × Days − Discount + Tax + service charge. The service charge (when the room type collects one) has no column of its own; it's inside Amount. This is exactly what check-in will bill, so the deposit and the total match the folio.
    • CheckIn Date — calendar disables conflicted days for the picked room (or room type) so you never pick a known-conflict date.
    • Deposit Share — shown read-only per row. Allocated proportionally by Amount from the total deposit at the footer (see step 3).
    • Status — Not Checked In / Checked In / Booking Cancelled. Checked-in and cancelled rows are read-only and can't be removed.
  3. Optionally enter an Amount To Deposit + Destination Account. The deposit auto-distributes across every room row by Amount ratio — the footer shows the allocation total against the deposit you entered so you can spot if a row hasn't picked up its share. The system generates a CashReciept on save — the deposit lands on the guest's account as credit until check-in.
  4. When the deposit is greater than zero, pick the Payment method.
    • Cash / Cheque / Bank Transfer / manual Card — save the booking; the tender row is recorded as that method automatically.
    • Gateway (Paystack / Moniepoint / etc.) — a green ⚡ Charge … via X button appears next to the picker. Click it, collect from the customer in the dialog (bank transfer / QR / tap card on terminal), then save. The amount + payment method are locked once the gateway confirms — re-pick a different method to undo if you collected via the wrong one.
  5. Save. For the + New guest path the system materialises the guest record + sponsor link first, in the same transaction as the booking — if either fails, neither is saved.

Payment received but booking didn't save? If the gateway charge succeeds but the save fails afterwards (network glitch, validation error, etc.), a sticky red banner appears with the Intent ID + Reference. Click Retry save to try again with the same charge, or Copy for support to send the details to your ops team. The gateway money is never lost — just temporarily unlinked.

Inspecting a guest's other bookings

When editing an existing booking, click the « sidebar toggle on the header to open Guest's Bookings. The panel lists every advance booking on the guest with a per-row status badge — handy for spotting an existing reservation before duplicating one.

Editing existing rows

The room-types grid blocks unsafe edits on saved rows:

  • A row that's already Checked In is read-only (the stay is live).
  • A row that's Booking Cancelled is read-only (history).
  • A row with a Deposit Share can't be removed — cancel it via Manage Booking (which posts the cancel invoice + leaves the row in place), or zero its deposit first.

The header re-renders the per-row status as a one-glance summary ("Checked In × 2 · Pending × 1") and shows the original Booked by user.

If the rooms are unavailable on those dates, the save will fail with a clear message — including the next available date when nothing fits. Move the dates or switch room types and try again.

Group bookings (one header, many rooms)

When you add a second room row to a booking, it becomes a group booking. A blue banner appears above the rooms grid showing the count, the booking reference, and the per-row status split (how many are checked in, not yet checked in, or cancelled).

There's still one guest at the header level — the group leader who the deposit is collected from and who appears on the confirmation email. At check-in, each room is materialised as its own folio (under the same guest), so you can settle them independently as guests in the group leave at different times. (Consolidated single-folio billing across the whole group is a planned v2.)

To convert a group booking to in-house at the desk, check in each row in turn — the Booking Calendar's row-level Check in action handles this. The deposit allocates proportionally across the folios.

Sending a confirmation email

After saving, the Send confirmation button emails the guest the template you set in Settings (with the guest name, due date, your hotel name, and the booking reference substituted in). It uses the SendGrid configuration your tenant is wired to; the toast tells you the address it was delivered to.

Cancelling a booking

  1. Open Front Office → Advance Bookings → click the Manage button.
  2. Pick the guest, then the booking row to cancel.
  3. Switch the radio to Cancel Booking. A policy preview loads:
    • Time window — Before / Within / After the configured policy window (the desktop "FromTime…/ToTime…" times in Settings).
    • Charge mode — % of Deposit · % of Daily Rate × No. Days · % of Single Daily Rate · % of Deposit (charge-all).
    • Percentage and Base the percent applies to.
    • Charge — the computed amount, rounded.
    • Refundable balance — what's left of the row's deposit after the charge, if any.
  4. If the policy says no cancel is warranted (no deposit and due date hasn't passed), the Cancel button is hidden — there's nothing for the policy to charge.
    • The guest actually stayed? If the guest was checked in as a walk-in instead of from this booking, tick Waive the charge — the guest stayed. No cancellation invoice is raised, and the deposit becomes the customer's credit. This option needs the Allow refund / crediting right.
  5. Confirm. The system marks the row Booking Cancelled, stamps the cancellation date, and (if there's a charge) posts a sales invoice to the guest's account using the system-managed BookingCancelationCharges item against the RESERVATION income account.
  6. After cancel, two follow-up toasts appear when applicable:
    • "Open cancellation invoice #N?" — deep link to the invoice editor so you can print or email it.
    • "Refundable balance: ₦X. Go to Receipts to refund?" — deep link to the guest's receipts so you can process the refund.

Finding a booking when the guest arrives

Every booking has a short booking code of 6 letters and numbers, like K7PX4M. Online bookings get one automatically; a booking you create gets one too if you leave Ref / PO No. empty. The guest finds it in their confirmation email and on their booking page. Codes never use 0, O, 1 or I, so they're easy to read out.

On Front office → Advance Bookings:

  • Type in the search box: the booking code (upper or lower case, spaces don't matter), the guest's name, phone number or email. A search looks at all bookings, whatever their date.
  • Tick Arriving today to see only bookings due today that haven't checked in yet.

Click the booking to open it.

Checking in (converting to a real stay)

From the Room Status Board (the usual way)

Rooms booked for today are marked on Front Office → Room Status Board:

  • The room's tile shows an amber Arriving badge and the guest's name.
  • Click the room. The panel says Booked for today, with the nights, the deposit paid and the booking code.
  • Click Check In ‹guest's name›. The Check-In Wizard opens from the booking, exactly as below: the deposit moves onto the folio and the booking is marked Checked In.
  • Check In a Walk-in is still there for when the room goes to someone else. Don't use it for the booked guest: their booking would stay open and their deposit would not reach the folio.
  • Bookings made for a room type without a room yet are listed above the board under Arriving today, no room yet. Click the guest, then pick the room in the wizard.

From Advance Bookings

When the guest arrives:

  1. Find the booking (see above) and open it, or open Manage Advance Booking for that guest.
  2. Pick the booking row + Check In.
  3. The Check-In Wizard opens pre-filled with the booking's guest, room, rate plan, and date. When the booking already has a room, the wizard goes straight to Room billing, with the room and the booking's rate plan selected and the price worked out.
  4. Complete the wizard normally. The system:
    • Creates the real folio invoice + room detail.
    • Flips the booking row to Checked In and stamps the actual check-in time.
    • Re-points the deposit receipt at the new folio invoice — the deposit instantly shows as a paid amount on the folio. The auto-billing job grows the allocation as nights bill.

The booking's price is kept for the booked nights

If the booking was made at a lower price than the room type's normal rate (a discount, a cheaper online rate plan, or a custom rate typed on the booking), the folio keeps that price for the nights that were booked:

  • Each booked night shows the normal rate with the booking's reduction as a discount. Tax and service charge are worked out after the discount.
  • If the guest stays longer, the extra nights bill at the room type's normal rate, with no booking discount.
  • The price only carries over when the guest checks into the room type they booked. If you give them a different room type, or type a rate of your own in the wizard, the wizard's price is used instead.
  • A booking made above the normal rate bills the normal rate.

The Check-In Wizard's price preview already shows the booking's price, so what you see is what is billed.

"Returning guest — usually paid for by a sponsor"

This yellow notice appears on the booking and in the Check-In Wizard when the same person (same phone number and surname) had earlier stays paid by a sponsor, but this booking is paid by the guest. It's common with bookings made on your website, which are always paid by the guest.

Before checking in, ask who is paying for this stay:

  • The guest pays → check in as normal. The notice is only information.
  • The sponsor pays → click Change sponsorship on the notice. The guest's record opens in a new tab. Set Sponsorship to the sponsor and save. The deposit and the bill move to the sponsor. Close the tab and check in.

The notice names the sponsor and the date of the last stay they paid for, so you can check with the guest or the company.

Printing the deposit receipt

When the booking has a deposit, the Receipt #N button appears next to Send confirmation in the header. It opens the deposit receipt for print / re-email. The receipt is locked to the booking until check-in (or cancellation) — you can view it but can't re-allocate the tender to another invoice. After check-in the lock releases and the receipt's allocation grows with the folio.

Tips

  • The advance booking row never gets deleted — even after check-in. It stays as the historical reference for the deposit and the booking.
  • The deposit receipt is also kept — only its allocation moves to the new folio. Cancellations leave the deposit on the customer's account as credit, available for refund through the standard Receipts page.
  • A deposit is held for its booking while the booking still needs it: a room is waiting to be checked in, or a room it pays for is still in-house. Once every room is checked out, cancelled or marked no-show, what's left of the deposit is ordinary customer credit.
  • Guest checked in as a walk-in instead of from the booking? The deposit stays held, because the booking still shows a room waiting. Cancel the booking with Waive the charge — the guest stayed, then open Sales → Customer Receipts → New receipt for that customer, tick Apply brought-forward credit, and allocate the credit to the stays' invoices.
  • A due date in the past blocks check-in. Reschedule the booking (or cancel it) before trying.
  • The CheckIn Date picker greys out conflicted days for the picked room. If every day in your target range is grey, switch to a different specific room (or leave Room No blank to pick any of the type).

Common problems

  • "Room is already reserved" or "Room is occupied" on save → another booking or in-house guest already covers part of the requested range. The error message includes the next available date — start there.
  • "Guest has no sponsor" when creating a deposit receipt → reception registered the guest without sponsorship details. Open the guest record and pick Self / Employer / etc. before retrying.
  • The deposit doesn't show as the customer's credit → the booking still holds it: a room is still waiting to be checked in, or a room it pays for is still in-house. Check the guest in from the booking, or cancel the remaining rooms.
  • "Lowering or waiving the cancellation charge needs the Allow refund / crediting right" → ask an administrator to cancel it, or to give you the right.
  • "Cannot cancel a booking that's already checked in" → cancellations only apply to Not Checked In rows. The checked-in row is a real stay now; handle it via the folio.
  • Cancellation invoice posted for the wrong amount → check your cancellation-policy time window and percentage on Settings. The invoice was posted for the value the policy currently dictates.
  • Confirmation email "503 Service Unavailable" → SendGrid isn't configured on this tenant. Add the API key to appsettings, restart the API, and retry.
  • Billing Interval is empty when checking in a booking → fixed (October 2026). The booked room is now selected for you and the booking's rate plan is filled in.
  • "Room … was booked for this guest but isn't vacant now" → the booked room has another guest in it, or is out of use or under maintenance. The check-in stays on the first step: pick another vacant room of the same type, then continue. Only vacant rooms that are in service are listed.
  • Deposit doesn't appear on the folio after check-in → the deposit starts allocated to nothing. The auto-billing job (every 15 min by default) grows the allocation as room nights accumulate; check that Auto-Bill Guests is on under Setup → Preferences.

See it working on your own business

Start a 45-day free trial — no card needed — and follow this guide in your own practice company.