Skip to main content
POS Product Multiple UOM — A build-to-order Odoo Point of Sale extension that lets your cashiers sell the same product in mul — 1/1Illustrative preview

A build-to-order Odoo Point of Sale extension that lets your cashiers sell the same product in multiple units of

measure — piece, box, pack, kg — with automatic price and inventory conversion at the register.

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

What is POS Product Multiple UOM?

A build-to-order Odoo Point of Sale extension that lets your cashiers sell the same product in multiple units of measure — piece, box, pack, kg — with automatic price and inventory conversion at the register. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17, 18, or 19 environment. 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

Adds a per-order-line unit-of-measure selector to the POS register (OWL component) that lists only UoMs sharing the product's uom.category, so conversions stay valid
Live recomputation of unit price and line total the instant a cashier switches units, without leaving the order screen
Per-UoM pricing model: derive each unit's price from the base UoM via the standard conversion factor, or override with an explicit price resolved against the active pricelist
Sold quantity is converted to the product's base UoM before the stock.move is generated, so one inventory pool is decremented regardless of the unit rung up
Extends product.template / product.product with a configurable set of sellable UoMs, constrained to a single uom.category by an @api.constrains validation
POS session preloads allowed UoMs and conversion factors via load_pos_data / _loader_params so unit switching works fully offline
Chosen UoM written back to pos.order.line so it flows correctly into invoicing, delivery, and accounting entries
QWeb receipt templates show the actual unit sold (e.g. '2 Box') instead of a base-unit-only line
POS order and sales reporting expose margin and quantity by unit of measure for auditable per-unit analysis
ir.model.access.csv access rights and record rules added for any new models, scoped to POS and inventory roles
Optional barcode-per-unit support so scanning a case barcode auto-selects the case UoM at the till
Respects rounding precision from the UoM definition so fractional-unit sales (kg, litre) total correctly
Version-pinned addon with a clean __manifest__.py, delivered for your exact Odoo 17.0, 18.0, or 19.0 line and validated on Community or Enterprise
Compatible with existing POS customizations via targeted patch/inherit rather than core overwrites, reducing upgrade friction

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

Retail and wholesale teams running Odoo Point of Sale hit a wall the moment they need to sell one product in more than one unit. Odoo's core POS is built around a single sale unit per product: the register shows the product, adds a quantity, and prices it at the product's base UoM. But real counters sell water by the bottle and by the 24-pack, cheese by the piece and by the kilo, hardware by the each and by the carton. Native Odoo forces a workaround — separate product variants, duplicate SKUs, or manual price math at the till — and every workaround fragments inventory, breaks reporting, and slows down the line. The uom.uom and uom.category framework exists in the backend, but the POS session simply doesn't expose it at point of sale.

This is a build-to-order module that ECOSIRE designs and develops for your specific catalog and register workflow. On the data side we extend product.template/product.product to declare which UoMs a product can be sold in (constrained to a single uom.category so conversions stay mathematically valid), with per-UoM pricing that either derives from the base price via the standard conversion factor or is overridden through a dedicated price model resolved against the customer's pricelist. On the POS side we ship a front-end extension (OWL components and a patched PosStore/order-line model in Odoo 17/18/19, replacing the legacy Backbone POS in older lines) that adds a UoM selector to each order line, recomputes unit price and line total live as the cashier switches units, and writes the chosen UoM back onto the pos.order.line so it flows correctly into stock moves and invoicing.

Technically, everything is wired to keep a single source of truth for inventory. When a line is sold in a non-base unit, the module converts the quantity to the product's base UoM before the stock.move is created, so one physical stock pool is decremented no matter which unit was rung up — no duplicate SKUs, no drift between the shop-floor count and the accounting count. We load the allowed UoMs and conversion factors into the POS session via the standard _loader_params/load_pos_data hooks so the register works offline, add ir.model.access.csv entries and record rules for any new models, and surface the sold unit on receipts through QWeb and in POS reporting so margin-by-unit is auditable. The build is delivered as a clean, versioned addon with its own __manifest__.py, pinned to your exact Odoo 17.0, 18.0, or 19.0 line and validated against Community or Enterprise as you run it.

Delivery is build-to-order, not an instant download. After a short scoping call we confirm your UoM categories, pricing rules, receipt and reporting needs, and target Odoo version, then send a fixed quote and a UAT plan. Typical delivery is one working week from confirmed scope, ending with installation on your staging environment, user acceptance testing, a rollback plan, and a supported go-live. Pricing starts from $999 (indicative, single-company base scope); multi-company registers, custom per-UoM pricelist logic, barcode-per-unit scanning, and integration with existing inventory or loyalty customizations increase the quoted scope.

What you get

  • Installable source code for your version — a clean, versioned Odoo addon pinned to your 17.0 / 18.0 / 19.0 line
  • Installation and configuration on your staging environment, including UoM categories and per-product sellable units
  • Technical documentation: model changes, POS extension points, access rules, and manifest/dependency notes
  • End-user guide plus a live training session for cashiers and POS managers
  • Post-go-live support window for defect fixes and configuration questions
  • UAT on staging with a signed-off test script, plus a documented rollback plan
  • Git repository handover with full commit history and tagged release
  • Receipt and reporting configuration so the sold unit appears on printed receipts and in POS analytics

