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 MTO 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.

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. The first step is to enable Routes in Inventory Settings:

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.

  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) and 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.

Navigate to Inventory / Master Data / 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).

29 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

    Thanks

    Like

    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.

      Like

      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

        Like

  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

    Like

    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.

      Like

  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?

    Like

      1. Thanks Chris,

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

        Like

  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

    Like

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

      Like

  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!

    Like

    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).

      Like

    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 🙂

      Like

  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).

    Like

  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.

    Like

      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…

        Like

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

        Like

  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.

    Like

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

      Like

      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

        Like

  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?

    Like

    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.

      Like

Leave a Reply

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

WordPress.com Logo

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

Google photo

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

Twitter picture

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

Facebook photo

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

Connecting to %s