Skip to content

Odoo Replenishment Not Triggering — Reordering Rules and MTO Fix

DeployMonkey Team · March 24, 2026 9 min read

Replenishment Failures in Odoo

When automatic replenishment does not create purchase orders or manufacturing orders:

Issues:
- Reordering rules exist but no PO/MO is generated
- Product goes below minimum stock with no replenishment
- MTO (Make to Order) route doesn't trigger procurement
- "Run Scheduler" produces no results
- Replenishment report shows nothing to order

Fix 1: Reordering Rule Configuration

# Check the reordering rule:
# Inventory > Configuration > Reordering Rules
# Or: Product > Reordering Rules smart button

# Required settings:
# - Product: correct product/variant
# - Location: usually WH/Stock (internal location)
# - Minimum Quantity: stock level that triggers reorder
# - Maximum Quantity: target stock level after reorder
# - Route: Buy, Manufacture, or specific route
# - Active: must be checked

# Example:
# Min: 10, Max: 50, On Hand: 8
# Should trigger PO for 42 units (50 - 8 = 42)

# Common mistakes:
# - Min = 0 (only triggers when stock is negative)
# - Max = Min (orders only difference, may be 0)
# - Wrong location (rule on WH/Input instead of WH/Stock)
# - Rule is archived

Fix 2: Procurement Scheduler Not Running

# The scheduler cron triggers replenishment checks

# Check if the scheduler is running:
# Settings > Technical > Scheduled Actions
# Find: "Procurement: run scheduler" or "Run Reordering Rules"
# Verify: Active = True, Next Execution Date is not in the past

# Run manually:
# Inventory > Operations > Run Scheduler
# Or: Inventory > Operations > Replenishment > "Order Once" button

# In Odoo shell:
env['procurement.group'].run_scheduler()
env.cr.commit()

Fix 3: Product Route Configuration

# The product must have the correct route for replenishment:

# Product > Inventory tab > Routes
# For purchased products: enable "Buy"
# For manufactured products: enable "Manufacture"
# For MTO: enable "Replenish on Order (MTO)"

# The reordering rule's route must match:
# If the rule says "Buy" but the product only has "Manufacture" route
# → no replenishment happens

# Check vendor is set for "Buy" route:
# Product > Purchase tab > Vendors list
# Must have at least one vendor with price and lead time

Fix 4: MTO (Make to Order) Not Working

# MTO creates procurement when a sales order is confirmed
# NOT based on stock levels (that's MTS with reordering rules)

# For MTO to work:
# 1. Product > Inventory > Routes > enable "Replenish on Order (MTO)"
# 2. Also enable "Buy" or "Manufacture" (MTO needs a supply route)
# 3. Confirm a sales order → PO or MO should be auto-created

# If MTO doesn't trigger:
# Check the sale order's procurement status:
sudo -u postgres psql -d mydb -c "
  SELECT sol.product_id, pt.name, sol.product_uom_qty,
    sol.route_id, sol.order_id
  FROM sale_order_line sol
  JOIN product_template pt ON sol.product_id = pt.id
  WHERE sol.order_id = SO_ID;
"

# The sale order line should show the MTO route
# If route_id is empty, MTO is not applied to this line

Fix 5: Warehouse and Location Mismatch

# Reordering rules are location-specific
# The rule must be on the same location where stock is tracked

# Common issue: rule on "WH/Stock" but product is in "WH2/Stock"
# Multi-warehouse setups need rules per warehouse

# Check:
# Inventory > Configuration > Reordering Rules
# Verify the Location column matches your active warehouse

# For each warehouse, create separate reordering rules

Fix 6: Lead Time and Scheduling

# The scheduler respects lead times:
# If vendor lead time is 14 days and minimum stock = 10
# The scheduler triggers when:
# Forecasted stock in 14 days < 10

# Check product lead times:
# Product > Purchase tab > Vendor > Delivery Lead Time
# Product > Inventory tab > Customer Lead Time
# Product > Inventory tab > Manufacturing Lead Time

# If lead times are set very long, replenishment triggers earlier
# If set to 0, it only checks current stock levels

Fix 7: Check Scheduler Errors

# The scheduler may fail silently
# Check Odoo logs for procurement errors:
# grep -i "procurement\|scheduler\|reorder" /var/log/odoo/odoo.log | tail -30

# Common scheduler failures:
# - No vendor set on product (Buy route but no supplier)
# - No BOM defined (Manufacture route but no BOM)
# - No price on vendor line
# - Product is archived

Prevention

DeployMonkey's AI agent validates reordering rules, vendor configurations, and route setups during product configuration. The agent monitors scheduler execution and alerts on replenishment failures.