MRP Planning in Odoo 20: From Master Schedule to Purchase Orders

Manufacturing planning fails in two opposite ways. Plan too late and the shop starves: a sales order is due Friday, the components take three weeks, and nobody did the arithmetic in time. Plan with a blunt instrument and the warehouse fills with stock nobody ordered, bought “just in case.” The Master Production Schedule — MPS — is Odoo’s answer to the space between those failures: a long-range, human-controlled plan that turns a demand forecast into manufacturing orders and purchase orders, period by period, before deadlines make the decisions for you.

The MPS itself is a long-standing Odoo feature, not an Odoo 20 invention. What Odoo 20 changes is everything around it: how manufacturing orders are scheduled once the MPS creates them, how planners see work orders, and how the simpler replenishment tools compare. This article walks the whole chain — enabling the MPS, its grid and maths, and turning suggestions into real orders — then covers what version 20 adds.

Diagram of forecasted demand flowing through a master schedule into manufacturing and purchase orders

Where the MPS fits among Odoo’s planning tools

Odoo gives you three ways to decide what to make or buy:

  • Reordering rules react to stock levels: when a product falls to its minimum, replenish up to its maximum. Automatic and simple, but blind to the future — they know nothing about a seasonal peak three months away.
  • Make to Order (MTO) reacts to confirmed demand: a sales order triggers exactly the production or purchase needed to fulfil it. Precise, but it starts the clock only when the order lands.
  • The Master Production Schedule plans against a forecast you control, for products where confirmed orders do not reflect probable future demand — seasonal goods, long-lead-time components, and anything you must start before customers commit.

Odoo’s documentation illustrates this with artificial Christmas trees: in September, fewer than ten manufacturing orders are confirmed for December, yet the manager knows December demand will be far higher. Entering that forecast in the MPS lets production and purchasing start in time. One warning deserves emphasis: the MPS is a manual tool, and reordering rules should not be applied to products managed in the MPS — running both produces inaccurate forecasts and duplicate replenishment.

Enabling and configuring the MPS

Turn on Master Production Schedule in the Manufacturing app’s settings, under Planning. Two settings appear with it: Default Time Range (Yearly, Monthly, Weekly, or Daily) and Number of Periods to display — Monthly with 12 periods, for example, shows the next twelve months starting with the current one.

Choose the range to match your longest lead time. If a critical component takes ten weeks, a monthly grid over twelve periods gives purchasing room to act; a weekly grid suits faster production. Products need the right plumbing first: manufactured products need the Manufacture route on the product form’s Inventory tab, purchased products the Buy route plus a vendor pricelist.

Reading the MPS grid

The MPS is a grid: time periods run across the columns, and each product occupies a group of rows. The default rows are:

  • Starting stock — stock at the beginning of the period (the product’s header row, linking to its forecasted report).
  • − Forecasted Demand — your estimated demand for the period, entered manually. This is where planner judgement enters the system.
  • − Indirect Demand Forecast — demand for this product as a component of other products’ manufacturing orders. It only appears when the product is used as a component.
  • + Replenishment — the quantity to replenish through manufacturing or purchase orders. Odoo suggests a value; you can override it, and an Order button turns the figure into a real order.
  • = Forecasted Stock — projected stock at the end of the period if the replenishment happens.

The rows obey one equation:

Forecasted Stock = Starting Stock − Forecasted Demand − Indirect Demand Forecast + Replenishment

Each period’s forecasted stock becomes the next period’s starting stock, so a shortfall compounds visibly instead of surprising you in the final week. Additional rows are available from the search options — most usefully Actual Demand, which merges confirmed sales-order demand into the demand row. The replenishment suggestion is the quantity needed to land on your safety stock target after starting stock, forecasted demand, and indirect demand — normally zero when that calculation comes out at or below zero.

Adding products and setting replenishment policy

