Inventory Extensions¶
Custom inventory features for stock management.
Critical Configuration: MTO Route
The Replenish on Order (MTO) route MUST be enabled for the SO → PO → Delivery → FSM workflow to function correctly. Without MTO, confirming a Sales Order will NOT automatically create a Purchase Order.
MTO (Make to Order) Configuration¶
The MTO route ensures that each Sales Order automatically creates a Purchase Order for the vendor. This is essential for the window blinds workflow where products are custom-ordered per customer specifications.
Why MTO is Required¶
flowchart LR
A[Sale Order] -->|MTO Route| B[Purchase Order]
B --> C[Receive Products]
C --> D[Delivery Order]
D -->|Validate| E[FSM Order]
Without MTO enabled: - Sales Orders do NOT create Purchase Orders - You must manually create POs - The SO → PO link is broken
Step 1: Unarchive the MTO Route¶
The MTO route is archived by default in Odoo 15. You must unarchive it first.
- Go to Inventory → Configuration → Routes
- Click Filters → Archived to show archived routes
- Find Replenish on Order (MTO)
- Select it and click Action → Unarchive
Alternatively: 1. Go to Inventory → Configuration → Routes 2. Remove the "Archived" filter from the search bar 3. The MTO route will now appear in the list
Step 2: Configure Products for MTO¶
Each product that should trigger automatic PO creation needs MTO configured:
- Go to Inventory → Products → Products
- Open the product
- Click the Inventory tab
- In the Routes section, enable:
- Replenish on Order (MTO) ✓
- Buy ✓
Both Routes Required
MTO does NOT work alone. You MUST also select the Buy route (for purchased products) or Manufacture route (for manufactured products).
Step 3: Configure Vendor¶
For MTO + Buy to work, the product must have a vendor configured:
- On the product form, go to Purchase tab
- Add a vendor in the Vendors section
- Set the price and delivery lead time
MTO Workflow¶
When MTO is properly configured:
| Step | Action | Result |
|---|---|---|
| 1 | Confirm Sale Order | Draft Purchase Order created |
| 2 | Confirm Purchase Order | Receipt (incoming) created |
| 3 | Validate Receipt | Products in stock |
| 4 | Validate Delivery | FSM Order created |
Verify MTO is Working¶
After confirming a Sales Order:
- Check Purchase → Orders → Purchase Orders
- A new draft PO should exist with:
- Origin = Sales Order number (e.g., "SO0001")
- Vendor = Product's configured vendor
- Products = Same as SO lines
Common Issues¶
| Problem | Cause | Solution |
|---|---|---|
| No PO created after SO confirm | MTO route not enabled on product | Enable MTO + Buy routes |
| No PO created | MTO route still archived | Unarchive the route |
| Error: No vendor | Product missing vendor | Add vendor in Purchase tab |
| POs merging together | Standard Odoo behavior | See bi_product_dimension for 1 SO = 1 PO fix |
Reference¶
For official Odoo documentation, see: Replenish on Order (MTO) - Odoo 15.0 Documentation
Module Overview¶
| Module | Technical Name | Version | Description |
|---|---|---|---|
| Inventory Receipt | inventory_receipt |
15.0.1.0.1 | Product summary on receipts |
| Product Dimensions | bi_product_dimension |
- | Dimension fields on products |
| Cancel Picking | dev_picking_cancel |
- | Cancel stock picking orders |
Inventory Receipt Module¶
| Field | Value |
|---|---|
| Technical Name | inventory_receipt |
| Version | 15.0.1.0.1 |
| Category | Inventory |
| Dependencies | stock |
Overview¶
Adds a Product Summary tab to the stock picking form showing aggregated product quantities.
Features¶
- Product Summary Tab - Added to Receipt form view
- Quantity Display - Table showing Product, Quantity, and UoM
- Quick Overview - See all products in receipt at a glance
Usage¶
- Open Stock Picking (Receipt)
- Click Product Summary tab
- View aggregated quantities
Tab Contents¶
| Column | Description |
|---|---|
| Product | Product name |
| Quantity | Total quantity in receipt |
| UoM | Unit of measure |
Other Inventory Modules¶
bi_product_dimension¶
Adds dimension fields to products:
- Length
- Width
- Height
- Weight
- Volume (computed)
dev_picking_cancel¶
Allows cancelling stock picking orders:
- Cancel button on picking form
- Reverts stock moves
- Handles related documents
Installation¶
# Install inventory receipt
docker compose exec odoo odoo -i inventory_receipt --stop-after-init -d DATABASE_NAME
# Install product dimensions
docker compose exec odoo odoo -i bi_product_dimension --stop-after-init -d DATABASE_NAME
# Install cancel picking
docker compose exec odoo odoo -i dev_picking_cancel --stop-after-init -d DATABASE_NAME
Module Structure¶
inventory_receipt¶
inventory_receipt/
├── __manifest__.py
├── __init__.py
└── views/
└── stock_picking_views.xml # Form view extension
Integration with Field Service¶
These inventory modules support field service operations:
flowchart TD
A[Sale Order] --> B[Delivery Order]
B --> C[FSM Order]
C --> D[Technician Delivers]
D --> E[Parts Confirmation]
E --> F[Signature]
- Sale Order creates delivery order
- FSM Order linked to delivery
- Technician confirms parts delivery
- Customer signs for parts received
Troubleshooting¶
Product Summary Not Showing¶
- Verify
inventory_receiptmodule is installed - Upgrade module:
-u inventory_receipt - Check view is applied to correct picking type
Cancel Button Not Working¶
- Verify
dev_picking_cancelis installed - Check user has permission to cancel
- Verify picking state allows cancellation
Related Modules¶
- Field Service Automation - FSM-Delivery integration
- Service Signature - Parts confirmation