- Home
- Apps
- SaaS Tools
- POS Product Multi Barcode
Illustrative previewA build-to-order Odoo module that lets a single product carry many barcodes
— supplier packs, legacy SKUs, unit and case codes — all resolving to the same product across POS, Sales, and Inventory.
ECOSIRE builds, installs, and supports it after you request a quotation.
What is POS Product Multi Barcode?
A build-to-order Odoo module that lets a single product carry many barcodes — supplier packs, legacy SKUs, unit and case codes — all resolving to the same product across POS, Sales, and Inventory. ECOSIRE builds, installs, and supports it after you request a quotation. 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
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 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
Odoo core ties each product variant to exactly one barcode field on product.product. In the real world a single item arrives with several codes: the manufacturer's EAN-13, an old internal SKU from your previous system, a distributor's own label, a case or inner-pack code, and sometimes a weighed-item prefix. When a cashier scans any code other than the one you happened to store, the POS throws "product not found", the picker can't confirm a stock move, and staff fall back to manual search — slowing every checkout and every receipt. Native Odoo has no supported place to record more than one code per product, and the barcode.rule / barcode.nomenclature machinery only governs how a scanned string is parsed (price-embedded, weight-embedded, aliases), not which product a plain code belongs to. That is exactly where Odoo runs out of road.
We build a dedicated product.barcode model (a one-to-many off product.template and product.product) so each product owns an unlimited list of alternate barcodes, each with its own optional label, pack quantity, and active flag. A database-level unique SQL constraint plus an @api.constrains guard prevents the same code from resolving to two different products, and a stored compute keeps the core barcode field in sync with the designated primary so nothing in stock reporting, invoicing, or e-commerce breaks. The heart of the work is the lookup layer: we extend the POS load_product_from_scan / _get_product_by_barcode path so the point-of-sale UI resolves any registered alternate to the right product.product and adds the correct line, and we extend server-side name/barcode search (_name_search and the Sales/Inventory barcode handlers) so the same codes work when creating a quotation, receiving a purchase, or picking a delivery.
Technically the module ships as a proper Odoo addon: a versioned __manifest__.py declaring dependencies on point_of_sale, sale_management, and stock; OWL/JS overrides loaded through the POS assets bundle so scanning is instant at the till; XML and inherited form views adding a "Barcodes" tab on the product form; and ir.model.access.csv plus record rules so only the right roles can add or edit codes. Optional extras we scope on request include pack-quantity handling (scanning a case code adds the case quantity), an import wizard to load thousands of legacy codes from CSV, exposure of alternate barcodes over the XML-RPC / JSON-RPC API for external scanners or middleware, and a QWeb label report to print any of a product's codes. It runs on Odoo 17.0, 18.0, and 19.0, on both Community and Enterprise (the POS overrides differ slightly between Community and Enterprise POS, which we account for during scoping).
Because this is a build-to-order product, nothing ships the instant you pay. After you request a quotation we hold a short scoping call, confirm the exact Odoo version, edition, and which barcode sources you need, then build against your requirements and deliver on staging for UAT before go-live — typically one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company barcode isolation, high-volume legacy-code data migration, or extra integrations such as external scanner middleware and custom label reports increase the quoted scope. You receive a fixed quote after the scoping call, never a surprise invoice.
What you get
- Installable source code for your commissioned version of the module, targeting your exact Odoo major version (17.0 / 18.0 / 19.0) and edition
- Installation and configuration on your environment, including POS assets rebuild and access-rights setup
- Technical documentation: model reference, override points, and upgrade notes for future Odoo migrations
- End-user guide plus a live training session for cashiers, sales, and warehouse staff
- Post-go-live support window for defect fixes and questions
- UAT on a staging database with a documented rollback plan before any production change
- Git repository handover with full commit history and tagged release
- Optional legacy-barcode data migration and import mapping when in scope
Who this is for
Retailers running Odoo POS
Shops and chains whose products arrive with a manufacturer EAN plus their own shelf-label SKU. They need any of those codes to ring up the same product instantly at the till without cashiers hunting by name.
Wholesale and distribution teams
Businesses that sell the same item as a unit, an inner pack, and a case — each with its own barcode. They need scans to resolve to the right product and, ideally, the right quantity across sales and inventory.
Companies migrating from a legacy system
Teams carrying thousands of old internal barcodes from a previous ERP or POS. They need those historical codes to keep working in Odoo so existing labels, shelves, and scan guns don't have to be reprinted overnight.
Odoo administrators and integrators
In-house Odoo admins or partners who want a clean, upgrade-safe addon with proper constraints, access rules, and API exposure rather than an unmaintained one-off patch to the core barcode field.
How POS Product Multi Barcode Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Multiple codes per product | Purpose-built `product.barcode` model, unlimited codes with labels | Possible but you design and maintain the model yourself | Usually a fixed extra-barcodes list, limited labelling | Exactly one `barcode` field per variant |
| POS scan resolution | All codes resolve to the right product line at the till | Depends on how well the POS override is written | Often POS-only, may miss Sales or Inventory | Only the single stored code is recognised |
| Works across Sales and Inventory | Same codes work in quotations, receipts, and pickings | Extra effort to cover every module | Frequently scoped to POS alone | No alternate-code support anywhere |
| Duplicate protection | DB unique constraint plus `@api.constrains` guard | Only if you implement it | Varies; not always enforced at DB level | N/A — single field |
| Fit to your Odoo version and edition | Built for your exact 17/18/19 and Community or Enterprise | Fully tailored but built from zero | Generic build; edition quirks left to you | Ships as-is with the version |
| Support and ownership | Support window, source code, and git repo handover | You own everything and all maintenance | Vendor support varies; upgrades not guaranteed | Covered by your Odoo subscription, no custom logic |
| Cost and timeline | From $999 indicative, fixed quote after scoping, one working week | Typically higher; open-ended developer time | Low sticker price, but integration gaps cost time | No cost, but the need stays unmet |
| Optional extras | Import wizard, pack quantities, API exposure, label report | Anything, at additional build cost | Rarely all in one module | None |
Frequently Asked Questions about POS Product Multi Barcode
Is this an existing app I can download and install today?
No. This is a build-to-order Odoo module. After you request a quotation we scope it to your Odoo version and edition, build it against your requirements, and deliver it installed and tested. You receive the full source code and git repository at handover.
How long does delivery take?
Typically one working week from confirmed scope. The timeline depends on your Odoo version, edition, how many barcode sources you need, and whether legacy data migration is involved. We agree the schedule with you on the scoping call before any work starts.
How does pricing and scoping work?
Pricing starts from $999 as an indicative single-company base-scope figure. After a short scoping call we send a fixed quote. Drivers such as multi-company isolation, high-volume legacy-code migration, pack-quantity logic, or extra integrations increase the quoted scope — but the number you approve is fixed, not an open-ended estimate.
What about support and future Odoo updates?
Every build includes a post-go-live support window for defect fixes. Because you receive the source and git repo, you can maintain it yourself or engage us for upgrades. We can quote a migration when you move to a newer Odoo major version, since POS overrides change between releases.
Does it work with both Community and Enterprise?
Yes, on Odoo 17.0, 18.0, and 19.0. The POS override points differ slightly between Community and Enterprise POS, so we confirm your edition during scoping and build the appropriate variant. We do not present one build as universal across editions without checking.
Will adding multiple barcodes break my existing reports or e-commerce?
No. We keep the core `barcode` field synced to a designated primary code, so stock reporting, invoicing, and website product lookups that rely on the standard field keep working. The alternate codes are additive and enforced unique across products.
Can it handle case and pack barcodes with different quantities?
Yes, as an in-scope option. Each barcode line can carry a pack quantity, so scanning a case code can add the case quantity automatically at POS or on a stock move. We confirm this behaviour during scoping since it affects the POS and inventory logic.
Related Modules

