Using Routes and Rules

In Odoo there are several different ways to ensure that you have sufficient stock (e.g. to satisfy customer orders).

  1. Make to Order (MTO)
    • Note: the description for the MTO Route changed in Odoo 12 from “Make to Order” to “Replenish on Order (MTO)” so we’ll use MTO as an abbreviation.
    • For each customer order, Odoo can create a matching Purchase Order (if you buy the product) or Manufacturing Order (if you make it).
    • Demand can also come from a Manufacturing Order. You may purchase or manufacture a component.
    • Odoo can consolidate supply so that one PO is for multiple demand orders (you can configure this behaviour, as explained below).
  2. Make-to-Stock
    • Manufacture or purchase based upon a plan (you could use the Odoo MPS app for this).
  3. Replenishment
    • This uses re-ordering rules (for products). Odoo will create draft Purchase Orders (Requests for Quotations – RFQ) or Manufacturing Orders based on total demand. This can be configured and it has been enhanced in Odoo 14.
      • Replenishment uses Routes and it’s important to have the correct “Preferred Route” setup

Note that Replenish on Order (MTO) is not available by default in Odoo 14 because the recommended approach is to use the new replenishment tool. However, it is easy to reactivate this route and there are some improvements in version 14.

A Route is simply a collection of Rules. It’s the Rules that control what happens. Some Routes contain a series of related rules, but they are linked by the Supply Method (see below), and not because they are in the same Route.

The “Replenish on Order” Route is a collection of unrelated rules that control different transactions.

Configuration of Routes

As ever, automation can sometimes be confusing so it’s important to understand the configuration options that exist within Odoo.

For example:

  1. If you buy from vendors on an MTO basis, an RFQ that was created for one sales order you may find that Odoo has updated it with demand from another sales order. Maybe that’s what you want, but it is possible to keep them separate.
  2. Similarly, if you create RFQs manually and also use reordering rules you might find that an RFQ you created manually is updated by the scheduled job. Here’s how to stop that happening.
  3. MTO logic changed in Odoo 13 so that (as standard) an order is NOT created if there is stock available. This is a useful feature, but you might prefer the way it worked in Odoo 12 and earlier (see below).

Let’s start with the basics.

Ensure that you have the Inventory Administrator role (as shown right)

Then navigate to Inventory Setting and enable “Multi-step Routes:

Once “Multi-Step Routes” are selected, you can view all the Routes in Inventory / Configuration / Routes

Shown above are the three “basic” Routes in Odoo 13 and earlier (there are others, including “Drop Shipment“).

As noted above, in Odoo 14 the MTO route has been archived, but it’s easy to re-activate it.

These basic routes can all be selected for products, and note that more than one can be selected for a product / product category.

  1. This could be used if a product can either be made or made or purchased
  2. It is used for Replenish On Order / Make to Order (MTO), so a product can be “buy to order”:

In this example, the product is MTO and Buy, which means that when you confirm a Sales Order, Odoo will attempt to either add this demand to an existing RFQ (draft Purchase Order) or create a new RFQ.

  • In later versions of Odoo, you can use “Drop Shipment” instead. This is MTO + Buy, but the goods are shipped direct from the vendor to the customer.

Similarly, MTO + Manufacture means that you will manufacture to order.

Where can Routes be used?

You can choose where each route can be used:

These are the four options:

  • Product Categories
  • ​Products
  • ​Warehouses ​
  • Sales Order Lines
  1. It can be convenient to setup the standard routes on product categories so that users don’t have to remember to specify them for each product, or you could set routes automatically on products (using Automated Actions).
  2. Some routes should be set for warehouses. This is used for inventory and manufacturing options (for 1, 2 or 3 steps), but these are enabled from the warehouse maintenance screen.
  3. You can also set routes on Sales Order lines, which would be useful if you normally rely on reordering rules, but sometimes want to use MTO – or maybe if you normally manufacture an item but sometimes buy it.

Configuration options

Create separate RFQs