Who this is for

Wholesale / cash-and-carry operator

Sells the same product loose and by the case at the counter and needs one SKU, one inventory pool, and correct per-unit pricing without cashiers doing mental math.

Grocery & convenience retailer

Runs high-volume registers on Odoo POS and needs cashiers to switch a line between piece, pack, and box instantly while stock stays accurate to a single count.

Odoo administrator / ERP manager

Owns the Odoo instance and wants the UoM logic implemented cleanly via inherit/patch, with proper access rules and no duplicate-variant sprawl that breaks reporting.

Finance / inventory controller

Needs margin and stock to reconcile no matter which unit was sold, with the actual unit visible on receipts and in POS reporting for audit.

How POS Product Multiple UOM Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Sell one product in multiple units at the registerBuilt for your exact workflow with a per-line UoM selectorAchievable but you fund all design and edge casesGeneric selector, may not match your pricing rulesNot supported — one sale unit per product
Inventory accuracy across unitsConverts to base UoM before stock.move; single poolDepends on your team getting conversion logic rightUsually handled, but conversion depth variesRequires duplicate variants that fragment stock
Per-UoM pricing and pricelist logicDerived or overridden price resolved against pricelistYou build and maintain the pricing modelFixed to the module author's pricing assumptionsOnly base-UoM price at POS
Fit to your Odoo version & editionPinned to your 17/18/19 line, Community or EnterpriseYours to target, but you own version driftSupports listed versions; upgrades on their scheduleN/A — capability absent
Delivery modelScoped quote, one working week, UAT + rollback + go-liveOpen-ended internal or contractor timelineInstant install, but integration is your problemImmediate, but the feature does not exist
Support & ownershipSupport window plus full git repo handoverOnly whoever wrote it can maintain itVendor support tiers; you rarely own the codeStandard Odoo support, feature not covered
Receipts & reporting by unitQWeb receipts and POS reporting show the sold unitExtra work to wire into receipts and reportsSometimes included, often base-unit onlyBase unit only
Upgrade frictionTargeted inherit/patch to minimize core conflictsQuality depends on your engineering disciplineDepends on how invasively it patches coreNone — but no feature either

Frequently Asked Questions about POS Product Multiple UOM

Is this an existing app I can download and install today?

No. This is a build-to-order module that ECOSIRE designs, builds, installs, and supports for your specific catalog, pricing rules, and Odoo version. It is a productized service, not an off-the-shelf download.

How long does delivery take?

Typical delivery is one working week from confirmed scope. After a scoping call we lock the UoM categories, pricing logic, receipt/reporting needs, and target Odoo version, then build, run UAT on staging, and support go-live. Timeline scales with complexity such as multi-company or custom pricelist rules.

How does pricing and scoping work?

Pricing starts from an indicative $999 for a single-company base scope. We give you a fixed quote only after the scoping call, once the exact UoM rules, pricing model, and integrations are agreed. Drivers like multi-company, per-UoM barcode scanning, or bespoke pricelist logic adjust the quote.

Which Odoo versions do you support, and Community or Enterprise?

We build for Odoo 17.0, 18.0, and 19.0, pinned to your exact line, and validate against whichever edition you run — Community or Enterprise. The POS front end is built on the current OWL/PosStore architecture rather than the legacy Backbone client.

How is inventory kept accurate when the same product sells in different units?

Before any stock move is created, the sold quantity is converted to the product's base unit of measure using the standard Odoo conversion factor. One physical stock pool is decremented no matter which unit was rung up — no duplicate SKUs and no drift between shop-floor and accounting counts.

What support and updates do I get after go-live?

You get a post-go-live support window for defect fixes and configuration questions, plus a git repository handover with full history so the addon is yours. Compatibility work for a future Odoo major-version upgrade is available as a separate scoped engagement.

Will it conflict with our existing POS customizations?

We implement via targeted inherit/patch of the POS models and OWL components rather than overwriting core, which minimizes conflict with existing customizations and keeps future upgrades cleaner. Any known interactions are identified during scoping and covered in UAT.

Request a quote

POS Product Multiple UOM

A build-to-order Odoo Point of Sale extension that lets your cashiers sell the same product in multiple units of measure — piece, box, pack, kg — with automatic price and inventory conversion at the register. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17, 18, or 19 environment.

  • Adds a per-order-line unit-of-measure selector to the POS register (OWL component) that lists only UoMs sharing the product's uom.category, so conversions stay valid
  • Live recomputation of unit price and line total the instant a cashier switches units, without leaving the order screen
  • Per-UoM pricing model: derive each unit's price from the base UoM via the standard conversion factor, or override with an explicit price resolved against the active pricelist
  • Sold quantity is converted to the product's base UoM before the stock.move is generated, so one inventory pool is decremented regardless of the unit rung up

Request a Quotation

Tell us about your POS Product Multiple UOM 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.