Hi all,
Looking for some guidance / patterns from others who’ve done this in Odoo 18.
Context
We’re in manufacturing/packaging and have a classic 3-level physical structure:
- Raw material (e.g. paper in kg/lb)
B100 – Unit level
- Individual “unit” (formed piece), not sold directly
- Produced from raw material (often by a subcontractor)
B110 – Case level
- Box of units (e.g. 2,300 units per case for Product A, 900 units per case for Product B, etc.)
- This is the only level customers actually order
- BOM: N × B100 + case carton + label + inserts, etc.
Pallet (conceptual B120)
- Stack of cases on a pallet (cases per pallet also varies by product)
- Used only for storage and shipping logistics
- We want to track pallet-level packaging materials (pallet, stretch wrap, corner boards), but customers never order “1 pallet” as a product line – they still order “X cases”.
Requirements / goals
Sales
- Customers place orders only in cases (B110), not units and not pallets.
Planning & inventory
We need proper raw material planning:
- Sales order → B110 (cases) → B100 (units) → raw material (paper in kg/lb).
- We manage stock primarily in units and cases.
- We do use subcontracting for some levels (e.g. subcontractor converts raw material → B100 units).
Logistics & packaging
- In the warehouse we store and ship as pallets for obvious reasons (forklifts, racking, etc.).
Each pallet for a given product uses additional packaging materials:
- Pallet
- Stretch wrap
- Corner boards, etc.
- We’d like to track the consumption of those pallet packaging materials per pallet, but we do not sell pallets as a separate product.
What we’re doing today
Right now, we have:
- B100 (unit) – stockable product with BOM from raw material.
- B110 (case) – stockable product with BOM from B100 + case packaging.
- B120 (pallet) – stockable product with BOM from B110 + pallet packaging.
This works mechanically, but the main pain points are:
- Customers only ever order B110 (cases).
- We care about inventory and planning at unit and case level; B120 is just logistics + extra packaging.
- Maintaining B120 as a full product with its own BOM feels heavy and a bit unnatural, given it’s never sold and mostly just groups cases.
Questions
For those of you running similar flows in Odoo 18:
How do you model pallets when customers only order cases?
- Do you keep a third product (B120) with its own BOM?
- Or do you treat pallets strictly as product packaging / packages (using Product Packaging + Packages / Package Types), and avoid a B120 product entirely?
How do you account for pallet-level packaging materials (pallet, wrap, corner boards) if pallets are not ordered or planned as products?
Do you:
- a) Periodically adjust consumption of pallet materials based on pallet count?
- b) Use a “dummy” MO or work order per palletization batch?
- c) Something else (e.g. automated consumption when packages of a certain type are created)?
Dynamic pack sizes per product
- Our units per case and cases per pallet vary per product.
- That makes using “Case” and “Pallet” as global Units of Measure tricky, since the ratios aren’t global.
- Are you handling this purely via BOM quantities + Product Packaging per product? Any pitfalls?
Subcontracting interaction
- We subcontract the B100 (unit) step: raw material → B100.
- B110 (case) is typically packed in-house.
For those using subcontracting + multi-level BOMs + pallets, how are you wiring this so that:
- Sales order for B110 (cases) triggers raw material planning all the way down
- Subcontractor POs and “Resupply Subcontractor” flows still work cleanly
- Pallets/packaging don’t over-complicate the model?
Any examples of how you’ve modeled this, or links to good community modules / patterns (e.g. around advanced packaging levels) would be hugely appreciated.
Thanks in advance!