| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Point of Sale (point_of_sale) • Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 862 |
| Technical Name |
top_packaging_price |
| License | LGPL-3 |
| Website | https://www.topbusiness.io |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Point of Sale (point_of_sale) • Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 862 |
| Technical Name |
top_packaging_price |
| License | LGPL-3 |
| Website | https://www.topbusiness.io |
Top Packaging Price
Package-based selling for the same product in Sales Orders and Point of Sale — dedicated package prices, accurate stock in product units, no duplicate SKUs.
Coffee Mix — Single vs Box 12
The Problem with Standard Packaging
Standard Odoo packaging defines how many units fit in a box — but not a dedicated commercial selling price for that package in Sales and POS.
Packaging in Odoo is built for logistics: contained quantity, barcodes, and delivery. It does not, by itself, let you set a fixed package selling price on the sales floor or on a quotation line.
Without a targeted extension, teams often create a second product for "Box of 12" — splitting inventory, breaking reporting, and adding daily operational work.
Same Coffee Mix example
- Single item price: 1 LE
- Box 12 package price: 10 LE (not 12 × 1 LE)
- Contained quantity: 12 units
Promotional or wholesale box pricing on one product — no separate box item in stock.
One Product. Package Price. Correct Stock.
Top Packaging Price adds package price fields on product.packaging.
When a package is selected, the line keeps the original product and converts quantity
and unit price automatically. Stock moves in real product units.
Unit Price = Package Price ÷ Package Quantity
Line Total = Package Price
Stock Deduction = Package Quantity in product units
Worked Example — Coffee Mix, Box 12
| Field | Value |
|---|---|
| Product | Coffee Mix (same product, no duplicate) |
| Package | Box 12 |
| Quantity | 12 units |
| Unit Price | 0.833333 LE (10 ÷ 12) |
| Line Total | 10 LE |
| Stock Deducted | 12 units from Coffee Mix inventory |
What Top Packaging Price Delivers
Scoped to Sales, POS, and inventory — as implemented in this module.
Package Price on Packaging
Set a fixed selling price on each product.packaging row (e.g. Box 12 at 10 LE).
Sales Order Package Selection
Choose a package on the sale order line via top_product_packaging_id; qty and unit price update.
POS Single or Package Popup
Cashiers pick Single Item or a configured package when adding a product in POS.
Accurate Stock Deduction
Stock moves deduct real product units (e.g. 12), not "1 box" as a separate item.
POS Package Barcode
Scan a packaging barcode at POS to add the package qty and package price on the line.
Package Name on Documents
Package label on order lines, POS cart/receipt, and picking description.
Sales / POS Availability Toggles
Per packaging row: enable Available in Sales and/or Available in POS independently.
top_* Fields (Not Pricelist Rules)
Uses module-specific top_* fields for fixed package pricing — not built-in Odoo pricelist integration.
POS Cashier Workflow
Four steps — Coffee Mix, Box 12 at 10 LE, stock −12 units.
Click Product
Cashier taps Coffee Mix on the POS product screen.
Choose Selling Unit
Popup: Single Item or available packages.
Select Box 12
Cashier picks Box 12 at 10 LE.
Correct Line Added
Line: qty 12, total 10 LE, stock −12 units.
Select Selling Unit
Sales Order Workflow
Select a package on the order line (top_product_packaging_id).
Quantity and unit price update; delivery deducts real units.
| Selection | Qty | Unit Price | Total | Stock Deducted |
|---|---|---|---|---|
| Single Item | 1 | 1.00 LE | 1.00 LE | 1 unit |
| Box 12 | 12 | 0.833333 LE | 10.00 LE | 12 units |
| Carton 24 (illustrative) | 24 | 0.750000 LE | 18.00 LE | 24 units |
Note: Coffee Mix / Box 12 / 10 LE is the primary documented example. Carton 24 and other package rows are illustrative — configure only the packaging lines you need on each product; values depend on your setup.
Product Packaging Setup
Inventory tab → Packaging: set contained quantity, package price, barcode, and channel availability per row.
- Package name (Box 12, Carton 24…)
- Contained quantity (
qty— units per package) - Package price — total selling price for the package
- Package barcode for POS scanning
- Available in Sales / Available in POS toggles
| Package | Qty | Package Price | Sales | POS |
|---|---|---|---|---|
| Box 12 | 12 | 10.00 | Yes | Yes |
| Carton 24 | 24 | 18.00 | Yes | Yes |
Carton 24 in the sample table is an optional second packaging row — add as many package lines as your product requires.
Why Not a Separate Box Product?
One product with package-aware pricing — not duplicate inventory.
❌ Separate Box Product
- Duplicated stock and SKUs
- Manual conversion or BOM overhead
- Split sales and inventory reporting
- Extra maintenance when prices change
✅ Top Packaging Price
- Original product only — package is a selling mode
- Package selection sets real unit quantity on the line
- Correct stock deduction on every sale
- Clearer Sales and POS workflow for staff
Technical Highlights
Standard Odoo extension patterns for Odoo 18 — upgrade-safe, explicit dependencies.
- Extends
product.packagingwith package price and Sales/POS availability fields - Extends
sale.order.linewithtop_product_packaging_idand automatic pricing - Extends
pos.order.linewithtop_*package metadata and stock qty logic - POS data loading via
pos.load.mixinon packaging and order lines - OWL patches on ProductScreen, PosOrderline, and barcode handling in POS
- Package name on order lines, POS cart/receipt, and picking descriptions
- Stock movements based on real product quantity, not package count as a separate product
- Dependencies:
sale_management,point_of_sale,stock,product
Ideal For
Businesses that sell the same product as single units and pre-defined packages with different prices.
Retail & Grocery
Single unit or multipack with one SKU and correct stock.
Cafes & Food Service
Box pricing on supplies — e.g. Coffee Mix Box 12 at 10 LE.
Wholesale
Case and carton prices without duplicate products.
FMCG
Single, box, and carton tiers on one product record.
In the Interface
Add PNG files alongside this page to replace the placeholders below.
Installation
Install the module, configure packaging rows, then use packages in Sales and POS.
- Copy top_packaging_price to your Odoo addons path (e.g.
addons/top_packaging_price). - Update the Apps list and install Top Packaging Price.
- Restart Odoo if required; for POS, close and reopen the session so packaging data reloads.
- On each product (Inventory → Packaging), set qty, package price, and Sales/POS availability.
- In Sales, select a package on the line; in POS, choose Single Item or Package at checkout.
Need Customization?
Need additional package workflows, receipt layout changes, or custom integrations? TopBusiness provides tailored Odoo development and support.
Please log in to comment on this module