It’s possible to configure Odoo to always create a new RFQ and not add the demand to an existing RFQ. Here’s how to do it:

As explained above, ensure that “Multi-Step Routes” is enabled in Inventory settings. Then enable Developer Mode and navigate to Inventory / Configuration / Rules

Select the “Buy” rule (note that if you have multiple warehouses each may have its own “Buy” rule) – to see this, ensure that you are in Developer Mode.

Change “Propagation of Procurement Group” to Propagate as shown below. Now you should find that the MTO method will generate a separate RFQ for each sales order

There are three options for “Propagation of Procurement Group”:

  • Leave Empty – this will merge requirements
  • Propagate (see above)
  • Fixed – this allows you to specify a Procurement Group

Reordering Rules

An extra step is required if you are using Reordering Rules and want to create separate RFQs.

  • In Odoo 13 and earlier, navigate to Inventory / Master Data / Reordering Rules
  • In Odoo 14, navigate to Inventory / Configuration / (Products) / Reordering Rules

You should create a new Procurement Group to be used by the Reordering Rules. The same one can be used for all the Reordering Rules, and you can set this as a default.

It is possible to create Reordering Rules automatically for new products and you could add the Procurement Group field to this Automated Action.

Should MTO check stock first?

In Odoo 12 and earlier, Make to Order (MTO) rules would not check for available stock (so an RFQ or draft Manufacturing Order would be created regardless of whether any inventory was available).

In Odoo 13 the inventory balance is checked first, but you can change this by configuring Inventory Rules (and note that there are big changes in Odoo 14).

As explained above, enable Multi-Step Routes and navigate to Inventory / Configuration / Rules:

Select the Replenish On Order (MTO) rule for customers.

There are three options for Supply Method:

  1. Starting from Odoo 13, the standard setting for Supply Method on Replenish On Order (MTO) is the third option: “Take from Stock, if unavailable, trigger another rule
    • The explanation (in the top right) tells you that if stock is not available (in the specified Source Location) a rule will be triggered.
      • This will create an RFQ (draft Purchase Order) or add to an existing RFQ (see above for how to change that behaviour). Note that Odoo will not split the demand – if you need 100 and only have 50 in the source location, an RFQ will be created for 100.
  2. The first option, “Take from Stock” is not MTO so that isn’t correct.
  3. Trigger another rule” is the way it worked in Odoo 12 and earlier:
    • An RFQ will be created even if stock is available, but note that (as explained above) the demand may be consolidated with an existing RFQ.
      • Odoo provides a simple explanation in the top right of the screen

The same options are available for Manufacturing Orders. Simply select the appropriate rule.

Drop Shipment

This is a useful route that effectively combines MTO and Buy. This is when your vendor delivers direct to your customer.

Navigate to Purchase / Configuration / Settings:

Now Odoo will automatically create RFQs and a single inventory transaction for the goods to be shipped from the vendor to the customer (without this there would be two inventory transactions, in and out).

