# Hotel Management & Room Booking (PMS)

> Hotel management and PMS: reservations that cannot double-sell a room, seasonal rates, a folio billed per night, housekeeping and night audit.

- **What it is:** Hotel management and PMS: reservations that cannot double-sell a room, seasonal rates, a folio billed per night, housekeeping and night audit.
- **For:** Industries
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 149 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_hotel
- **Not for:** Said before you buy, because it is the half that decides whether the app fits:; Sell the same room twice: the database itself refuses overlapping sales, and a room type cannot sell more rooms than it has.; Overbook by accident - only by the number a manager types on the room type.; Sleep more people in a room than it holds.
- **Manual:** https://docs.bambooforge.dev/bambooforge_hotel/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_hotel.action_bf_hotel_arrivals
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_hotel
- **Manual last updated:** 2026-10-15

---
# Hotel Management & Room Booking (PMS)

Two rules decide whether a hotel can use the software at all: a room
cannot be sold twice for the same night, and nobody checks out owing
money that was never written down. Everything here supports those two.

## Reservations

- Guest, dates, room type, and an **optional room number** - a booking
  can be held on the type and get its number at check-in, the way a
  hotel really works.
- **Overlapping sales of the same room are refused** by the database
  itself, with an exclusion constraint over the room and the dates: two
  clerks assigning the same room in the same second cannot both be told
  it was free. A cancelled or no-show booking frees the room
  immediately.
- **Bookings held on a room type are counted too.** Confirming a
  booking checks every night of it against the number of rooms of that
  type, so a hotel cannot quietly sell fourteen doubles it does not
  have. Overbooking is allowed by a number the manager types on the
  room type, never by accident.
- A booking that sleeps more people than the room holds is refused: a
  fire certificate is not a preference.
- **Assign a free room** picks a room of the right type that is
  genuinely free for the whole stay, preferring one that is clean.

## Seasonal rates

The same room is not the same price in August. Rates apply per room
type over a date range with a **minimum stay**, and where two rates
cover a night the lower sequence wins - that is how a promotion beats
the season. A stay that crosses a season is priced **night by night**.

## The folio

- One line per night at *that night's* rate, plus extras and city tax.
- Invoiced in one click; a line that has been invoiced can no longer be
  edited or deleted - corrections belong on the invoice.
- Nights are never posted twice, however often the button is pressed.
- Everything on a folio is a **charge**. Deposits and payments belong
  in Accounting, against the invoice the folio raises, where they are
  reconciled and can be seen.
- Check-out posts the bill, so what the guest is handed has a number on
  it, and every invoice a stay raised is one click from the booking.
  Crediting an invoice makes exactly its charges billable again.

## Housekeeping

Housekeeping is a **separate state from occupancy**, because a room can
be occupied and dirty, or free and not yet cleaned. Checking a guest
into a room housekeeping has not released is refused. Checking out puts
the room back into "dirty" automatically, and a room with a guest in it
cannot be taken out of order.

## Night audit

A scheduled job that does what the night manager used to do at 2am: it
posts the night that has just been slept and turns yesterday's
unarrived bookings into no-shows, so the morning report is true without
anybody staying up. Tonight is not posted, because it has not happened.
The business date is read through the **company's timezone**, so a hotel
at UTC+7 closes its own day and not London's.

A **guaranteed** booking - a card guarantee, a prepayment, a corporate
contract - is never released by the job: a guest on a delayed
connection still has a room at 23:00. A release is stamped and can be
undone with **Reinstate**, which checks whether the room is still
there rather than pretending it is.

## Roles

**Housekeeping** sees the room board and changes room status, and never
sees a rate or a folio. **Reception** books, checks in and out, posts
charges and invoices. The **manager** configures room types and rates.

## Requirements

Odoo Community 16.0, 17.0, 18.0, 19.0 or 20.0 with account and product. No
Enterprise module, no external service.

## How we make sure it works

Before every release, **77 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- A booking the clerk cannot see still blocks the room.
- A room cannot be sold twice.
- A room cannot be sold by a hotel that does not own it.
- A room sold for tonight cannot be taken out of order.
- A room type cannot be sold more often than it has rooms.

The complete list is in the source you receive.

## What it does not do

Said before you buy, because it is the half that decides whether the app fits:

- Sell the same room twice: the database itself refuses overlapping sales, and a room type cannot sell more rooms than it has.
- Overbook by accident - only by the number a manager types on the room type.
- Sleep more people in a room than it holds.

## Install

1. Copy `bambooforge_hotel` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
2. Install **Hotel Management & Room Booking (PMS)**.
3. Open **Hotel** - its menus are Today's desk, Reservations, Room board, Housekeeping.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Discuss, Invoicing, Products, Settings apps. No extra Python package.

****Where does it show up?****

Under the **Hotel** menu (Today's desk, Reservations, Room board, Housekeeping).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.

## Support

[support@bambooforge.dev](mailto:support@bambooforge.dev) - answered within two business days.
OPL-1; one purchase covers one production database plus its staging
copies.
