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. One-time license from $499.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

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.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
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.
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
One-tap checkout settlement at the front desk — every outlet charge is pre-posted, so the guest pays one balance across all payment methods
Per-outlet revenue posting: each outlet maps to its own income account / analytic tag, so room-charged sales land in the correct ledger for night audit
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 2–4 weeks 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.
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.
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.
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.
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.
Buy the license on ecosire.com and download the Hotel POS & Room-Charge (Folio Post) module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for Hotel POS & Room-Charge (Folio Post), and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| Delivery model | Build-to-order — ECOSIRE builds, installs, trains, supports (2–4 weeks) | In-house or agency project you manage end to end | Instant install, but as-is and generic |
This is a build-to-order module, not an instant download. Typical delivery is 2–4 weeks 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.
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.
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.
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.
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.
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.
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.
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.