Objective Recap
You want Odoo to:
-
Automatically split a receipt (e.g., 600 units of Product A) based on:
-
Putaway Rules
-
Location maximum capacity
-
Storage Categories (High Volume vs. Low Volume)
So 200 units go to High Volume (its max), and 400 units go to Low Volume.
What You’ve Already Done
-
✔️ Defined two Storage Categories (High Volume, Low Volume)
-
✔️ Set Max quantity per product per location
-
✔️ Set Putaway Rules: e.g., Product A → High Volume, then → Low Volume
How Odoo Normally Works
Odoo's Putaway Rules define:
-
For a given product or product category,
-
Where it should be stored based on Storage Category capacity (i.e., space rules)
But by default, Odoo does not automatically split an incoming move into multiple quants across multiple locations. Instead, it uses the first matching rule that has available space.
Default Limitation in Odoo
Odoo will not automatically split a single incoming line (e.g., 600 units) into 200 + 400 based on location max capacity.
It will:
-
Try to assign the entire quantity to the first location in the putaway rule list that has enough capacity.
-
If that location is full, it moves to the next one.
So in your example:
If High Volume can only take 200 and you receive 600, Odoo will bypass High Volume and send all 600 to Low Volume, because High Volume can’t handle the full quantity.
Options to Achieve What You Want
Option 1: Use a Custom Server Action or Module
Create a custom module or automated server action that:
-
Detects the available capacity of the first location.
-
Splits the incoming move into two lines:
-
One for High Volume (max capacity)
-
One for Low Volume (remaining)
This approach fully automates the desired behavior. This is the most accurate and scalable solution in Odoo.
If you're interested, I can help you with a code snippet or XML record to start with.
Option 2: Manually Split Incoming Move Lines
Before validating the incoming shipment:
-
Go to the Incoming Transfer.
-
Click on Operations
-
Manually split the incoming line (e.g., 600 units into 200 + 400 lines)
-
Then assign each line to the correct destination location (High Volume / Low Volume)
This respects the putaway rules if you use "Suggest Locations", but it’s manual.
Option 3: Use Advanced Putaway Rule Logic with Custom Python Code
If you're comfortable with Python, override the putaway logic (method _get_putaway_strategy) to:
-
Check the remaining capacity of each location.
-
Automatically split the incoming stock move based on that.
Again, this requires customization, but it’s clean and effective.
Summary
Option | Description | Automation Level | Notes |
---|
1 | Custom module/server action that splits moves based on capacity | 🔁 Fully automatic | ✅ Best solution |
2 | Manual split of lines in incoming transfers | Manual | Simple but labor intensive |
3 | Customization of putaway strategy via code | Fully automatic | Needs development |
Recommendation
Since you're using Odoo Enterprise, I recommend:
-
Start with manual splitting as a proof-of-concept
-
Then build a small custom module or automation rule to handle it