What Is Hotel Management Suite?
A single Odoo module that gives you a complete hotel management back-office β from walk-in reservations to Booking.com sync and full accounting integration.
Everything in one install
- Hotel properties & rooms with real-time status
- Reservation lifecycle: Draft β Confirmed β Check-in β Check-out
- Guest profiles with passport, nationality & stay history
- Deposit invoices, final invoices, credit notes & penalty invoices
- Cancellation policies with automatic penalty calculation
- Booking.com two-way sync (availability, rates, pull reservations)
- Per-hotel reservation numbering (e.g.
PLAZA/2026/00001) - Occupancy, ADR, RevPAR and revenue reports
- Real-time admin dashboard with KPI widgets
- Role-based access: Admin Β· Manager Β· Receptionist Β· Finance
Security roles at a glance
| Role | Hotels | Reservations | Invoices | Reports | Config |
|---|---|---|---|---|---|
| Admin | All | All | All | All | Full |
| Manager | Own | Own | Own | Own | Rooms & rates |
| Receptionist | Own | Own | Create & pay | β | β |
| Finance | β | Read-only | Full | All | β |
Installing the Module
Only one module needs to be installed. Everything is bundled inside.
Copy the module to your addons folder
Place the mg_hotel_management folder inside your Odoo custom addons directory (the path configured as addons_path in your odoo.conf).
Update the module list
In Odoo go to , then .
Install Hotel Management Suite
Search for Hotel Management Suite and click Install. Odoo will automatically install all required dependencies (base, mail, account, web, base_setup).
Step-by-Step Configuration
Follow these steps in order. Completing all steps before taking reservations ensures billing, access control and channel sync work correctly from day one.
Configure Global Settings
Navigate to (scroll to the Hotel section).
| Setting | Default | What it controls |
|---|---|---|
| Default Check-in Time | 14:00 | Pre-filled on new properties. Display only β does not block early check-ins. |
| Default Check-out Time | 12:00 | Pre-filled on new properties. |
| Free Cancellation Days | 3 | Global fallback used when a reservation has no cancellation policy assigned. |
| Default Tourist Tax Rate (%) | 0 | Informational reference. The actual tax is set per-property as an account.tax record. |
| Allow Overbooking | Off | When OFF, confirming a reservation on an already-booked room raises an error. When ON, a warning is posted in the chatter instead. |
| Channel Sync Interval (min) | 15 | How often the automatic job syncs with OTA channels. |
Create Hotel Properties
Navigate to
| Field | Required | Notes |
|---|---|---|
| Name | Yes | Full hotel name, e.g. Plaza Hotel Main Branch |
| Code | Yes | Short unique identifier, e.g. PLAZA1. This becomes the prefix for all reservation numbers at this hotel (PLAZA1/2026/00001). Cannot be changed later without renumbering. |
| Company | Yes | Link to an Odoo company. For a legally separate entity create a dedicated company first. Each company has its own accounting, currency and users. |
| Timezone | Yes | Used for check-in/out time display and OTA date calculations. |
| Check-in / Check-out Time | No | Property-level override of the global default. |
| Property Manager | No | Automatically granted the Hotel Manager security role and added to this company. |
| Allowed Users | No | Receptionists and staff. Automatically granted Receptionist role and company access on save. |
CODE/YEAR/00001. Each hotel's counter is independent.
Set Up Amenities
Navigate to
Amenities are services or features that can be attached to room types or added individually to reservations.
| Field | Description |
|---|---|
| Name | e.g. Breakfast, Wi-Fi, Parking, Airport Transfer |
| Price | Additional charge per reservation. Set to 0.00 for included amenities. |
| Is Included | When checked, this amenity appears on reservations but does NOT add a charge to the invoice (e.g. free Wi-Fi). |
| Icon | Font-Awesome icon class for display purposes (e.g. fa-wifi). |
Create Room Types
Navigate to
Room types define the category of room (Standard, Superior, Deluxe, Suite, etc.) and set the base pricing.
| Field | Description |
|---|---|
| Property | Which hotel this room type belongs to. |
| Name | e.g. Standard Double, Deluxe Suite |
| Code | Short code used in channel sync mappings (e.g. STD, DLX). |
| Base Price per Night | Default nightly rate. Pre-fills every new reservation for rooms of this type. Can be overridden per reservation. |
| Capacity | Maximum number of guests. |
| Amenities | Amenities included for this type (e.g. Wi-Fi, Breakfast). These appear automatically on reservations for this room type. |
Create Rooms
Navigate to
Each room is a physical bookable unit associated with a property and room type.
| Field | Description |
|---|---|
| Property | The hotel this room belongs to. |
| Room Number / Name | e.g. 101, 205, Penthouse. Must be unique per property. |
| Room Type | Links the room to a room type and its pricing/amenities. |
| Floor | Floor number for housekeeping reference. |
| Capacity | Overrides the room type default if this specific room fits fewer or more guests. |
| Status | Available / Occupied / Maintenance / Blocked. Updated automatically by the reservation workflow. Can also be changed manually with the header buttons. |
| Extra Amenities | Room-specific extras on top of what the room type provides (e.g. a particular room has a balcony jacuzzi). |
Configure Billing Per Property
Open a property form and go to the Billing tab.
| Field | Description |
|---|---|
| Tourist Tax | Select an account.tax record (set up first in Accounting β Taxes). This tax is applied as a separate line on every invoice for this property. |
| Room Revenue Account | The income account used for room charge invoice lines. Must be of type Income or Income Other. |
| Default Deposit (%) | Percentage of total price required at booking (default 30%). Pre-fills new reservations and can be overridden per reservation. |
| Default Cancellation Policy | Automatically applied to new reservations at this property. Can be overridden per reservation. |
Create Cancellation Policies
Navigate to
| Penalty Type | Behaviour when free window expires |
|---|---|
| No Penalty | Cancellation is always free, regardless of timing. |
| Percentage | A percentage of the total reservation price is invoiced automatically on cancellation. |
| Fixed Amount | A fixed monetary amount is invoiced on cancellation. |
| No Refund | 100% of the total price is invoiced (full forfeit). |
Set Up OTA Channel Sync (optional)
Navigate to
- Select the Property and Channel Provider (e.g. Booking.com).
- Enter the External Property ID β your hotel ID on the channel's extranet.
- Enter your API Username and API Password from the channel.
- Keep Sandbox Mode ON during testing. Switch it OFF for production.
- Add Room Mappings: for each Odoo Room Type, enter the Channel Room Type ID and Rate Plan ID from the channel's extranet.
- Set Active to ON and save.
- Click Test Connection to verify the credentials.
- Click Pull Reservations Now to do an initial import of existing bookings.
Assign Administrator and Finance Users
The Hotel Administrator and Hotel Finance roles must be assigned manually, as they grant cross-property access.
Navigate to . Open a user record and in the Access Rights tab find the Hotel section:
| Role | When to assign |
|---|---|
| Hotel / Administrator | Group owner, general manager, or anyone who needs to create/delete properties and see all hotels. |
| Hotel / Finance | Accountants who need read-only reservation access plus full invoice and report access across all companies. |
Receptionist Guide
Everything a receptionist needs to handle walk-ins, phone bookings, check-ins and check-outs.
Creating a Reservation
Navigate to
Select the Guest
Type the guest's name in the Guest field. If they have stayed before, select their record β all previous stays are visible on their profile. For a new guest, click Create and Edit to fill in their passport/ID, nationality, date of birth and gender before saving.
Select Property, Room and Dates
Choose the Property first β this filters the available rooms. Then select the Room. The Price per Night is automatically filled from the room type's base price. Enter Check-in and Check-out dates β the number of Nights and Total update instantly.
Add Extra Services
In the Extra Services tab, add any amenities the guest wants (airport transfer, breakfast, spa access, etc.). Amenities flagged as Is Included add no charge. Others are summed in the Extra Services field and added to the total.
Set Booking Source
Choose the Source: Direct, Phone, Walk-in, Email, Booking.com, or Other. This feeds into occupancy and revenue reports to show which channel generates the most business.
Confirm the Reservation
Click the Confirm button in the header. The reservation number (e.g. PLAZA1/2026/00042) is assigned, the room status changes to Occupied, and the OTA channel receives an updated availability push.
Check-In Workflow
Find the reservation
Go to . Use the Arriving Today filter to see only guests due today. Or use the Availability Calendar view for a visual overview.
Create Deposit Invoice (optional)
If your property requires a deposit, click Deposit Invoice in the header. An invoice for the deposit amount (Total Γ Deposit %) is created and linked. Open it, confirm it, and register payment.
Click Check-in
Click the Check-in button. This is only available on or after the scheduled check-in date. The reservation moves to Checked-in state.
Check-Out & Invoicing
Open the reservation
Use the Departing Today filter in to find guests checking out today.
Create the Final Invoice
Click Invoice in the header. The system generates an invoice with:
- One line: Room Γ N nights Γ price per night (with tourist tax if configured)
- One line per paid extra amenity
- One negative deduction line for any existing deposit invoice
Open the invoice, confirm it, and register payment from the guest.
Click Check-out
Click the Check-out button. The room status automatically changes back to Available.
Handling Cancellations
- Open the reservation and click Cancel. A confirmation dialog appears.
- Confirm. If a penalty applies, the invoice is created automatically and shown in the Invoices tab.
- The reservation state becomes Cancelled and the room is freed.
- To re-use the same record (e.g. guest rebooks), click Reset to Draft.
No-Show
If a confirmed guest does not arrive, click No-show. The room is freed. No automatic penalty invoice is created β handle billing manually if needed.
Guest Profiles
Navigate to to see all guests who have at least one reservation. Click any guest to open their Odoo contact record, which shows:
Document number for check-in registration compliance.
For guest registration forms required by local authorities.
All past and future reservations across all properties.
VIP preferences, allergies, special requests β visible to all staff.
Availability Calendar
Navigate to for a month-view calendar of all reservations. Reservations are color-coded by room type. Click any entry to open the reservation form.
Hotel Manager Guide
Managers see all reservations and data for their assigned property and can access pricing, reports and channel sync.
Dashboard
Navigate to . The dashboard shows real-time KPIs across all properties you manage:
Total active reservations arriving today.
Guests in Checked-in state today.
Guests checking out today.
Occupied rooms Γ· total active rooms Γ 100, live.
Next 7 days β guest name, room type, dates.
Revenue per night for the current week across all active stays.
Revenue ranking of your properties for the current month.
Last 5 hotel invoices with payment status.
Click Refresh in the top-right of the dashboard to reload the data at any time.
Managing Room Rates
Navigate to . Open a room type and edit the Base Price per Night. This new price takes effect on all reservations created after the change. Existing reservations keep their original price unless manually edited.
Managing Rooms
Use the header buttons on any room form to change its status:
| Button | New Status | When to use |
|---|---|---|
| Set Available | Available | After maintenance is complete or to unblock a room. |
| Send to Maintenance | Maintenance | Room is being repaired or cleaned and cannot be booked. |
| Block | Blocked | Permanently out of service (e.g. owner suite). |
Occupancy & Revenue Reports
Navigate to . All reports are SQL-based views that update in real-time.
| Report | What it shows | Best used for |
|---|---|---|
| Occupancy Report | Per-day: occupied rooms, total rooms, occupancy %, revenue, ADR, RevPAR per property and room type. | Weekly/monthly performance review, seasonal trend analysis. |
| Revenue Report | Per-month: reservation count, nights sold, room revenue, amenity revenue, total revenue per property and source. | Monthly financial summary, channel contribution analysis. |
Use the Pivot, Graph and List view toggles to change how data is displayed. Apply the Group By filters (property, month, room type, booking source) to drill down.
ADR (Average Daily Rate) = total room revenue Γ· rooms sold on that day.
RevPAR (Revenue per Available Room) = ADR Γ occupancy rate. Higher RevPAR means you are filling rooms at a good price.
Channel Manager
Navigate to . Open your channel config to:
- Click Pull Reservations Now to immediately import bookings from the channel.
- Click Push Availability to immediately send current room availability.
- Click Push Rates to immediately push current prices.
- Click Test Connection to verify your API credentials are working.
The Sync Logs tab shows every operation with timestamp, direction, status and the full API payload for debugging.
Finance Team Guide
Finance users have read-only access to reservations and full access to all invoices and reports.
Invoice Types
| Invoice Type | Created by | When | Contents |
|---|---|---|---|
| Deposit Invoice | Receptionist / Manager | After confirmation, before check-in | One line: Deposit amount = Total price Γ Deposit % |
| Final Invoice | Receptionist / Manager | After check-in or at check-out | Room nights + amenities + tourist tax β deposit deduction |
| Full Invoice | Receptionist / Manager | Any confirmed/checked-in/checked-out state | Room nights + amenities + tax (no deposit split) |
| Penalty Invoice | System (automatic) | On cancellation when policy penalty applies | Penalty amount per the cancellation policy |
| Credit Note | Receptionist / Manager | When a refund is needed | Full reversal of the reservation amount |
Price Calculation Reference
Finding Invoices
All hotel invoices are standard Odoo invoices and appear in both:
- Accounting β Customers β Invoices β the standard Odoo invoice list (all companies).
- Reservation form β Invoices tab β invoices linked to a specific stay.
Filter by mg_hotel_reservation_id is set in the accounting list to see only hotel invoices.
Revenue Reports
Navigate to . Finance users have access to all properties. Use the month grouping and pivot view to build monthly summaries by property, room type or booking source. Export to Excel with the standard Odoo download button.
Administrator Guide
Admins have unrestricted access across all hotels, companies and configuration options.
Adding a New Hotel to the Network
- Create a new Odoo Company for the hotel if it is a separate legal entity (Settings β Companies β New).
- Go to .
- Fill in Name, Code (unique, becomes the reservation prefix), and Company.
- Assign a Property Manager and any Allowed Users.
- Save β the reservation sequence is created automatically.
- Add Room Types, Rooms, Cancellation Policies and Billing settings (Steps CβF in the Setup Guide).
- Optionally set up a Channel Config for OTA sync (Step G).
Changing a Property Code
To change the code: open the property form, edit the Code field and save. The sequence prefix updates automatically.
Assigning Cross-Property Roles
Navigate to . Open the user and assign:
- Hotel / Administrator β for general managers and system administrators who need access to all hotels.
- Hotel / Finance β for accountants who manage invoices across all properties.
Receptionist and Manager roles are always managed via the Property form, not here.
Multi-Company Architecture
Each hotel has its own Odoo company β own currency, chart of accounts, bank accounts, and P&L. Managers only see their company's data.
Multiple hotels can share one company. Useful for branches of the same legal entity. Access is then controlled by the Property's Allowed Users list.
Each property gets its own sequence regardless of company structure. PLAZA1/2026/00001 and PLAZA2/2026/00001 can both exist simultaneously.
Webhook Endpoint (Real-time OTA Push)
For OTAs that support real-time push notifications (instead of polling), the module exposes a public endpoint:
The channel config ID is visible in the URL when you open the channel config form in Odoo. Provide this URL to the OTA in their extranet's webhook settings.
Common Issues & Solutions
| Symptom | Cause | Solution |
|---|---|---|
| "Cannot confirm β room already booked" | Overbooking protection is active and another confirmed reservation overlaps. | Choose a different room or date. Or enable Allow Overbooking in Settings (not recommended). |
| Reservation number shows "New" after saving | No sequence found for this property β the property code may have been set after installation. | Go to the property form and re-save it. The sequence is created on save. Upgrade the module if the property existed before this feature was added. |
| Cannot check in β button is greyed out | Check-in date is in the future. | Check-in is only allowed on or after the scheduled check-in date. Adjust the date or wait. |
| Channel sync fails / error in Sync Logs | Wrong API credentials or the channel is in maintenance. | Click Test Connection on the channel config. Verify the API username, password and hotel ID in the channel's extranet. Check Sandbox Mode setting. |
| Duplicate reservations from OTA | Should not happen β deduplication is based on External Reservation ID. If it does, the channel sent a new ID for the same booking. | Check the OTA extranet for the reservation IDs. Cancel the duplicate in Odoo. Contact channel support. |
| Cancellation penalty not created | No cancellation policy assigned to the reservation, or the free cancellation window has not expired yet. | Check the Cancellation Policy field on the reservation and the Free Cancellation Days on the policy. If the window is still open, no penalty applies. |
| User cannot see the Hotel menu | User has no hotel security role. | Add the user as Property Manager or Allowed User on a property form and save. Or assign Hotel / Administrator or Hotel / Finance manually in Settings β Users. |
| Invoice has wrong account or missing tax | Property's Billing tab is not configured. | Open the property form β Billing tab. Set Room Revenue Account and/or Tourist Tax. |
| Room stays "Occupied" after checkout | Checkout was done outside the workflow (e.g. direct DB edit). | Open the room form and click Set Available manually. |
Menu Map
| Menu Path | What you find there | Who can access |
|---|---|---|
| Hotel β Dashboard | Live KPI dashboard | Manager Admin |
| Hotel β Hotels | Kanban of properties you have access to | All roles |
| Hotel β Reservations | List / Kanban / Calendar of reservations | Receptionist Manager Admin |
| Hotel β Availability Calendar | Month calendar view of all reservations | Receptionist Manager Admin |
| Hotel β Guests | All contacts with at least one reservation | Receptionist Manager Admin |
| Hotel β Reports β Occupancy | Daily occupancy %, ADR, RevPAR per property | Manager Admin |
| Hotel β Reports β Revenue | Monthly revenue breakdown per property and source | Finance Manager Admin |
| Hotel β Configuration β Properties | Create / edit hotel properties | Admin |
| Hotel β Configuration β Room Types | Pricing and amenities per room category | Manager Admin |
| Hotel β Configuration β Rooms | Individual bookable rooms and their status | Manager Admin |
| Hotel β Configuration β Amenities | Services and extras that can be added to reservations | Manager Admin |
| Hotel β Configuration β Cancellation Policies | Penalty rules applied at cancellation time | Manager Admin |
| Hotel β Configuration β Channel Manager β Channel Configurations | OTA credentials, room mappings and manual sync triggers | Manager Admin |
| Hotel β Configuration β Channel Manager β Sync Logs | Full log of all OTA sync operations | Receptionist Manager Admin |
| Settings β Hotel Management | Global defaults (check-in times, overbooking, tax rate, sync interval) | Admin |
Need help or a custom feature?
We provide installation support, customisation and training for Hotel Management Suite.
info@mgvisionary.com Β· mgvisionary.com
Hotel Management Suite v19.0.1.0.0 Β· OPL-1 License Β· MG-Visionary
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Lines of code | 3161 |
| Technical Name |
mg_hotel_management |
| License | OPL-1 |
| Website | https://mgvisionary.com |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module