| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Point of Sale (point_of_sale)
• Sales (sale_management) • Discuss (mail) • Inventory (stock) • Invoicing (account) |
| Lines of code | 569 |
| Technical Name |
crowe_pos_multi_uom |
| License | LGPL-3 |
| Website | https://www.crowe.mv |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Point of Sale (point_of_sale)
• Sales (sale_management) • Discuss (mail) • Inventory (stock) • Invoicing (account) |
| Lines of code | 569 |
| Technical Name |
crowe_pos_multi_uom |
| License | LGPL-3 |
| Website | https://www.crowe.mv |
POS Multi UoM
Sell a product in any unit, straight from the Point of Sale order line
Add a Unit of Measure selector to every Point of Sale order line. When a product offers more than one unit, the cashier picks the right one from a dropdown and the quantity and price convert automatically. The base unit is always kept for stock and accounting, while the selected unit flows through to taxes and invoices — no re-keying, no separate price lists.
Key Features
UoM Selector Column
A Unit of Measure column appears on each order line. Products with several units show a dropdown; products with a single unit show a clean static label, so the screen stays simple.
Automatic Conversion
Switching the unit recalculates the quantity and the line price instantly using the UoM factor. The display shows the selected unit while the stored quantity stays in the product's base unit.
Accurate Taxes & Invoices
The selected unit and converted quantity are written to the order line and used when computing taxes and generating the invoice, keeping accounting fully consistent.
How It Works
A real example: “Fresh Potato” sold by gram, kilogram or ton
A unit column on every line
Every order line gains a Unit of Measure column placed before the price. When the product has multiple units the cashier sees a dropdown; otherwise the line shows the product's single unit as a static label.
Pick the right unit
Open the dropdown to choose from the units configured on the product. Here “Fresh Potato” offers g, kg and Ton, with gram (g) as the base unit.
Price and quantity convert instantly
“Fresh Potato” is priced at USD 1.00 per g. Selecting kg automatically re-prices the line to USD 1,000.00. No manual math, no separate price lists.
Configuration
No extra setup screens — it uses Odoo's native product Packagings
Enable multiple units of measure
Turn on Manage Multiple Units of Measure under Settings → General Settings. This is a one-time step for your database.
- Open the product and go to the Sales tab.
- Under Upsell & Cross-Sell > Packagings, add the units you want to sell (for example kg and Ton).
- Optionally enable Restrict packagings to UoM category to limit the selectable units to the same UoM category as the product's default unit.
- Save. The units are immediately available on the POS order line.
uom_ids) you already know
— there is no additional configuration screen to learn.
Set the base price once
On the General Information tab, define the Sales Price on the base unit as you normally would — here USD 1.00 per g. Every other unit is derived automatically from this base, so pricing stays in one place.
Benefits
Faster, error-free checkout
Cashiers sell in the unit the customer asks for without converting prices by hand, reducing mistakes at the counter.
One product, many units
Stock a product once in its base unit and sell it as grams, kilograms or tonnes — whatever fits the sale.
Consistent stock & books
Quantities are always stored in the base unit, keeping inventory valuation, taxes and invoices accurate.
Quotations stay intact
Importing a quotation into POS preserves the sale line's unit as a single line instead of splitting it into base-unit lines.
Feature Summary
On the POS
Unit-of-measure column on every order line.
Dropdown for multi-unit products, static label otherwise.
Instant quantity & price conversion on unit change.
Display in the selected unit; storage in the base unit.
Behind the Scenes
Built on native product Packagings — no extra config screen.
Optional per-product UoM-category restriction.
Accurate taxes and invoices from the selected unit.
Sale order import preserves the line's unit.
Technical Details
Server side
-
pos.order.line — adds
selected_uom_idand a computedproduct_uom_id, and overrides the tax-base computation so the selected unit drives the converted quantity, unit price and invoice line. -
product.template — adds
restrict_packagings_to_categoryand a computedallowed_uom_idsto filter the Packagings field. -
product.product — exposes
uom_idsto the POS data payload. -
sale.order.line — exposes
product_uom_idto the POS payload so imported quotations keep their unit.
Front end (OWL)
- Patches PosOrderline for UoM options, display/stored quantity conversion and per-unit formatting.
- Patches the Orderline component to react to unit changes and show the per-unit price.
- Patches PosStore (
settleSO) to preserve the sale order unit on import. - Extends the Orderline template to add the UoM selector column.
Compatibility & Dependencies
Version
Built for Odoo 19.0, compatible with both Community and Enterprise editions.
Dependencies
Requires product, point_of_sale and pos_sale.
Support
Brought to you by Crowe Maldives LLP
Author
Crowe Maldives LLP
Website
www.crowe.mv
Licensed under LGPL-3.
Please log in to comment on this module