Rooms
Purpose and who uses it
ReceptionistHousekeeping MgrHotel ManagerOne screen shows the state of every room right now; managers also maintain the inventory and rates here.
Rooms is where the house is defined and watched. A room type (Standard, Deluxe, Suite…) carries the base nightly rate, bed description and size; a room is a number on a floor that belongs to one type. Bookings are sold by type and assigned to a room; the room's status on this screen tells the desk whether a guest can walk into it.
- Receptionists (Rooms = Edit) watch the grid, take a room out of service and raise housekeeping or maintenance tasks from it.
- Housekeeping Managers and Hotel Managers (Rooms = Full) also add and delete rooms and manage room types and rates.
- Maintenance (Edit) uses the grid to report issues; Security sees it read-only.
Screen anatomy
Status tiles that double as filters, a filter bar, and the List table (the default) with Grid and By floor as the other views of the same rooms.
- 1Page head“Rooms · N rooms · X% occupied”, the List / Grid / By floor switch (the List table opens first; the choice is remembered per module and ?view=grid deep-links) and, for Rooms = Full, Room types and New room.
- 2Filter bar“Search room number or type…”, plus Room type, Floor and Housekeeping (HK state) dropdowns. Shown / total counts and Clear.
- 3View switchGrid and By floor are the alternatives to the table. Grid shows a card per room with a coloured status stripe. By floor is the floor map: one tile per room under “Floor N · rooms · occupied · arriving · departing”, each tile showing the number, the status colour, the guest in it (or the type when empty), “Departs today” or “Until dd/mm”, a purple “arriving” tag for today's arrivals, and a broom or wrench icon when housekeeping or maintenance is on the room. Hover a tile for the full story.
- 4RowsRoom, Type, Floor, Status, Housekeeping, Guest (who is in-house or reserved, or who is arriving), Departs (with a “today” badge on departure day) and Price / night. Tap a heading to sort; Type, Floor, Status and Housekeeping headings filter. Click a row for the drawer.
- 7Status tilesAll rooms, Available, Occupied, Reserved, Cleaning, Maintenance, each with its count. Click one to filter; the chosen tile gets a coloured border.
Every room carries the stay holding it today: the card and the Guest today column name the guest, say whether they are In-house or Reserved, and show the stay dates. Rooms nobody is booked into read “No guest today”. A room can be Cleaning or Maintenance and still have a reservation waiting on it, which is exactly the case the desk needs to see early.
Out-of-service rooms have no tile of their own, they show with the grey Out of Service badge under All rooms and carry a red “Out of service” badge in the drawer. The Housekeeping dropdown filters on the HK state (clean, pending, in progress, occupied) that the projection stores alongside the status.
The room drawer and room actions
ReceptionistHousekeeping MgrStatus is never edited directly; the drawer offers the actions that change the facts behind it.
Click any card, tile or row to open “Room N”, headed with its type, beds and size, a status badge, floor and an “Out of service” badge when set.
- Occupancy: who holds the room today: guest, guest code and booking code, the status badge, In-house / Arriving today / Reserved, the dates, nights, guests and country, their phone and email, when they checked in, and what the folio has been charged and paid with the balance still due. Open bookingjumps to that booking in the archive. When nobody is booked in it says so.
- Price / night, Housekeeping, Last released, Past stays: the four summary cards. Notes (for example the out-of-service reason) appear below them.
- Next 14 days: a strip of day cells painted by the stays that hold the room (blue = in-house, purple = confirmed), then Revenue for the last 30 and 90 days with the nights behind it, the room type profile (sleeps, beds, size, amenities) and the last Housekeeping and Maintenance events on this room.
- Open work: every open housekeeping task and maintenance order on the room, with its code, status and who it is assigned to. Orders that block the room are flagged.
- Next arrivals: the next five reservations on the room; click one to open it.
- Stay history: every stay this room has ever carried (guest, booking, dates, nights, status, amount and anything still owed), 25 at a time with Prev / Next underneath.
Under Room actions the drawer reminds you: “Status is projected from bookings, housekeeping and maintenance. It is not edited directly.”
- Out of service: flags the room; it disappears from availability and reads Out of Service regardless of anything else. Toast: “Room N marked out of service”. This works offline and is queued until the connection returns. It is refused while a guest is in-house, and when reservations still hold the room a dialog lists them (“Room 12 has 2 upcoming bookings (BK-…, BK-…)”) and offers Unassign them and continue, after which those bookings wait for a room on the board.
- Return to service: clears the flag; the projection recomputes at once (“Room N returned to service”). Also offline-capable.
- Create HK task: raises a deep-clean task at Medium priority on the Housekeeping board (“HK task created for N”). The room reads Cleaning until housekeeping marks it Ready for Guest.
- Report maintenance: opens a work order titled “Issue in room N” (category General, Medium priority) on the Maintenance board (“Maintenance reported for N”). It only blocks the room if the work order is marked as blocking.
View-only users see “View-only access. Status changes need the Rooms edit permission.” instead of the action chips. Rooms = Full users also get a red Delete button in the footer.
Adding and deleting rooms
Hotel ManagerHousekeeping MgrNew rooms are sellable immediately; a room with booking history cannot be deleted.
- 1Click New roomThe dialog “New room, Appears immediately in availability and the booking wizard” opens.
- 2Enter Room number, Floor and Room typeNumbers are unique within the hotel (up to 10 characters); floor 0–50. The type list shows the base rate per night.
- 3Click Add roomToast “Room N added”. The room starts Available and counts toward its type's sellable capacity from that moment.
Deleting
Open the room, click Delete and confirm. A room a guest has ever slept in, or that a restaurant bill was ever charged to, is refused with the count: the stays have to keep naming the room they were sold. Take it out of service instead, which stops it being sold and keeps everything. Open housekeeping tasks and work orders do not block the delete for a Super Admin; they go with the room.
Room types and rates
Hotel ManagerRates are edited inline (new quotes only); each type also carries a profile: who fits, what the room has, how it is described.
- 1Click Room typesThe dialog “Room types & rates, Rate changes apply to new bookings only. Existing bookings keep their agreed rate” lists every type with Beds, the number of Rooms and an editable Rate / night (UGX).
- 2Change a rateType a whole figure into the rate cell and press Enter or click away. Toast: “Deluxe → UGX 280,000/night (new bookings only)”.
- 3Add a typeFill Name, Rate (UGX), Beds (e.g. “1 King”) and optionally the size (“26 m²”), then click the plus button. Empty required fields give “Fill name, rate and beds”.
- 4Edit the profileEach row shows Sleeps (adults + children) and the amenities as icons. Profile opens a dialog for Adults (1 to 20), Children (0 to 10), Amenities (picked from a list, up to 30) and a Description (up to 600 characters). Toast: “<name> profile saved”. The profile shows in the room drawer and feeds the reports.
Room types are ordered by the sequence they were created in.
Amenities
Amenities are picked from a list, never typed: open Profile on a room type and press the amenities box. The list drops down grouped the way a person thinks about a room (Comfort, Bathroom, Media and work, Drinks and food, Outside the room, Service, Hotel facilities, Access and policy), and every row is acheckbox, so the list itself shows what this room already has. Tick and untick as many as you like; the box above says how many are picked, Clear empties it, and each one also appears underneath as a chip with its icon and an x. Saving shows on the room types table behind at once, without closing it.
On the Rooms screens they show as icons alone: the room types table and the room drawer draw the little pictures, with the name on hover and on the accessible name, and a “+3” when there are more than fit. A list of six pictures reads as a room at a glance where six words read as a wall of text.
Stopping a type being sold
Each row has a red bin. What happens when you press it depends on what the type is carrying, and the app says which:
- Nothing points at it: it goes, along with any published prices it had. Bookings are not affected because there are none.
- It has rooms but has never been booked: “Room type “Trial Wing” still has 1 room.” A Hotel Manager is told a Super Admin can delete it anyway; the Super Admin gets a Move its rooms to picker, and one press moves the rooms and deletes the type together.
- A guest has been sold it: “still has 639 bookings, 3 group allotments, 15 rooms and 6 published rates. The 639 bookings and 3 group allotments cannot be deleted with it.” Nothing gets past that, at any access level, because a folio has to keep saying what it sold. Move its rooms to another type instead: the type stays on the old bookings and stops being sold the moment its last room leaves.
Availability search
ReceptionistThe same query feeds the booking wizard and the check-in room chips, with a stricter “ready” mode for check-in.
Asking “which rooms are free from A to B” returns rooms that are not out of service and have no New, Confirmed or Checked In booking whose nights overlap the requested window (a room under maintenance today still counts for later dates; the ready-only variant used at check-in also drops Maintenance and Cleaning rooms). Optionally limit it to one room type. The booking wizard uses this at Check availability.
At check-in the desk asks for ready rooms only: the same list minus rooms in Cleaning, rooms with an open housekeeping task and rooms where a guest is still checked in (a same-day turnover). That mirrors the check-in rules exactly, so a chip the drawer offers never fails.
Room status is a projection
Six statuses, computed from facts in a fixed priority order and refreshed by every relevant action, a 30-minute sweeper and the night audit.
- Available → Reserved (booking arrives today)
- Reserved → Occupied (check in)
- Occupied → Cleaning (check out)
- Cleaning → Available (HK task ready)
- Available → Maintenance (blocking work order)
- Maintenance → Available (order closed)
- Available → Out of Service (Out of service)
- Out of Service → Available (Return to service)
The stored status is recomputed from five facts, and the first that is true wins:
- Out of Service: the out-of-service flag is set (HK state pending).
- Occupied: a booking is Checked In on the room (HK state occupied).
- Maintenance: an open work order (Reported, Assigned, In Progress or Waiting for Parts) is marked as blocking the room.
- Cleaning: an open housekeeping task (Dirty, Assigned, In Progress or Inspection) exists for the room (HK state in progress).
- Reserved: a New or Confirmed booking holds the room today in hotel-local time: its check-in is today or earlier and its check-out is later than today. A booking three weeks out does not make the room Reserved.
- Available: none of the above (HK state clean).
Because the Reserved rule depends on the date, the server also re-syncs every room of every hotel on a timer, every 30 minutes by default (ROOM_SYNC_MINUTES; 0 disables it), and again when the night audit closes the business day. Between sweeps, every booking, housekeeping, maintenance and out-of-service action re-syncs the rooms it touches, so the grid is right within seconds of the fact changing.
Fields
The New room dialog and the room type row.
| Field | Type | Notes |
|---|---|---|
| Room number * | text 1–10 | Unique within the hotel. Shown on cards, in the booking drawer and on the housekeeping board. |
| Floor * | 0–50 | Groups the By floor view; shown as a “Floor N” tag. |
| Room type * | select | Sets the nightly price and which bookings the room can take. |
| Notes | text ≤ 300 | Free text shown in the drawer. The out-of-service reason is written here when one is given. |
| Field | Type | Notes |
|---|---|---|
| Name * | text 2–60 | Unique within the hotel. |
| Rate / night * | whole UGX | Base rate before any rate plan and before tax. Digits only, commas and spaces are stripped. |
| Beds * | text 1–40 | Free text such as “1 King” or “2 Twin”, shown in the booking wizard. |
| Size | text ≤ 20 | Optional label such as “26 m²”. |
Permissions
View watches the grid; Edit changes facts about a room; Full manages the inventory and rates.
| Role | Rooms | Bookings |
|---|---|---|
| Super Admin | Full | Full |
| Hotel Manager | Full | Full |
| Receptionist | Edit | Full |
| Accountant | None | View |
| Housekeeping Mgr | Full | View |
| Maintenance | Edit | None |
| Restaurant Mgr | None | View |
| HR Manager | None | None |
| Security | View | View |
| Waiter | None | None |
| Chef | None | None |
| Housekeeper | Edit | None |
| Cashier | None | None |
- Rooms = View: the grid, list and floor views, room types and rates (read-only), the drawer.
- Rooms = Edit: Out of service, Return to service, Create HK task, Report maintenance.
- Rooms = Full: New room, Delete, Room types (add a type, change rates, delete a type). Deleting past rooms that are still on a type needs a Super Admin.
- Bookings = View: the availability search used by the wizard and check-in.
Tips
Tiles as filters, live updates, offline behaviour and when to use out-of-service.
Errors you may see
Every refusal the rooms endpoints return.
Room 204 already existsRoom 204 has booking history. Mark it "Out of Service" instead of deletingRoom type "Deluxe" already exists"Deluxe" still has rooms or bookings attachedWhole UGX figureto must be after from