Skip to main content
POS Spa & Salon Management — A build-to-order Odoo module that turns the Point of Sale into a full salon and spa register — s — 1/1Illustrative preview

A build-to-order Odoo module that turns the Point of Sale into a full salon and spa register

— service and retail sales in one ticket, stylist/therapist assignment per line, appointment booking, and automated per-staff commission tracking.

ECOSIRE scopes, builds, installs, and supports it for Odoo 17, 18, or 19.

What is POS Spa & Salon Management?

A build-to-order Odoo module that turns the Point of Sale into a full salon and spa register — service and retail sales in one ticket, stylist/therapist assignment per line, appointment booking, and automated per-staff commission tracking. ECOSIRE scopes, builds, installs, and supports it for Odoo 17, 18, or 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

Extends `pos.order.line` with a service-provider (stylist/therapist) field so every service line records who delivered it, distinct from the cashier at the register
`service.commission.rule` model resolving rate by employee, service category, or specific service — flat or percentage — with priority ordering when multiple rules match
Commission amounts on a `@api.depends` compute field that recalculates live as lines, discounts, and quantities change on the open ticket
Mixed service-and-retail tickets: timed services and shelf products ring up on one `pos.order` with correct tax and commission treatment per line
POS-side booking panel (OWL) that pulls a calendar appointment onto the active order, auto-stamping assigned staff and expected service duration
Chair/room modelled as a schedulable resource with ORM-level double-booking prevention rather than front-desk convention
Service duration captured per service so utilisation and turnaround can be reported per chair, room, or staff member
Nightly `ir.cron` automated action that closes confirmed tickets into commission lines for payout, idempotent on re-run
QWeb payout report per employee for a selected period, plus a manager summary across all staff
`ir.model.access.csv` and record rules so stylists see only their own commissions while managers see the whole store
Optional `hr.payslip` input integration on Enterprise; Community exports commission data via JSON-RPC/XML-RPC to external payroll
Walk-in support that creates an on-the-fly service line and assigns staff without requiring a pre-existing calendar booking
Session and shift reporting that ties each ticket to the POS session and the serving employee for end-of-day reconciliation
Configurable receipt/QWeb ticket showing service, assigned staff, and duration for customer transparency

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 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

Salons, spas, and barbershops sell two very different things through one till: timed services delivered by a specific person, and retail products off the shelf. Out of the box, Odoo POS treats every line as an anonymous product sale. There is no concept of which stylist performed a colour treatment, no link between the walk-in at the register and the appointment on the calendar, and no way to compute what each therapist earned from their bookings. Owners end up reconciling commissions in a spreadsheet at month-end, front-desk staff double-key appointments into POS, and there is no clean report of chair or room utilisation. Odoo Appointments and the Enterprise Field Service / Planning apps get partway there, but none of them push staff, service duration, and commission logic into the POS ticket itself.

This module is built to close that gap inside your database. We extend pos.order.line with a service-provider field so every service line carries the stylist or therapist who delivered it, and we add a service.commission.rule model (models.Model) that resolves the correct rate per employee, per service category, or per individual service — flat amount or percentage, computed on a @api.depends-driven field so totals recalculate live as the ticket changes. Bookings from the calendar surface in a POS-side panel (OWL component in the POS UI) so a front-desk agent can pull an appointment straight onto the active order, which stamps the assigned staff and expected duration automatically. Chair/room availability is modelled as a schedulable resource so double-booking is blocked at the ORM level, and a nightly ir.cron automated action rolls confirmed tickets into commission lines that feed a QWeb payout report per employee. Access is governed by ir.model.access.csv plus record rules so a stylist sees only their own commission figures while a manager sees the full store.

Everything is delivered as a proper Odoo addon with a clean __manifest__.py, migrations where schema changes touch existing data, and no core-file edits — it installs alongside standard point_of_sale and inherits rather than overwrites. Where you already run Appointments or HR, we wire into those models instead of duplicating them; commission payouts can flow to hr.payslip inputs on Enterprise or export via the JSON-RPC/XML-RPC API to your payroll of choice on Community. We build to your exact service menu, commission scheme, and receipt layout rather than shipping a rigid one-size template.

Because this is build-to-order, nothing is a pre-packaged download. After a short scoping call we confirm the exact commission rules, booking flow, and reporting you need, then build against your target version — Odoo 17.0, 18.0, or 19.0, Community or Enterprise. Typical delivery is one working week from confirmed scope. You get the module validated on a staging copy of your database first (UAT), then a supervised go-live with a rollback plan, the full source in a git repository you own, and a post-go-live support window.

What you get

  • Installable Odoo addon source code targeted to your version (17.0, 18.0, or 19.0) and edition (Community or Enterprise)
  • Installation and configuration on your environment, including commission rules, service menu mapping, and receipt layout
  • Technical documentation: model/field reference, security matrix, and any migration notes
  • End-user guide plus a live training session for front-desk, managers, and stylists
  • UAT on a staging copy of your database with a signed-off test script before go-live
  • Supervised go-live with a documented rollback plan
  • Post-go-live support window for defect fixes and configuration adjustments
  • Handover of the full source in a git repository you own

