- Home
- Apps
- SaaS Tools
- Hotel POS & Room-Charge (Folio Post)
Illustrative previewPost hotel F&B, bar & spa POS charges to the guest's room folio for one clean checkout settlement.
Built for Odoo 17/18/19.
What is Hotel POS & Room-Charge (Folio Post)?
Post hotel F&B, bar & spa POS charges to the guest's room folio for one clean checkout settlement. Built for Odoo 17/18/19. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Your restaurant, bar, and spa are earning money all day — but if every outlet settles on its own POS terminal, the guest ends up paying five times and your night auditor reconciles five reports by hand. Hotel POS & Room-Charge (Folio Post) closes that gap. It extends the standard Odoo Point of Sale so a cashier can look up an in-house guest, pick their room, and post the order straight to that guest's folio instead of tendering cash or card at the outlet. At checkout, every F&B, minibar, and spa charge is already sitting on the folio, ready for a single settlement.
This is a build-to-order Odoo module — not an instant download from apps.odoo.com. ECOSIRE designs, builds, installs, and supports it against your property's workflow: your outlets, your PMS or folio model, your posting accounts, and your Odoo edition. Typical delivery is one working week from a scoped kickoff.
Under the hood we add a "Room Charge" payment method to pos.payment.method and a new folio-posting flow built on Odoo's ORM. When a cashier selects Room Charge, an OWL screen extension lets them search in-house guests and rooms; on order validation the module writes a folio line (a custom hotel.folio.line model, or a mapped record in your existing PMS model) linked to the pos.order, stamped with the outlet, the guest, the room, and the posting date. Compute fields (@api.depends) keep the running folio balance live, and a QWeb folio report gives the front desk and the guest an itemized statement at checkout. Access is locked down with ir.model.access.csv plus record rules so a bartender can post to a folio but can't reopen a settled one, and only front-desk or night-audit roles can settle or transfer charges.
Per-outlet revenue posting keeps your accounting clean: each outlet (restaurant, bar, spa, room service) maps to its own analytic tag / income account, so room-charged revenue lands in the right ledger and your night audit balances without spreadsheet gymnastics. Where you run a separate PMS, we wire the folio push over XML-RPC / JSON-RPC (or your PMS's REST API) with idempotent posting and a retry/queue so a dropped network call never double-charges or silently loses a check. Everything is delivered as clean, upgrade-safe module code you own, tested on Odoo 17, 18, and 19, Community or Enterprise.
What you get
- Complete, upgrade-safe Odoo module (source code you own) with __manifest__.py declaring Odoo 17/18/19 compatibility and correct dependencies (point_of_sale + your PMS/folio module)
- Configured Room Charge payment method, outlet-to-account mapping, record rules, and ir.model.access.csv security tuned to your property's roles
- PMS / folio integration wiring (XML-RPC, JSON-RPC, or REST) with idempotent posting, retry queue, and a mapping document for your booking and folio models
- QWeb folio statement report and any POS receipt tweaks, styled to your brand and itemized per outlet
- Installation and deployment on your Odoo environment (staging first, then production) with a smoke-tested end-to-end charge-to-settlement run
- Admin and cashier documentation plus a recorded or live training session for front-desk, F&B, and night-audit staff
- A defined post-go-live support window (bug fixes and adjustments) with an SLA, plus a compatibility check when you upgrade Odoo versions
- Handover package: technical README, test checklist, and a config export so your team can re-deploy or extend the module
Who this is for
F&B / Outlet Manager
Runs the restaurant, bar, and spa POS outlets. Wants staff to post guest charges to rooms in seconds without leaving the POS, and wants each outlet's revenue to show up cleanly under its own center — not lumped into a single anonymous cash drawer.
Front-Desk & Night Audit Lead
Owns checkout and the daily balance. Needs every outlet charge already sitting on the folio so checkout is one settlement, and needs an itemized, tamper-evident statement and a night audit that ties out without manual reconciliation across five POS reports.
Hotel IT / Systems Manager
Responsible for the Odoo and PMS stack. Wants a maintainable, upgrade-safe module that integrates over documented APIs, respects role-based security, and won't double-post or lose charges when the network hiccups between the outlet and the PMS.
Hospitality Group Controller / Owner
Oversees revenue and margins across properties. Wants accurate per-outlet revenue posting into the right ledgers, credit-limit guardrails on room charges, and a clean audit trail for every posted, voided, or transferred charge.
How Hotel POS & Room-Charge (Folio Post) Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Posts POS charges directly to the guest room folio | Yes — Room Charge tender writes a folio line linked to the pos.order, guest, room, and outlet | Possible, but you design and maintain the whole flow yourself | Sometimes, but tied to that vendor's folio assumptions and rarely to your PMS | No — Odoo core POS tenders cash/card/customer account, with no room-folio concept |
| Per-outlet revenue posting to the correct ledger/analytic account | Yes — each outlet maps to its own income account / analytic tag for clean night audit | Only if you build the mapping and posting logic | Often one generic POS account; per-outlet mapping usually not configurable | No — POS revenue posts without hotel outlet segmentation |
| Fits your exact PMS / folio model and workflow | Yes — scoped to your outlets, folio objects, roles, and posting accounts before we build | Yes, but you own all the analysis, build, and rework | No — you adapt your process to the module's fixed design | No |
| Role-based security (post vs. settle/void/transfer) | Yes — ir.model.access.csv + record rules split outlet-staff and front-desk/night-audit rights | You must design and test every rule yourself | Basic groups only; rarely folio-lifecycle aware | Generic POS access groups, no folio settlement controls |
| Safe PMS posting (idempotent, retry, no double-charge) | Yes — idempotent posting with a retry queue over XML-RPC/JSON-RPC or REST | You build and harden the integration and failure handling | Varies; failure modes often undocumented | No PMS posting exists to make safe |
| Ownership, upgrade-safety across Odoo 17/18/19, and support | You own the code; built and tested on 17/18/19 with a support window and upgrade checks | You own it but carry all maintenance and version risk alone | Vendor-controlled; upgrades and fixes depend on their roadmap | Maintained by Odoo, but the feature simply isn't there |
| Delivery model | Build-to-order — ECOSIRE builds, installs, trains, supports (one working week) | In-house or agency project you manage end to end | Instant install, but as-is and generic | Already installed, but no room-charge capability |
Frequently Asked Questions about Hotel POS & Room-Charge
How long does delivery take, and what's the process?
This is a build-to-order module, not an instant download. Typical delivery is one working week from a scoped kickoff. We start by mapping your outlets, folio/PMS model, posting accounts, and roles; build and test on a staging environment against Odoo 17, 18, or 19; then install to production with an end-to-end charge-to-settlement smoke test and staff training. Complex multi-property or custom-PMS integrations may extend the timeline, which we confirm in writing before we begin.
What support and updates do I get after go-live?
Every build includes a defined post-go-live support window with an SLA for bug fixes and adjustments. Because you own the module source, you're never locked in. When you upgrade your Odoo version, we provide a compatibility check and, if needed, a migration pass. Ongoing enhancements and extended support are available under a maintenance agreement that we scope with you.
Does this work with my existing PMS, or only with Odoo's folio?
Both. If you manage folios inside Odoo, we post to a native folio model. If you run a separate PMS, we push charges over XML-RPC / JSON-RPC or your PMS's REST API, with idempotent posting and a retry queue so a network drop never double-charges or loses a check. During scoping we map your booking and folio objects; if your PMS lacks a usable API we'll tell you up front rather than promise an integration we can't deliver.
Which Odoo versions and editions are supported?
Odoo 17, 18, and 19, on both Community and Enterprise. The module extends the standard Point of Sale app, so it works with Odoo's core POS on Community and with Enterprise POS features where you run them. We build and test against your exact edition and version, and the __manifest__.py declares the supported series so upgrades stay predictable.
How do you stop staff from charging the wrong room or posting to a settled folio?
Guest and room lookup at the POS only lists currently checked-in guests, so a cashier can't post to an empty or checked-out room. Security is enforced with ir.model.access.csv and record rules: outlet staff can post charges, but only front-desk and night-audit roles can settle, void, or transfer them, and a settled folio can't be silently reopened. Optional credit-limit guardrails block or warn when a charge would exceed the allowed folio balance, and every action is stamped in an audit log.
How does per-outlet revenue actually post to accounting?
Each outlet (restaurant, bar, spa, room service, minibar) maps to its own income account and/or analytic tag during setup. When a POS order is room-charged, the folio line carries that outlet tag, so revenue lands in the correct ledger and analytic reporting — not in a single undifferentiated POS account. This lets your night audit tie out per revenue center and gives your controller accurate outlet-level margins without spreadsheet cleanup.
Can charges be split or transferred between rooms and group folios?
Yes. The module supports transferring a charge from one folio to another (for example, moving a bar tab onto a group master folio) and splitting a single check across two rooms. Transfers and splits are restricted to authorized roles and are recorded in the audit trail, so the movement of any charge is always traceable at night audit and checkout.
Related Modules

HikVision / Anviz / Suprema Attendance Connector
Vendor-agnostic Odoo connector for HikVision, Anviz, Suprema & Convoy — normalized punches into HR Attendance. Built for you.

HR Appraisal & 360-Degree Reviews
Structured Odoo appraisals and 360-degree feedback with weighted competencies and review workflows — built, installed and supported by ECOSIRE.

HR Payroll for Odoo Community
A build-to-order payroll module for Odoo Community — salary structures, computed payslips, and employee compensation modelled to your own rules. ECOSIRE scopes, builds, installs, and supports it; it is not an instant download.
Hotel POS & Room-Charge
Post hotel F&B, bar & spa POS charges to the guest's room folio for one clean checkout settlement. Built for Odoo 17/18/19.
- Room Charge tender on the POS payment screen — cashier posts an order to a guest folio instead of taking cash or card at the outlet
- In-house guest and room lookup directly at the POS (search by name, room number, or booking reference) with only currently-checked-in guests selectable
- Outlet tagging on every charge (restaurant, bar, spa, room service, minibar) so each line is attributable to its revenue center
- Live folio balance via computed fields (@api.depends) that roll up all posted charges, payments, and adjustments in real time
