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 $299.00 USD; request a quote for a scoped proposal.

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.
Sin pago ahora. Esto envía una solicitud de presupuesto a nuestro equipo; te responderemos por correo con precios y próximos pasos.
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.
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
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 2 to 4 weeks 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.
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.
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.
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.
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.
Compre la licencia en ecosire.com y descargue el módulo ZIP POS Spa & Salon Management desde el panel de su cuenta.
Extraiga el ZIP en su carpeta de complementos personalizados de Odoo en el servidor (o cárguelo a través de Aplicaciones > Instalar desde archivo en Odoo.sh/runbot).
Active el modo de desarrollador, abra Aplicaciones, haga clic en Actualizar lista de aplicaciones, busque POS Spa & Salon Management y presione Instalar.
Abra el nuevo menú, pegue su clave de licencia de ECOSIRE, conecte cualquier credencial externa (Shopify, Amazon, Stripe, etc.) y guarde.
Ejecute la prueba de conexión integrada, sincronice sus primeros 10 registros y programe el cron recurrente. Póngase en contacto con el soporte si algo falla.
| Criterio | ECOSIRE | Construcción personalizada | Competidor | Odoo Nativo |
|---|---|---|---|---|
| Staff attribution on POS ticket | Stylist/therapist stamped per service line, distinct from cashier | Possible but you design and build the model | Often a single salesperson field, not per-line | |
| Commission calculation | Rules by employee/category/service, flat or %, live compute | Whatever you spec and pay to build | Fixed scheme, limited rule granularity | |
| Appointment-to-POS flow | Booking pulled onto ticket with staff and duration auto-stamped | Bespoke integration effort | Rarely bridges calendar into POS | |
| Chair/room double-booking | Blocked at ORM level via schedulable resource | You build the constraint logic | Usually not modelled | |
| Payout reporting | Per-employee QWeb report + manager summary via nightly cron | Report built to order | Basic or generic export | |
| Access control | Record rules — stylists see only their own figures | You define and test the security matrix | Often all-or-nothing visibility | |
| Version & edition fit | Built to your 17/18/19, Community or Enterprise | Depends on your team's Odoo depth | May lag new versions or need Enterprise | |
| Ownership & support | Full source in your git repo + support window | You own it but carry all maintenance | Vendor-locked, per-seat or annual fees |
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.
Typically 2 to 4 weeks 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.
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.
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.
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.
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.
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.
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.