Nested Product Packaging
Purpose
Nested Product Packaging extends product packaging with a linked smaller package and a multiplier. A generator creates up to four levels for each product variant, and sales order lines accept a Pack Qty that converts into the product's unit quantity. The quotation report adds packaging columns.
The reviewed 18.0 source has a limitation in its printed nested breakdown calculation and rounds several report values to integers. Validate quantities and prices against the sales order before relying on the printed breakdown or issuing a quotation. The core quantity and the descriptive breakdown need to be checked separately.
Before you start
Install eis_product_packaging for Odoo 18.0 with Sales (sale). No Enterprise-only dependency is declared. Use hosting that permits server addons and enable the native product-packaging functionality for the intended users.
This guide is source-reviewed. No packaging generation, sales order or PDF test was executed during this review. The addon is a packaging extension; it does not introduce a warehouse repacking operation or a new unit-of-measure category.
Access and roles
The Generate Packaging wizard is restricted by its ACL to Sales Managers (sales_team.group_sale_manager). Normal product and packaging permissions still apply. The product button itself is not group-hidden, so a user without the wizard access may see it and receive an access error.
The sales-line package and Pack Qty columns require the native Product Packagings group (product.group_stock_packaging). A salesperson needs both their normal order permissions and the packaging feature access to use those columns.
Setup and menu
Open a product template. Generate Packaging is shown for goods represented by the reviewed version's consu product type, and hidden for other types such as services.
The generator labels its rows Smallest Packing, 2nd Next Packing, 3rd Next Packing, and 4th Next Packing. The first quantity is a number of base product units; each later quantity is the number of the preceding package contained in the next larger package.
Existing packaging lists gain Parent Packaging and Qty of Child Packages. Despite the Parent Packaging label, the relation used by the calculation points to the smaller contained package. Keep every chain within one product and avoid circular links.
Workflow
- As an authorized Sales Manager, open the product template and choose Generate Packaging.
- Enter at least one name and positive quantity. For example: Box = 12 units, Pack = 4 Boxes, Carton = 3 Packs. Leave unused levels blank.
- Choose Create. The wizard processes every variant of the template. For each variant it creates packages, or updates an existing package found with the same name and product. Review the scope before rerunning it on an established catalogue.
- Inspect the resulting contained quantities. The example generator calculation is Box 12, Pack 48 and Carton 144 base units.
- On a quotation, add the product and select its package before the unit-quantity column. Selection defaults the pack count to one. Enter a positive Pack Qty and inspect the recalculated unit quantity, including any unit-of-measure conversion.
- Save the order and inspect its amounts. When printing, compare Breakdown, Pack, Pack Qty, Unit Qty and Pack Price with the order. Correct the report implementation before issuing documents whose printed quantities or prices are misleading.
Practice scenario
In an authorized test database, create fictional “Harbor Sparkling Water” with Box 12, Pack 4 and Carton 3. Generate packages, verify contained quantities of 12, 48 and 144, then select two Cartons on a quotation and check the unit quantity against 288. Print only for internal review and compare every quantity and price with the order. This is a source-derived exercise and has not been executed here.
Troubleshooting and limitations
No packaging level entered: supply at least one complete name/quantity pair. Negative populated quantities are rejected; zero or incomplete rows are omitted by the generator.
Wrong contained quantity: a package with a linked smaller package must have a total consistent with its multiplier, within product rounding. Recheck both records after changing an existing hierarchy.
Printed breakdown overstates base units: the reviewed nested-breakdown code multiplies the accumulated chain quantity by the selected top-level package quantity again. Do not use that final descriptive number as stock or customer quantity evidence until corrected and verified.
Fractions or decimals disappear on the PDF: Pack Qty, Unit Qty and Pack Price use integer display widgets. The report's Pack Price is a simple unit-price multiplication, not an independently priced package offer. Validate discounted, fractional and alternate-unit examples in your installed version.
Versions and useful links
Only Odoo 18.0 is present and qualified in the supplied inventory. The manifest's internal version is 0.1; it does not imply compatibility with another Odoo major.
- Live Test — Odoo 18.0
- Corvus app catalogue — choose the exact version.
- Related: Product Attribute Colors for variant-attribute selection.