Quality Assurance

Staycation Booking — Process Documentation

A high-level, step-by-step walkthrough of how guests book a staycation, the logic that drives each step, and what to expect when combining specific packages with add-ons — including the special swimming-pool access and breakfast-inclusive room packages.

End-to-End Booking Process
Step 1

Select a location & landing page

The guest opens the resort's public page. All packages, add-ons, discounts and payment methods shown are scoped to that location, so the guest only ever sees what that property actually offers.

Logic: Every entity query is filtered by location_id. Bookings, availability and totals are all evaluated per-location so two properties never block each other.

Step 2

Pick a date on the calendar

Choosing a date resets the form to Step 1 and re-evaluates availability for that day. Blocked dates are shown as unavailable with a clear message.

Logic: The date determines the day type — weekday, weekend, or holiday. Fridays and days-before-holidays can be treated as weekend/holiday rates when the matching admin setting is enabled. Day type drives both pricing and which packages appear.

Watch out: A date inside a blocked range cannot be booked at all — the form shows a "Date Not Available" panel instead of the steps.

Step 3
Step 1 of form

Choose the room / resource

The guest selects a staycation room (e.g. Room 301, 302, 303) or the Main Resort. Each room card shows live availability and a photo gallery.

Logic: Rooms sharing an availability_group_id block each other. Selecting a room that is already confirmed for that slot is prevented; the system auto-selects a valid available room when possible.

Step 4

Choose the booking type

Three types: Day Tour (daycation), Night Tour (nightcation), and 22 Hours Stay. Each shows its check-in / check-out window.

Logic: A booking type is only enabled when both the date/time slot is open andat least one package exists for the selected room + day type. Otherwise it shows "Not Available" or "No packages available" and is disabled.

What to expect: For a 22-hour stay, an "Available Time Slots" list appears so the guest picks the exact check-in/check-out pair. Room-specific custom slots override the default rate-derived slots.

Step 5
Required

Select a package

Packages are shown as flip cards with price, included guests, and inclusions (e.g. "Includes Breakfast for 2"). Selecting a package is mandatory to continue.

Logic: The package's base_price overrides the raw rate price. The package also defines max_guests_included, the extra-guest fee, the combined hard cap (max_guests_allowed), and its own downpayment_amount.

Step 6
Step 2 of form

Enter guest details & guest count

Name, FB name, email, phone, and region/province/city. The guest sets adults and children.

Logic: Adults default to the package's included guests. The combined adults + children total is clamped to max_guests_allowed. Adults beyond max_guests_includedincur the extra-guest fee.

Step 7

Choose add-ons

Only add-ons whose applicable_package_ids include the selected package are shown. Some add-ons require a minimum guest count; inventory-managed add-ons show remaining stock for the date.

Logic: Add-on pricing supports simple, per-person (tiered beyond included units), and hourly types. A booking-type override price can apply (e.g. LPG costs more on a 22-hour stay).

Step 8

Apply a discount (optional)

Guests can enter a code, or an auto_apply discount attaches automatically when valid.

Logic: Discounts apply only to the base package price, never to add-ons or extra-guest fees. Validity checks: active, not expired, matches booking type, within the booking-date window.

Step 9
Step 3 of form

Review, pay the deposit & submit

The guest reviews the full breakdown, agrees to Terms, selects a payment method, and (when required) uploads a proof-of-payment screenshot with a reference number.

Logic: Before saving, the backend re-checks the slot against confirmed bookings for that resource to prevent double-booking. The deposit recorded equals the package's downpayment amount once proof is attached.

What to expect: On success the guest sees a confirmation screen (with a package-specific success image when configured) and the request is saved as pending until an admin confirms it.

Step 10

Admin confirmation & follow-up

An admin reviews the pending request, verifies payment, and confirms it. Confirmation, reminder, and completion emails are sent per the configured templates.

Logic: Confirming a booking finalizes the slot and consumes any inventory-managed add-on stock for that date.

How the total is calculated

Total = (Package base price) + (Extra adults × extra-guest fee) + (Add-ons total) − (Discount on base price)

The deposit shown separately is the package's downpayment amount and is not subtracted from the total — it is the amount the guest pays now to secure the slot.