All posts
Integrator11 min read

Manufacturing planning and scheduling in Odoo MRP: replenishment, work orders, and capacity

How to use Odoo MRP for production planning: replenishment rules, manufacturing order scheduling, work center capacity, and the planning dashboard.

Odoo MRP handles not just manufacturing order creation but the full planning cycle: demand-driven replenishment, work order scheduling across work centers, and capacity analysis. This guide covers the practical configuration for a make-to-stock or make-to-order environment.

Manufacturing route configuration#

Before planning works, the routing must be correct. Navigate to Inventory → Configuration → Warehouses and ensure your warehouse has a manufacturing route active. Then on the product:

  • Routes: enable Manufacture (not Buy)
  • Bill of Materials: at least one active BOM of type Manufacture

For make-to-order: also enable Replenish on Order (MTO) route. This triggers a Manufacturing Order automatically when a Sale Order is confirmed, linking the MO to the SO for traceability.

Replenishment rules for make-to-stock#

For stocked manufactured items, configure a reorder rule (Inventory → Replenishment):

FieldValue for make-to-stock
ProductThe finished good
LocationYour stock location (WH/Stock)
RouteManufacture
Min QtySafety stock level
Max QtyMaximum stock to build to
Quantity MultipleBatch size (matches BOM yield)

When stock falls below Min Qty, the replenishment scheduler (procurement.group.run_scheduler) creates a draft Manufacturing Order. Run the scheduler from Inventory → Replenishment → Replenish or wait for the nightly cron.

Demand forecasting with replenishment#

From Odoo 16, the Forecasted column on the replenishment dashboard shows projected stock based on confirmed sale orders and existing MOs. Use it to pre-approve replenishment before stockouts happen.

Click Replenish on a product line to trigger an immediate replenishment order outside the regular scheduler cycle.

Manufacturing order lifecycle#

StageDescription
DraftCreated, not yet confirmed
ConfirmedComponents reserved (if in stock)
In ProgressAt least one work order started
To CloseAll work orders done, awaiting final validation
DoneMO validated, finished goods moved to stock

Confirm a draft MO by clicking Confirm. Odoo runs an availability check and shows which components are available (green) or missing (red). Use Check Availability to manually refresh after a receipt arrives.

Work orders and work center scheduling#

To enable work orders on manufacturing operations, go to Manufacturing → Configuration → Settings → Work Orders. This adds a Work Orders tab to each BOM operation.

Defining operations on a BOM#

On the BOM, switch to the Operations tab. Add rows:

  • Operation: internal name (e.g. "Cutting", "Assembly", "Quality Check")
  • Work Center: which machine/team performs this step
  • Duration Computation: Manual (fixed time) or Computed (formula based on quantity)
  • Default Duration: minutes per operation or per unit

Operations execute in sequence. Work order 2 cannot start until work order 1 is complete (unless you configure overlapping in the routing).

Work center capacity#

Each work center has:

  • Efficiency Factor: adjust effective throughput (80% efficient work center has 20% overhead)
  • Working Hours: the employee calendar (e.g. 8 AM–5 PM Mon–Fri)
  • OEE Target: overall equipment effectiveness tracking

When an MO is confirmed, Odoo schedules work orders against the work center calendar. Navigate to Manufacturing → Planning → Planning to see the Gantt view of all scheduled operations across all work centers.

Capacity overload#

The planning Gantt view uses colors:

  • Blue: scheduled, within capacity
  • Orange: exceeds work center capacity for the period
  • Red: late (scheduled start is in the past)

To fix overload, drag work orders to different time slots or work centers in the Gantt view, or change the MO scheduled date.

The manufacturing planning dashboard#

Manufacturing → Planning (or MRP Planning from the overview) shows:

  • Open MOs grouped by scheduled start date
  • Component availability status per MO
  • Work center load by day/week
  • Late MOs highlighted in red

Use the By Product filter to see all pending demand for a specific SKU, across both confirmed MOs and sale orders awaiting replenishment.

Scheduling methods#

Odoo MRP uses backward scheduling by default: given a finished goods due date, it subtracts the total operation duration to set the MO start date.

For forward scheduling (schedule from "earliest possible start"), change the scheduled date on the MO to today and let Odoo compute the earliest done date.

Lead time considerations:

  • Manufacturing Lead Time: set on the product (days before the commitment date to start production)
  • Customer Lead Time: total days from order to delivery (Manufacturing Lead Time + Shipping Lead Time)
  • Security Lead Time for Manufacturing: buffer days added to all computed MO due dates (configurable in Manufacturing settings)

Subcontracting#

For components assembled by a vendor, use the Subcontract BOM type. When the BOM type is Subcontracting, confirming an MO creates a Purchase Order for the component instead of internal work orders. The component arrives at the Subcontracting location; receipt validation closes the MO.

Configure:

  • BOM type: Subcontracting
  • Subcontractor: your vendor
  • Component routing through resupply rules if the vendor needs raw materials from you

Reporting and OEE#

Manufacturing → Reporting → Overall Equipment Effectiveness tracks:

  • Availability: planned vs actual uptime
  • Performance: ideal vs actual cycle time
  • Quality: good vs total units produced
  • OEE = Availability × Performance × Quality

Enter work order actuals via the shop floor view on a tablet (work center → start time → stop time) or via the time tracking on each work order line.

Common configuration mistakes#

  • Work orders not appearing: Check Manufacturing settings → Work Orders is enabled, and the BOM has at least one operation in the Operations tab.
  • Components not reserved: MO is confirmed but stock isn't available. Run Check Availability or wait for the next inventory move to update availability.
  • Scheduler not running: The replenishment cron runs daily at midnight by default. For immediate replenishment, manually run from Inventory → Replenishment → Replenish.
  • MO dates in the past: Happens when manufacturing lead time is set to 0 and the scheduler runs at end-of-day. Set a minimum lead time on the product to buffer the schedule.

ERPeek can query your Odoo MRP configuration - ask things like "which products have active BOMs with no associated reorder rules" or "show all open manufacturing orders due this week" against your live database.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free