Reservation Module Concepts

The Reservation module is for businesses that sell time on a place: futsal or badminton courts, studios, meeting rooms, and rooms or villas rented per night, month, or year. Customers book by themselves on the /booking page and pay a deposit online, while admins follow everything in the Reservation Calendar (daily table and Unit chart) and record check-in and check-out. Read this page before opening any form.

What This Module Does

Reservation Units: Per Slot, Per Night, Per Month, Per Year

How a place is booked is set by the Time Unit on its rental product.

Time Unit of the rental product How it is booked Price and schedule
Minute or Hour (per slot) Date, start time, and duration (a multiple of the group slot length, at most 24 slots). Only inside Opening Hours. Price of one slot = unit price x slot length / time-unit length. The schedule must not have started.
Day (per night) Check-in date and number of nights, 1 to 365. The daily check-in and check-out hours come from Start Deadline and Completion Deadline on the rental product (Completion Deadline 0 = same as check-in hour). Opening Hours are not used. One night = one unit price. Today is still bookable even if the check-in hour has passed. Check-out at 12:00 and check-in at 14:00 mean guests leaving and arriving on the same day do not conflict.
Month Start date and number of months, 1 to 36, from date to date at 00:00. A date that does not exist in the target month is clamped to month end (31 January + 1 month = 28 or 29 February). One month = one unit price. Opening Hours are not used.
Year Start date and number of years, 1 to 10. One year = one unit price. Opening Hours are not used.
A group may have only one kind of unit. A rental product whose unit differs from the other products in a group that is Open for Reservations is rejected on save, and a group that is already mixed is not offered on /booking. Other units (for example Week) cannot be booked.

Rules To Know

Some things are designed this way on purpose. Tell your staff and customers.

No-show and Repeating Reservations

Terms Used

Term Meaning
Rental Product Group (reservation type) What you sell, for example Mini Soccer Court. This is the same Table Group the POS uses (menu Rental Product Group List); the Open for Reservations toggle makes it bookable, and the /booking page calls it "Reservation type". The group sets slot length, division, deposit percentage, unit name, and the early check-in and late check-out fee products.
Rental Product (unit) The physical place being booked, for example Court A and Court B, or Room 101. It is a row of the Rental Product List (a POS table) marked Leased, with a product and a time unit (Minute, Hour, Day, Month, or Year) that set its price and how it is booked. Because it is the same POS table, the cashier uses the same place customers book.
Unit Name The word customers and admins read for the units of a group: Court, Room, Table, Studio, or any other word. Set on the Rental Product Group. Blank means the language default (Table in English, Meja in Indonesian). It is per group, so one business can use Court and Meeting Room at the same time.
Slot One piece of time on one unit, as long as the group says. A 2-hour reservation on a 60-minute group holds two consecutive slots. For rentals per night, month, or year, one cell is one night, one month, or one year.
Opening Hours The hours that can be booked, set per group per day of the week, only for groups in Minute or Hour units. A day without opening hours is closed.
Blocked Time Closes a rental product for a time range, for example for turf maintenance or room renovation. It applies to every unit.
Deposit The part of the total paid when booking. Recorded in Customer Advances and usable as payment at the cashier. The rest is paid at the cashier when the customer arrives, on the same POS table.
Check-in, Check-out Marks the customer starting and finishing use of the unit, from the Reservation Calendar or the Customer Reservations form. Check-in opens a POS invoice on that table; check-out releases the rest of the schedule that was not used.
No-show Marks that the guest did not arrive. Recorded by an admin after the schedule has started; the schedule is released.
Unit chart A tab in the Reservation Calendar that shows each unit against dates (7, 14, or 31 days), like a hotel room chart.

What Must Be Ready First

Setup Order

  1. Create a Rental Product Group (Sales & POS menu): switch on Open for Reservations, then fill the slot length, Minimum Deposit (%), the Unit Name (Court, Room, Table, and so on), the division, and if needed the early check-in and late check-out fee products.
  2. Create a Rental Product for each court or room that gets booked: pick that group, switch on Leased, choose the product, and fill the time unit (Hour for courts, Day for rooms per night). For rental per night also fill the Start Deadline and Completion Deadline as the check-in and check-out hours. Steps 1 and 2 are explained on the Setting Up Rental Products for Reservations page.
  3. For per-slot groups, fill Reservation Opening Hours for each open day. One day may have more than one range, for example morning and evening. Groups per night, month, and year do not use opening hours.
  4. If needed, add Sales Discount Rules on the product for peak-hour or weekend prices (see How Price Is Calculated).
  5. Share the portal link with customers. The easiest way: open the Customer Reservation Portal menu, then copy the address that opens in the new tab. On the subscription service (SaaS) the link must carry the tenant code, that is /booking?tenantId=TENANT-CODE; without it the page does not know which business is meant.
  6. Test once end to end: create a customer account, book a schedule, pay the deposit, then see the result in the Reservation Calendar.

How Price and Deposit Are Calculated

Price is always calculated by the server, never by the customer browser, and is calculated per cell (per slot, night, month, or year) and then added up. The price shown in the portal is the price of the unit that will be assigned.

  1. The base price of a cell is the table product sales price in its base unit, by the customer Price Level. For per-slot rental it is adjusted for the slot length against the table time unit (a 60-minute slot on an Hour table = the one-hour price). For rental per night, month, or year the unit price is used as is per period. Member customers can be given another price level; if the price on that level is empty, the level 1 price is used, as at the cashier. Reservations created by an admin use price level 1.
  2. The product Sales Discount Rules are evaluated for every cell: the price kind replaces the price, the percent kind gives a percentage discount, and the value kind subtracts an amount.
  3. The total is the sum of all cell prices. The deposit is the total times the group Minimum Deposit (%), rounded to two decimals.
