Maintenance
Purpose and who uses it
MaintenanceHousekeeping MgrReceptionistOne record per fault, an M-code work order, from the moment it is reported until it is closed.
Maintenance keeps a work order for every fault: a broken AC, a leaking tap in the lobby, a pool pump. Anyone with Rooms Edit can report one; the maintenance team works it through six statuses. A work order tied to a room can block that room, it shows as Maintenance on the Rooms page and leaves the sellable pool, until the repair is completed.
- Maintenance technicians live in the list and board, moving orders along and recording cost.
- Housekeeping and front desk report what they find (“AC not cooling”, “lamp broken in 204”).
- Managers watch the KPI tiles, open requests, high priority, estimated cost, and use the list filters for a weekly review.
Maintenance sits under the Rooms permission module, the same as Housekeeping.
Screen anatomy
A list-first page: five KPI tiles that double as filters, a paged table with editable cells (or the same page as cards), and a board for open work only.
- 1KPI tilesOpen requests, High priority, In progress, Resolved, Est. cost. Click a tile to filter the list by it; click again to clear.
- 2Filter barSearch (code, issue, location), Status, Priority, Category, Technician (Unassigned / External / a person).
- 3List / Cards / Board switchBoard shows open work only, “completed and closed orders live in the list”.
- 4RowsID, Issue, Location, Category, Priority, Technician, Due, Cost, Status. Priority, Technician and Status are editable in place.
- 5Row clickOpens the work-order drawer with every field editable and the next-step buttons in the footer.
- 6PaginationNewest first, 25 per page by default. Filters and page live in the address bar.
- 8Report issueOpens the “Report maintenance issue” dialog.
The Board tab lays the same open orders out as cards in the columns Reported · Assigned · In Progress · Waiting for Parts · Completed. Because it only loads open work, the Completed column is where cards leave the board: drop one there and it reappears in the list. Closed orders never show on the board.
Reporting an issue
ReceptionistHousekeeping MgrMaintenanceTitle, category, priority and where it is, a room, or a free-text location for anywhere else.
- 1Click Report issueTop right. Needs Rooms Edit.
- 2Describe it in Issue titleAt least three characters, e.g. “AC not cooling”. Submitting with less shows “Describe the issue”.
- 3Category and PriorityCategory is free text with suggestions from categories already in use (default “General”). Priority is High, Medium or Low, Medium unless you change it.
- 4Room (optional) or LocationPick a room, or leave “Not a room” and type a Location such as “Lobby, Pool deck…”. An empty location is saved as “General area”.
- 5Click SubmitThe order gets an M-code and starts in Reported. A notification “Maintenance: AC not cooling” is posted, red for High priority, amber otherwise. The toast reads “Maintenance request created”.
Assigning and working an order
MaintenanceAssign from the Technician cell or the drawer; move status with the drawer buttons, the inline Status cell or the board.
- 1Assign a technicianClick the Technician cell in the list (or the field in the drawer) and pick a person, or External contractor. Any active account can be chosen. Assigning an order that is still Reported moves it to Assigned on its own.
- 2Start workFrom Assigned choose In Progress: or Waiting for Parts if you already know a part is needed. In the drawer these are footer buttons; in the list the Status cell offers “→ In Progress” and “→ Waiting for Parts”; on the board drag the card or click its “→ In Progress” button.
- 3Record what it will cost and whenIn the drawer edit Estimated cost (whole shillings; it feeds the Est. cost tile) and Due (a date). Every edit saves as you leave the field.
- 4Waiting for partsMove to Waiting for Parts while a part is on order. The room stays blocked. When it arrives go back to In Progress, or straight to Completed if the fit is trivial.
- 5CompleteThe purple Completed button in the drawer. The room is unblocked and returns to its normal status. The technician can no longer be changed.
- 6CloseA supervisor checks the work and clicks Closed. From here the order is read-only, “Closed orders are read-only.”: and it cannot be reopened.
Every status change and field edit is written to the audit log with the from/to status and the fields that changed. Moving a card to a column the workflow does not allow shows “Move to an allowed next column on this work order”.
Statuses and what they drive
Six stored statuses; only Completed → Closed and the two parts loops go sideways. Room blocking is derived from status + the toggle.
- Reported → Assigned (assign)
- Assigned → In Progress
- Assigned → Waiting for Parts
- In Progress → Waiting for Parts
- Waiting for Parts → In Progress
- In Progress → Completed
- Waiting for Parts → Completed
- Completed → Closed
- Reported: logged, nobody on it. The only way forward is assigning someone (which happens automatically when you pick a technician).
- Assigned: owned by a technician or an external contractor.
- In Progress and Waiting for Parts: active work; you can bounce between them.
- Completed: repair done. Counts as “Resolved”. Technician is locked; other fields still editable.
- Closed: signed off. Read-only, no reopening. Never shown on the board.
What is derived, not stored
- Open requests = Reported + Assigned + In Progress + Waiting for Parts. In progress tile = In Progress + Waiting for Parts. Resolved = Completed + Closed. Est. cost sums every order's estimate.
- The room's Maintenance status is recomputed after every change: a room is blocked only while an order on it has Room blocked while open switched on and is in one of the four open statuses. Completing or closing the order, or flipping the toggle to Sellable, releases the room automatically.
- Location reads “Room 204” for room orders and the free-text label otherwise.
Work-order fields
What the report dialog asks for and what the drawer lets you edit afterwards.
| Field | Type | Notes |
|---|---|---|
| ID | M-… | Assigned automatically. Search matches it. |
| Issue title * | text 3–120 | What is wrong. Editable in the drawer. |
| Category * | text 2–40 | Free text; the dialog suggests categories already in use. Filterable. |
| Priority | High / Medium / Low | Default Medium. Editable in the list cell and drawer. High open orders feed the “High priority” tile. |
| Room | room | Optional. Fixed once created, the Location cannot be changed from a room to free text later. |
| Location | text ≤ 80 | Used when no room is chosen; “General area” if left blank. Editable in the drawer for non-room orders. |
| Technician | user / External | Any active account, or External contractor. Locked once Completed. |
| Due | date | Optional target date. Saved as midday hotel time. |
| Estimated cost | whole currency units | Defaults to 0. Non-negative integer; the drawer rounds what you type. |
| Room blocked while open | toggle | Only for room orders. On (“Out of service”) by default; “Sellable” keeps the room in the pool. Shown in the drawer only. |
| Status * | enum | Reported → … → Closed as in the diagram. Editable from the list cell (shows only allowed next steps), drawer footer and board. |
Permissions
Rooms View reads; Rooms Edit reports, assigns, edits and moves, including Close. There is no separate Full-only action.
| Role | Rooms |
|---|---|
| Super Admin | Full |
| Hotel Manager | Full |
| Receptionist | Edit |
| Accountant | None |
| Housekeeping Mgr | Full |
| Maintenance | Edit |
| Restaurant Mgr | None |
| HR Manager | None |
| Security | View |
- Rooms View: see the list, board and drawer. Cells show as plain text; the drawer says “You have view-only access to maintenance.”
- Rooms Edit: Report issue, every inline edit, every status move including Completed and Closed.
Default roles with Edit or better: Maintenance, Receptionist, Housekeeping Mgr, Hotel Manager, Super Admin. Security has View. Accountants and HR do not see the module; if they need cost figures, use the Reports module instead.
Tips
Tiles as filters, inline cells, the address bar and live updates.
- Tiles are filters. Click Open requests to hide everything completed or closed; click High priority to stack it with the priority filter. The Status dropdown clears the “open only” tile filter and vice versa.
- Edit without opening. Priority, Technician and Status change straight from the table. A refused change shows a toast and the cell snaps back; Esc cancels an open cell.
- Bookmark a view.
/maintenance?tech=external&status=partsreopens exactly that list. Your List/Board choice is remembered per browser. - Weekly review. Filter Status → Completed and close orders in bulk from the Status cell, one click each.
- Live. Any change by a colleague refreshes your list, tiles and board within seconds; the drawer keeps your place.
- Maintenance has no offline queue, if the connection drops, changes fail with a toast and you retry when it returns. Rooms → Out of service is the offline-capable way to pull a room quickly.
Errors you may see
Two conflicts from the server, both about status; everything else is a validation message.
Cannot move from reported to progressClosed work orders cannot be reopenedWork order not foundRoom not foundClient-side: “Describe the issue” (title under three characters); “Could not create work order” / “Could not update work order” for other failures. A title over 120 characters, a category over 40, or a negative cost is rejected as a 400 validation error before it reaches the server rules.
- Work order
- One maintenance record with an M-code, from Reported to Closed.
- Blocks room
- The toggle that keeps a room out of the sellable pool while its order is open.
- External
- A contractor outside the hotel; the order has no user assigned but counts as Assigned.
- Open work
- Reported, Assigned, In Progress and Waiting for Parts, what the board shows.