Odoo 20 for Make-to-Order Manufacturers: A Workflow Tour

Make-to-order manufacturing lives or dies on one link: a confirmed customer order has to become a production order without anyone re-typing it, chasing it, or losing track of which finished unit belongs to which customer. In Odoo that link is the Replenish on Order route, usually called MTO (make to order). It is not new in Odoo 20 — it has been a core Inventory and Manufacturing strategy for years — but Odoo 20 surrounds it with a set of planning and shop-floor changes that make the flow easier to run day to day. This tour follows one custom product from quotation to delivery, and flags what is genuinely new in 20 versus what was already there.

What make-to-order means in Odoo

In a make-to-stock business you build first and sell from the shelf. In make-to-order, nothing is built until demand exists. The Odoo 20.0 documentation defines the MTO strategy plainly: it automatically triggers a purchase order or a manufacturing order (MO) for a product only when a sales order (SO) is confirmed. For a purchased product Odoo creates a request for quotation; for a manufactured product it creates an MO. That replenishment document is linked to the source sales order and reachable through a smart button on the order, so anyone can trace production back to the original customer demand in one click.

One behaviour surprises new users, and the documentation calls it out explicitly: a replenishment order is always created when the sales order is confirmed, even if there is already enough stock on hand to fulfil it. MTO in Odoo is not “build only if the shelf is empty” — it is “every confirmed order gets its own supply, reserved for that order.” For custom work — a configured cabinet, a machine built to a customer's specification — that one-to-one link is usually exactly what you want. For standard products you occasionally sell from stock, think carefully before putting them on MTO, because you will generate a fresh MO for every order.

Step 1: Configure the product once

The setup is configuration, not code, and it happens in two places.

  1. Enable the route. In the Inventory settings, in the Logistics section, turn on Replenish on Order (MTO) and save. Until this is enabled, the route cannot be used.
  2. Put the product on the route. On the product form, open the Inventory tab and, under Operations, select Replenish on Order (MTO) in the Routes field.
  3. Give the product a way to be supplied. For a manufactured product, that means a bill of materials (BoM): click the Bill of Materials smart button on the product form and create one, listing the components and, if you use work orders, the operations. The documentation is blunt here — for manufactured products you must specify a BoM, or Odoo cannot properly generate the MO. For a purchased product, you must instead set a vendor and unit price on the Purchase tab, or Odoo cannot properly generate the request for quotation.

Two details from the 20.0 docs are worth knowing. Since Odoo 19.0, the Buy and Manufacture routes are hidden from the Routes field by default and are applied automatically based on the product's configuration — a product with a BoM is treated as manufactured. And if some components are themselves manufactured sub-assemblies, give them their own BoMs; a multi-level BoM lets the top-level order pull sub-assembly production into the same flow rather than leaving planners to create those orders by hand.

While you are on the BoM, set the timing fields on its Miscellaneous tab: Manufacturing Lead Time (how many days production takes) and Days to prepare (how many days in advance MOs should be created so components can be replenished or sub-assemblies built).

Step 2: Confirm the sales order — the MO creates itself

The daily workflow starts in Sales. Create a quotation, add the customer and the MTO product, and confirm it. Two things appear at the top of the confirmed sales order as smart buttons: the delivery order, and a Manufacturing button for the linked MO. By default, the documentation notes, the MO is confirmed immediately when the sales order is confirmed, with its Components and Work Orders tabs populated from the BoM.

New in Odoo 20: on the Manufacturing operation type you can now choose whether procurement creates draft or confirmed manufacturing orders. A shop that wants a planner to review every order before it hits the floor — checking dates, quantities, and component availability — can have MTO generate drafts instead of live orders. That one setting changes MTO from a fully automatic pipeline into a review queue, without any customisation.

Also new in 20, manufacturing orders are planned as soon as possible by default, and when several orders are planned together, their sequence in the list sets the scheduling priority. For an MTO shop juggling rush orders, that means the order you drag to the top of the list is the order the plan treats as most urgent.

Step 3: Produce — work orders, steps, and the floor

How production is physically organised is set per warehouse, not per product: one-step manufacturing (a single MO with transfers for components out and finished goods in), two steps (pick components, then manufacture), or three steps (pick, manufacture, then store the finished product). An MTO shop that stages materials usually picks two or three steps; a simple assembly bench can stay at one.

On the MO itself, operators work through the Work Orders tab, or open the Shop Floor module from the MO's smart button. Starting a work order starts a timer; completing it records the time actually taken. After all work orders are done, the MO is completed with the Produce button and the finished units are registered into inventory, ready for the delivery linked to the sales order.

Three Odoo 20 changes matter on this step:

  • Continuous production. Produced quantities can now be recorded on work orders, and if Continuous Production is enabled on the BoM, the next operation can start as soon as some quantity is ready instead of waiting for the whole batch — a real lead-time saving for MTO work with deadlines.
  • One Produce button. The old separate “Produce” and “Produce All” buttons have been replaced by a single Produce button across Manufacturing, Shop Floor, and Barcode. Partial production is handled by entering the quantity produced, with a consumption warning if the materials consumed do not match the quantity produced.
  • Splittable manufacturing orders. An ongoing MO can be split so the remaining quantity is produced later. If a customer accepts a partial shipment, or a machine goes down mid-order, you can finish part now and push the balance into a separate MO instead of holding the whole delivery hostage. Backorders of planned production are also planned automatically on creation in 20, so the split-off remainder stays visible in the plan.

Visibility improves too. The redesigned manufacturing order Kanban groups cards by scheduled week and shows component status, active work center, deadline, and remaining time. A new To Replenish filter on the MO overview surfaces orders whose components still need to be ordered — the classic MTO bottleneck.

Step 4: Deliver, and handle changes without breaking the chain

Once production is done, go back to the sales order, open the Delivery smart button, and validate the delivery. The chain — SO, MO, delivery — stays linked the whole way, which is what makes status questions from customers answerable in seconds.

Change handling is where MTO discipline matters, and the documentation gives two warnings worth printing on the wall:

  • Do not cancel the MO to change it. An MTO-generated MO is meant to fulfil its specific sales order. If you cancel it, Odoo does not automatically generate a replacement, and a manually created substitute cannot be linked back to the sales order through the smart button. If demand changes, edit the MO's quantity or date instead of cancelling it.
  • Cancelling the sales order does not cancel the MO. The delivery order is cancelled automatically, but the RfQ or MO stays active, with a warning in its chatter noting the sales order cancellation. Someone has to decide: cancel the MO manually, or keep the finished product for another order. An MTO shop that never checks will quietly accumulate orphan production.

When MTO is the wrong choice

MTO fits customised, configured, or expensive products where stocking finished goods is waste. It fits poorly when customers expect same-day shipping of standard items, when component lead times are longer than customers will wait, or when your BoMs are not yet accurate — MTO automates whatever the BoM says, including its mistakes. Many shops run a hybrid: standard products make-to-stock with reordering rules, and only the customised line on MTO. Odoo supports both in the same warehouse; the choice is per product, on the route.

Set up carefully — route enabled, BoM in place, lead times honest, draft-versus-confirmed decided — and the Odoo 20 version of this flow is genuinely close to hands-off: the order creates the work, the plan sequences it, and the delivery closes the loop.

Further reading

Leave a Comment