Who this is for

Independent salon or spa owner

Runs one or two locations on Odoo POS and loses hours each month hand-calculating stylist commissions in a spreadsheet. Needs staff-attributed tickets and an automatic payout report they can trust.

Multi-chair barbershop or franchise manager

Manages a rotating roster where each barber has a different commission split. Needs per-employee, per-service rules and record-level access so each staffer sees only their own numbers.

Front-desk / reception lead

Juggles walk-ins and the appointment calendar simultaneously. Needs bookings to flow straight into POS with the right therapist and duration so they stop double-keying and stop double-booking chairs.

Odoo partner or in-house admin

Owns the Odoo instance and wants a clean, inheritance-based addon with proper access rules and a git handover — not a core-hacked module they can't upgrade.

How POS Spa & Salon Management Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Staff attribution on POS ticketStylist/therapist stamped per service line, distinct from cashierPossible but you design and build the modelOften a single salesperson field, not per-lineNo provider concept — anonymous product lines
Commission calculationRules by employee/category/service, flat or %, live computeWhatever you spec and pay to buildFixed scheme, limited rule granularityNone — reconciled manually in spreadsheets
Appointment-to-POS flowBooking pulled onto ticket with staff and duration auto-stampedBespoke integration effortRarely bridges calendar into POSAppointments and POS stay separate
Chair/room double-bookingBlocked at ORM level via schedulable resourceYou build the constraint logicUsually not modelledNo resource scheduling in POS
Payout reportingPer-employee QWeb report + manager summary via nightly cronReport built to orderBasic or generic exportManual spreadsheet reconciliation
Access controlRecord rules — stylists see only their own figuresYou define and test the security matrixOften all-or-nothing visibilityStandard POS groups, no per-staff scoping
Version & edition fitBuilt to your 17/18/19, Community or EnterpriseDepends on your team's Odoo depthMay lag new versions or need EnterpriseCore only, no salon logic
Ownership & supportFull source in your git repo + support windowYou own it but carry all maintenanceVendor-locked, per-seat or annual feesCommunity support only

Frequently Asked Questions about POS Spa & Salon Management

Is this an existing app I can download and install right now?

No. This is a build-to-order module. ECOSIRE builds it against your exact service menu, commission scheme, and Odoo version after we confirm scope with you. There is no instant download — you receive tested source code, installation, and support.

How long does delivery take?

Typically one working week from confirmed scope. The initial scoping call locks down commission rules, booking flow, and reporting; the timeline depends mainly on how custom your commission logic and receipt layout are. We give you a firm date once scope is signed off.

Which Odoo versions and editions does it support?

We build for Odoo 17.0, 18.0, or 19.0, Community or Enterprise. On Enterprise we can wire commissions into `hr.payslip` inputs and integrate with Appointments; on Community we deliver the equivalent flow and export payout data via the JSON-RPC/XML-RPC API to your payroll tool.

How is commission actually calculated?

A `service.commission.rule` model resolves the applicable rate by employee, service category, or specific service — as a flat amount or a percentage — with defined priority when multiple rules match. Amounts compute live on the ticket via an `@api.depends` field, and a nightly `ir.cron` closes confirmed tickets into payout lines feeding a per-employee QWeb report.

Will it interfere with our existing POS or need core edits?

No core-file edits. The module inherits and extends standard `point_of_sale` models rather than overwriting them, so it installs alongside your current setup and stays upgrade-friendly. We validate it on a staging copy of your database before touching production.

What about ongoing support and updates?

Every build includes a post-go-live support window for defect fixes and configuration tweaks. Because you receive the full source in a git repository you own, you can maintain it yourself or engage ECOSIRE for version upgrades and enhancements later.

Can stylists see each other's commission figures?

No. Access is enforced with `ir.model.access.csv` plus record rules — a stylist sees only their own commission lines and payout report, while managers get the full store view. The security matrix is documented and reviewed with you during UAT.

Request a quote

POS Spa & Salon Management

A build-to-order Odoo module that turns the Point of Sale into a full salon and spa register — service and retail sales in one ticket, stylist/therapist assignment per line, appointment booking, and automated per-staff commission tracking. ECOSIRE scopes, builds, installs, and supports it for Odoo 17, 18, or 19.

  • Extends `pos.order.line` with a service-provider (stylist/therapist) field so every service line records who delivered it, distinct from the cashier at the register
  • `service.commission.rule` model resolving rate by employee, service category, or specific service — flat or percentage — with priority ordering when multiple rules match
  • Commission amounts on a `@api.depends` compute field that recalculates live as lines, discounts, and quantities change on the open ticket
  • Mixed service-and-retail tickets: timed services and shelf products ring up on one `pos.order` with correct tax and commission treatment per line

Request a Quotation

Tell us about your POS Spa & Salon Management requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.