Rule variable Contains
detail.baseprice The cell base price by the customer price level.
detail.slotdate The cell date (for rental per night, the date of that night), for example 2026-10-18.
detail.slothour The slot start hour, 0 to 23. Always 0 for rental per night, month, and year.
detail.slotdayofweek Day of the week: 1 Monday to 7 Sunday. For rental per period, the day of the period start date.
detail.bookingunit slot, day, month, or year on a reservation; empty when the rule is evaluated at the cashier.
Do not use currenthour or currentday in reservation rules: both mean the time the order was created, not the time of use. Always write prices relative to detail.baseprice; a fixed number such as ? 400000 : 300000 overwrites the price-level price, so members lose their price. At the cashier, product rules are only evaluated for customers who also have a sales discount rule; in reservations, product rules apply to every customer.

The Life of a Reservation

Status Meaning Schedule
Awaiting payment Created by the customer, deposit not yet received. Payment deadline is 15 minutes. Held
Confirmed Deposit received, or no deposit (0%), or created by an admin. Held
In use Checked in. A POS invoice is open on that table. Held
Completed Checked out. The unused part that had not started is released
No-show The guest did not arrive; marked by an admin after the schedule started. Released
Expired The deposit did not arrive before the deadline. Released
Late payment The deposit arrived after the reservation expired. The money goes to the manual refund queue. Already released
Cancelled Cancelled by an admin. Money already received becomes a manual refund. Released
Statuses are updated when someone opens the /booking page, the Reservation Calendar, or the Report, not by a background process. A reservation that is not checked in stays Confirmed until an admin marks it No-show or cancels it, and one that is not checked out stays In use.

Check-in and Check-out

Deposit, Balance, and Refunds

Email Notices

Common Problems

Symptom Cause and how to check
Reservation menus are not visible The Rental Transaction feature is not active, or your role has not been given access to the Reservation menus. Ask an admin to update the role access.
The /booking page fails or says the tenant is not registered (SaaS) The link does not carry ?tenantId=TENANT-CODE. Copy the link from the Customer Reservation Portal menu.
A type is missing from the /booking choices though Open for Reservations is on The group has no active, Leased rental product with a product and a time unit of Minute, Hour, Day, Month, or Year; or the rental products in the group mix different units.
Customers find no schedule at all A per-slot group has no Opening Hours for that day, or the date is in the past. Schedules that have passed, are full, or are blocked show as Taken or Full.
Customers see "Admin needs to activate a sales advance payment type" There is no active Payment Type of kind Sales Advance.
One court is never assigned while the others are used That rental product is not Leased, has no product, its product has no active base unit (quantity 1), or its time unit cannot be booked. A unit whose price cannot be calculated is skipped and another unit is used.
A schedule shows Full though nothing is reserved Every unit of that group is running as a rental session at the cashier (POS), is blocked by Blocked Time, or is already booked in an overlapping range.
Message "Minimum Deposit (%): 0 - 100." when saving the group The percentage is negative or above 100. Zero is valid (no deposit); enter 0 to 100.
Message that the time unit must be the same when saving a group or rental product Rental products in a group that is Open for Reservations must use the same unit: minute/hour, day, month, or year. Move them to another group.
"Schedule is outside opening hours" Only for per-slot groups. The start time must fall on a multiple of the slot length counted from opening time, and the end must not pass closing time.
A rule gives an unexpected price Check the rule kind and make sure the formula is relative to detail.baseprice. When several rules of the same kind apply, the last one wins.
The customer paid but the status is still Awaiting payment The gateway confirmation is checked when the customer reopens My Reservations. Ask the customer to reload the page after paying.
The cashier advance balance is smaller than what the customer paid Part of the money became a refund: the schedule was moved to a cheaper price, the reservation was cancelled, or the customer overpaid. See the Refund Due column in the Report.
Check-in is rejected The start date has not arrived or the rental time has ended; there is no active table POS session including that unit, or more than one; the table still has an open POS invoice; the default customer, salesman, division, or shipment of the POS is incomplete; or an early check-in is rejected because the unit is still used or already booked before this schedule. The error message says which.
The cashier refuses to open a rental or move a session with "This table is booked by a customer at ..." That table has a reservation (Awaiting payment or Confirmed) overlapping the rental hours. Check the reservation in from the Reservation Calendar, pick another table, or move or cancel the reservation. A rental without an end time is only checked against a reservation running at that moment.
A repeating reservation is rejected with "Pertemuan ke-N (date): ..." That meeting conflicts or is outside opening hours, so the whole series was not created. Change the time, unit, or start date, or create that meeting separately.
The No-show button does not appear Only for Confirmed reservations whose schedule has started. One that has not started can be cancelled or moved; one already checked in is finished with Check-out.
Check-out is rejected The POS invoice of the table has changed since check-in; check the POS invoice first. A check-out after the schedule has ended is not rejected, but is charged a late fee when the group sets one.
The late check-out fee is not on the invoice The check-in invoice was closed before check-out. The server shows a warning with the fee amount; bill it through a cashier transaction.