POS Offline Mode Pro
A build-to-order Odoo POS extension that keeps checkout running through internet outages with resilient local caching, a durable local order queue, and conflict-safe reconciliation on reconnect. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.

POS Order Return & Exchange Manager
Process full and partial POS returns and exchanges with stock restoration, price-difference handling, and refund-method control.

POS Promotions & Discount Engine
A rule-based promotions and discount engine for Odoo Point of Sale — BOGO, mix-and-match, happy-hour, bundles and quantity-tiered pricing that auto-apply the best eligible offer at the register. Built, installed and supported by ECOSIRE for your Odoo 17, 18 or 19.

POS QR Table Ordering (Scan & Order)
Contactless QR scan-to-order for Odoo POS: diners browse, order, and pay from their phone, straight to your kitchen. Built to order.
POS Product Multi Barcode
A build-to-order Odoo module that lets a single product carry many barcodes — supplier packs, legacy SKUs, unit and case codes — all resolving to the same product across POS, Sales, and Inventory. ECOSIRE builds, installs, and supports it after you request a quotation.
- Dedicated `product.barcode` one-to-many model on `product.template` / `product.product`, giving each item unlimited alternate codes
- Database-level `unique` SQL constraint plus `@api.constrains` guard so one code can never resolve to two products
- Stored compute that keeps the core Odoo `barcode` field synced to the designated primary code for reporting and e-commerce compatibility
- POS scan resolution via override of `load_product_from_scan` / `_get_product_by_barcode` so any registered code adds the correct line at the till