61 thoughts on “Using Routes and Rules

  1. Hi All,
    I am using version 12 so can I use 3 supply methods? Currently only having 2
    My MO did not get from stock first otherwise will issue the new MO



    1. No, in Odoo 12 the stock is not checked and the MO will be created even if there is stock available. The new functionality is in Odoo 13.


      1. Hi Chris,
        Thanks for your information. In ver13 we will set the same with 12? If you have any tips please sharing

        Thanks a lot


  2. I have multi-level BoM (6 levels) and I have the quantity in parent products but it still generate to childs BoM for MO and not get the available quantity of parent products.

    I want system get the available qty from parent first and if out of stock then will generate to MO. thanks


    1. I am not so familiar with the details of how this works with multi-level BOMs, and don’t currently have time to investigate. You could try asking this question at the Odoo Help Forum.


  3. Many thanks for taking the time to write these articles. They are a real life saver. Question, how can one use “Take From Stock, if unavailable, Trigger Another Rule,” but only have the MO or PO generated for the difference in quantity needed. E.g you have 4 pieces of a product in stock but want to sell 5. The rule creates a MO or PO for all 5 instead of just the 1 that is needed to fulfill the order. Is there a solution to have it creating just the needed items to cover the deficit?


      1. Thanks Chris,

        Unfortunately I am using odoo online. So it’s not possible to install custom modules.


    1. i think that if it’s not set up correctly the reordering rule, this is what is happening, is creating PO or MO for the quantity you sold !
      Try to add a reordering rule of min : 0 and max:0, is something similar to MTO, but is taking in account what you have in stock, and creating PO just for the difference


  4. Hi Chris
    Thank you for the link to the app “Stock MTS+MTO Rule”

    Is there guideline available to configure this app.

    Please suggest


    1. I haven’t used it, but it seems fairly straightforward. There usually isn’t much documentation for Odoo add-ons.


  5. Hi Chris,
    I have a problem, I have configured reordering rules for my Warehouse A(WHA) that resupply from a Central Warehouse (CEN) with his own route.
    I run the scheduler and have WHA transfer with their respective procurement products, then I complete the first part transferring products CEN->transit location and the Transit location -> WHA is ready to receive the goods because it will arrive next day.
    The problem comes when I run again the scheduler at midnight, since a few more products have been sold in WHA it creates a new operation from the CEN which is fine but MODIFIES my still pending transfer from Transit location -> WH and changes the status from ready to waiting. This creates a lot of issues and confusing with the users.
    Can you give me any advice on this problem? For me it looks like a bug.
    Thanks in advance and keep up the great work on this blog. Kudos!


    1. I think it’s a missing feature – it should be possible to change this behaviour the same way as it is for MTO (as explained above for RFQs).


    2. Hi Juan,

      Did you ever find a solution for this?
      I am working a similar issue, and I believe what might be the cause for this behaviour is, that there is no (unique) source document linked to the transfer you (and I) are setting up.

      As such, even though the transfers have set propagate option: Expand, the system will only expand for each source document. If multiple requests have the same source document, or there is no source document, it will effectively function as “leave blank”. This becomes an issue only when you are working with custom routes, as automatic resupply routes will have a source document generated, and as will RFQ’s and SO’s.

      If you can recognize this behavior, please let me know, so we can raise it with Odoo. I agree with Chris that this is a design flaw (probably more likely than a bug. Odoo will say this is “working as intended”).

      @Chris, correct me if I am wrong here. I am not too Odoo-experienced 🙂


  6. I need to create my own route in MO where my user will transfer the products to the pre-production location manually. Now I just need two steps Manufacture & Store finished goods. Odoo has 3 ways for doing this where product is Step1: (manufactured) Step2: (picked and manufactured) OR 3steps: (Picked, manufactured & then Store Finished Product).


  7. Hello Chris, is it possible for Odoo MRP to simultaneously (1) do MTO while checking stock, and (2) create matching PO/MO/WO (which populate the “created_purchase_line_id” or “created_production_id” field in the MO, similar to when you do MTS)?

    I am trying to avoid reordering rule (RR), as the source document of a PO triggered by a RR is also the RR. To the purchase users, populating the source field with the RR is rather meaningless (basically the system is telling them to buy X because X is out of stock). However, if the source of PO can display the original MO, it will make a lot more sense.

    P.S. Thanks for putting together this guide – It provided a lot of critical information which I think Odoo either neglected or over-complicated in their documentation.


      1. For example, let’s consider this scenario:

        – We have a product named “A”, which is made of two Product “B”.
        – However, we only have one unit of “B” in stock
        – User trigger the manufacture process by creating a MO

        This is my expected behavior:
        Requirement #1 – Odoo should create a PO for 1 unit of B.
        Requirement #2 – The “Source Document” field of PO should display the MO name (e.g. WH/MO/0001)

        Current behaviour:
        – If I configure product A as a MTO product, Odoo will create a PO for 2 unit and the PO source document will display the MO name (Requirement #2 is fulfilled but #1 is not)
        – If I configure product A with a reordering rule, Odoo will create a PO for 1 unit and the PO source document will display the reordering rule name (Requirement #1 is fulfilled but #2 is not)

        Is there a way we can fulfill both requirements simultaneously? I hope that make sense…


      2. Yes, I think that’s the limitation. MTO is for the full quantity, not the difference between the demand and the available quantity.


    1. The forecast report (V14) can tell why the reordering rule created the PR. If you really need that to have the MO number displayed as source to the PR, the set the product to MTO.


  8. Hi Chris,

    I have a manufacturer product “product” which consist of:
    – 2 subproduct1 (minimum quantity from vendor 5)
    – 3 subproduct2 (minimum quantity from vendor 10)

    I am created BOM structure and manufacturing order. In stock I don’t have 0 product, subproduct1, subproduct2.

    System automatic generated purchase order for vendor, but in this purchase order the unit price are 0. Because minimum quantity for buying in vendor are 5 (subproduct1) and 10 (for subproduct2).

    My question is:
    How I can generate automatic purchase order with minimum quantity of product from vendor?

    Need 5 for subproduct1, and 10 for subproduct2.

    Thank you very much.


    1. I think that’s trying to have the features of Replenishment / Reordering Rules and MTO together, which isn’t possible!


      1. Reorder rules only apply for the quantity in stock but I want to trigger from Manufacture order to Purchase order and then it will get the min_qty in Vendor pricelist


    2. What I tested in V14 was MTO for manufacturing: Finished product and semi-finished was set to MTO, Raw material was not, and used replenishment rule. It worked fine.
      Also I can set only the finished product to MTO, and the semi-finished to use replenishment.
      And the third option: Only the semifinished as MTO. Then created directly when manufacturing order is created.
      So from V14, you can set up a very flexible flow.


  9. Hi Chris,

    I’m using Odoo14 and wanted to have split RFQs when my reordering rules is triggered.

    Unfortunately, I have no luck on that even I followed the steps provided, which is:

    1) Set BUY rule’s propagation of procurement group to “Propagate”
    2) Create a product with Buy route and reordering rules with min and max = 0
    3) Create procurement group for the reordering rules

    When I confirm 2 SO with same product, it still merge demand into single RFQs.

    Is there any steps I missed?


    1. Yes, that’s how it works. Replenishment is designed to consolidate demand. The only workaround is to run replenishment and confirm the RFQ before the second SO is confirmed.

      But Replenish on Order (MTO) does what you want, and you can specify that on the Sales Order Line if you want to use replenishment normally but MTO for selected orders.


  10. Hello

    I am using odoo 14 and would like to Create separate RFQs however in version 14 I there is no menu “master data” ie Inventory / Master Data / Reordering Rules.

    can anyone help


      1. Thanks Chris.

        just a note … in Odoo14 the menu seems to have changed I can find it in

        Inventory / configuration / Reordering Rules


  11. Hi, I am using Odoo 12. I have MTO & BUY setup. But my Problem when I confirm on the Sales Order the Delivery becomes Ready. When I click Confirm on Sales Order it should be waiting on another operation. When I receive the Make to order Items the Delivery should be ready. I’ve tried on two different ODoo installation and it it the same on both


  12. Hi,
    I have say an existing PO from a Vendor XYZ with product A and B at RFQ Level.

    I configure the Reordering rule for Product C and D and under the same vendor.

    Odoo V14 is creating a new RFQ when the scheduler is run rather than adding it to the old RFQ.

    Does anyone had this issue and how to solve it?


  13. Hello, With routes can I config that a purchased product when it is received, triggers a Manufacture Order or an Unbuld Order?

    I have a process where a piglet is bought, and when it arrives it should be cut in parts and generate (by-products), then those by-products are used in other processes…
    I am using Odoo 12 Community version


    1. It might be possible. Routes and Rules are highly configurable and all you need is a trigger (e.g. receipt of product X into location Y). You can select Manufacturing Orders but not Unbuild Orders.


  14. Hey, thank you for this article, it really helped me. I have however a problem with POs automatically generated from an SO via “make to order”. When i have many products on my sales order, it will create one PO for each product whereas i would like to have it into one place. So that my SO generate only one PO with every products inside. Can you please help me with that ?
    Thank you again.


    1. If all the products have the same supplier (vendor) then MTO will create a single PO.

      “Propagation of Procurement Group” on the Rule can change whether demand from different Sales Orders is combined, but it shouldn’t split the demand for a single SO.


  15. Hi,

    We are using odoo13 community version .We would like to know the routes applicable to subcontracting process products and also would like to know whether reordering rules are applicable to subcontracting process products.


  16. Odoo 15. I notice that when RTO is set, and a SO has triggered the MO, a MO smart button appears on the SO. This is very handy for sales staff to gauge progress when the customer calls for an update. When instead, a replenishment rules is set: min=0, max=0, quantity=1,rule=auto, the MO is correctly created however there is no smart button on the originating SO – at least not out of the box.
    For this reason, I prefer to unarchive the RTO route and select it on manufactured products.


  17. I have been very critical to how Odoo focused so much on use of MTO earlier. MTO might give a huge mess in logistics, if there where unexpected changes in the supply chain. (Differences in manufacturing qty, cancel or changes of sales order etc.) Rem: This was also the case with SAP R/3…

    Now I have tested carefully in V14, and there are many changes, so the process are now much more flexible.
    You can take from existing stock – if you reduce quantity of the automatic created MO or PR. You can manufacture / purchase or deliver more ore less than the orginal order. Carefull if you purchase or manufacture more than ordered. You will have to manage that stock or the order, but fully possible to do.
    You can also have MTO of only part of the supply chain: Like only for the finished product in manufacturing, but not for the components.

    We will start using it .


  18. Hi Chris,
    Thanks for your excellent blog. Odoo v14 and I have one small (but annoying) issue and I cant seem to extract the answer from here (I may well be missing something)
    – My products have reordering rules: stock below X -> triggers RFQ
    – But my RFQs don’t merge, they are always separate, even when there is only one possible vendor.

    Do you know how i can set my RFQs to collate / merge (when they have not been confirmed)?


  19. Hi Chris,

    Thanks for your sharing your knowledge.

    I am using 16. We manufacture products to order in most cases but occasionally there is one finished product that goes to stock.

    When we create a quote, on the quote form there is an ‘Available’ column represented with the a small line graph symbol. Hovering over this shows an ‘Expected delivery’ date based on manufacturing lead time and states ‘this product is replenished on demand’. What it doesn’t show is that there is 1 unit available in stock.

    If the quote is for 1 unit, it will still show an ‘expected delivery’ based on manufacturing lead time rather than, 1 unit available.

    When the quote is confirmed, a delivery will be created without creating an MO as Odoo does want to consume the stock unit first. But by that time sales will already have quoted a lead time to the customer based on the manufacturing lead time in Odoo.

    Do you know if there is a way to resolve this, maybe by modifying routes?

    I apologise if this isn’t related enough to the existing topic, please let me know if there is somewhere more relevant to reference.


    1. I haven’t tested this scenario in 16, but I don’t find the availability chart very useful. I don’t think any configuration will solve this, unfortunately, though someone else may have ideas.


      1. I find the availability chart very usefull in many context in supply chain management. To see the details of incoming and outgoing on a material and easy identify where is the problem. (We had the same in SAP R/3. I still remember the transaction code MD04…)


    2. I did a little testing in V16. If ypu set the route “Replenish to order (MTO) as selectable on sales orders, you can control wether you launch MTO or not from the sales order item when you confirm. It looks to me that with that setting, you must specify MTO on the sales order line. It does not take it as a default from product. So maybe a disadvantage also.
      Anyway, what you choose might depend on how common the situation is for you.


      1. Thanks Lars, but I just tested this in a demo database, and it seems to be the same as 15. If it’s specified on the Product or Product Category it doesn’t need to be selected on the SO Line. Wondering why you are getting a different result!


      2. Hi Lars,

        Thanks for sharing.

        I’ve had some success with this. Our products will be set as MTO as standard and is set as such on the product, I also made the route ‘Manufacture’ selectable on Sales Order Lines.

        We use MTO as this will be the scenario in the majority of our orders.

        So now when I create a quote if I want to query availability of any of the lines, I can select ‘Manufacture’ from the drop down on that line. This makes the availability display the quantity on hand.

        The good thing about doing it this way is if the sales person forgets to deselect “manufacture” from the line, an MO will still be created, if there is not the available stock on had, on the confirmation of the SO.

        This satisfies our requirements.

        Thank you very much


  20. Easy to understand. I was wrong. Sometimes I get fooled by Odoo. Change settings in one open browser tab and then test in another. The new setting is not active on that open browser tab…
    So tested again and found that it acts like this:
    – Set MTO as selectable for sales order. And do not flag the product as MTO. Then you have the option to select MTO or not on the sales order. But by default it will not be MTO.
    – If you set MTO on the product you can not control it on the sales order. It will always be MTO. You are able to ship free stock if you have. But it will not be taken into account for creating the manufacturing order / purchase order. But you can manually adjust the qty.

    I have not tested in V15, but are working on MTO in V14 for a client. Testing with over delivery / underdelivery: If you manufacture more than planned, you need to make sure to have special attention on it. It is possible to deliver more than planned, but you will have to adjust manullay the delivery. This is mostly for process manufacturing. In many businesses minor variances in qty delivered are accepted.


  21. Hi, this is indirectly related and I hope it OK to ask this question here. I am trying to get my head around the whole Routes, Rules, and Operations Types in Odoo and, to be honest, I just don’t understand them. Can anyone point me to a good tutorial or something please? Thank you.


    1. Operation Types are different types of inventory transfer (Receipts, Issues, etc.).
      Rules define processes (such as Buying or Making) and they use Operation Types.
      Routes are collections of Rules.


      1. Thank you Chris. I know it not correct but, it appears to me from your description that Operations Types and Routes are the same thing. They both are a bundle of rules.
        I know there is more to it. What are the scenarios for the use of each? What are the triggers?
        Odoo documentation and tutorials discuss the matter and this site (you) are helping to fill the gaps, however I feel they need further dumbing down for simple people like me.

        If I can find out exactly how each of these worked, I would love to write a blog including examples so that other people could benefit too. Maybe a set of end-to-end use cases which includes the rationale behind each choice…


      2. They are both “rules” in the sense that they allow you to configure how Odoo works. But they aren’t the same thing!

        Operation Types control how different inventory operations are processed. Every transfer must use an Operation Type, which defines whether it’s a receipt or an issue or manufacturing (etc.) plus other “rules” for inventory processing.

        Routes & Rules do many different things. At the most basic level they determine how receipts and deliveries are processed (1-step, 2-step or 3-step). Or you can define complex rules that help to customize and automate inventory flows in Odoo.

        A transfer may trigger the operation of Routes & Rules, but somewhat indirectly (the Operation Type defines the source and destination locations, and these are used in the Rules).

        Maybe what’s confusing is that you could use Odoo without really understanding either Operation Types or Routes & Rules, since the basic setup does work, but then if you want anything non-standard you need to understand both. And then the terminology becomes important.


      3. Great explanation Chris. Thank You. I might just be starting to understand. Not using them everyday makes it hard to recall what, how and when to use each. I really need to write it all down somewhere for future reference.


      4. For sure the combination of Operations, Rules and Routes are confusing. But a very strong tool to control you flows in a warehouse. For my client I created a new flow where you can choose beteween 1 step or 2 step goods receipt on the purchase order. I used 7 hours from idea to implementation. 2 hours spent on “why the h.. does it not work”, until I found one important field that was not flagged. Anyway I can share with you the document that include the confirguration used. (It was written in Norwegian, and I used Google Translate to get an English version). Stored on my Google disk:


Leave a Reply to Chris Tringham Cancel reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s