Click Add a Product and set the planning policy:

  • Bill of Materials — selecting the BoM also pulls its components into the MPS: demand for the finished product generates visible indirect demand for everything inside it. Leave it blank if you do not want components planned in the MPS.
  • Route — Manufacture or Buy, which decides whether replenishment creates manufacturing orders or requests for quotation. Purchased items also take a vendor.
  • Safety Stock Target — the minimum quantity you want on hand at the end of every period; the suggestion engine works to restore this level.
  • Minimum to Replenish — a floor on batch size, so the MPS does not suggest replenishments of two units when you produce or order in dozens.
  • Replenishment Trigger — Manual (you click Order), Automatic (Odoo schedules the order), or Never (forecast only, never replenished from the MPS).

In multi-warehouse databases you also choose the production warehouse. Planning parameters can be edited later from the product’s row, though product and BoM selections are fixed once added — remove and re-add the line if those need to change.

Forecasting demand without guessing blindly

Forecasted demand can be typed in period by period, but the MPS can also suggest it from history. The Suggest Forecasted Demand tool bases its estimate on actual demand from the matching period a year ago, the previous year’s completed outgoing moves, or average demand over the last 30 days, 3 months, or 12 months, prorated to your period length. A scaling factor adjusts the result — 110%, for instance, projects ten percent growth. Start from last December’s real demand, scale for expected growth, then adjust periods where you know something history does not — a promotion, a new customer, a product being retired.

From suggestion to manufacturing and purchase orders

Nothing in the MPS happens by itself. Adding a product creates no orders; the schedule only proposes quantities. Execute the plan with the Order button at the top of the grid (every product, current period), the Order button on a single product’s replenishment row, or by selecting several products and using the Actions menu.

The route decides what you get: Buy generates a request for quotation in Purchase; Manufacture generates a manufacturing order. Replenishment cells are colour-coded: green means ready to replenish, gray means an order matches the suggested quantity, yellow means the order placed is below the suggestion, and red means it exceeds it. Yellow and red are not errors — they are the visible record of a planner deliberately departing from the suggestion, exactly the judgement the MPS is built to capture.

What Odoo 20 adds to planning

The MPS grid itself carries into Odoo 20 largely as it was — the release notes announce no MPS redesign. The changes land on what happens after the plan becomes orders:

  • Manufacturing orders planned ASAP. MOs are now planned as soon as possible by default, and when several orders are planned together, their sequence in the list sets scheduling priority. List order is now a planning decision, not just a display preference.
  • A redesigned MO Kanban. Cards are grouped by scheduled date in weeks and show component status, active work center, deadline, and remaining time.
  • New work order views. A work order Kanban and a Gantt view with drag-and-drop planning, enhanced colour coding, and planning by employee. Work orders can be confirmed from the Gantt view even when they contain draft work orders, and backorders of planned productions are planned automatically on creation.
  • Draft or confirmed MOs from procurement. On the Manufacturing operation type, choose whether procurement creates draft or confirmed MOs — useful when MPS-driven orders should be reviewed first.
  • A To Replenish filter on the MO overview, and the ability to reset validated or cancelled MOs back to draft when a plan changes.

One neighbouring Odoo 20 change matters for the MPS-versus-rules decision: reordering rules gained suggested minimum and maximum levels, calculated from demand history, desired days of coverage, and order frequency. That makes the automatic route smarter for stable products — strengthening the case for reserving the MPS for items that genuinely need a human forecast.

A workable planning rhythm

  1. Weekly: refresh forecasted demand for near periods, check Actual Demand against forecasts, and order the current period’s replenishments.
  2. Monthly: re-run Suggest Forecasted Demand for seasonal items, review safety stock targets, and scan for yellow and red cells that no longer reflect a deliberate decision.
  3. Continuously: keep MPS products out of reordering rules, keep vendor lead times and pricelists current — every date the plan produces depends on them — and use the MO Kanban and Gantt views to confirm the floor can absorb what the schedule proposes.

The MPS does not forecast or order for you unless you tell it to. Its value is structural: one grid where forecast, stock, components, and replenishment meet, with arithmetic done and exceptions coloured in. In Odoo 20, orders falling out of that grid are scheduled sooner and easier to replan.

Further reading

Leave a Comment