diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst index 9fa2f850c..031a86cf3 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst @@ -2,121 +2,138 @@ Replenish on order (MTO) ======================== +.. |SO| replace:: :abbr:`SO (sales order)` +.. |SOs| replace:: :abbr:`SOs (sales orders)` +.. |MO| replace:: :abbr:`MO (manufacturing order)` +.. |PO| replace:: :abbr:`PO (purchase order)` .. |MTO| replace:: :abbr:`MTO (make to order)` .. |RFQ| replace:: :abbr:`RFQ (request for quotation)` .. |BOM| replace:: :abbr:`BOM (bill of materials)` *Replenish on order*, also known as *MTO* (make to order), is a replenishment strategy that creates -a draft order for a product every time a sales order is created for it. For products that are -purchased from a vendor, a request for quotation (RFQ) is created, while a sales order for a product -manufactured in-house triggers the creation of a manufacturing order. The creation of a |RFQ| or -manufacturing order occurs every time a sales order is created, regardless of the current stock -level of the product being ordered. +a draft order for a product every time it is required to fulfill a sales order (SO), or when it is +needed as a component in a manufacturing order (MO). -Unarchive the Replenish on Order (MTO) route -============================================ +For products that are purchased from a vendor, a request for quotation (RFQ) is created to replenish +the product, while an |MO| is created for products that are manufactured. The creation of an |RFQ| +or |MO| occurs every time an |SO| or |MO| that requires the product is confirmed, regardless of the +current stock level of the product being ordered. + +.. important:: + In order to use the |MTO| route, the :guilabel:`Multi-Step Routes` feature must be enabled. To do + so, navigate to :menuselection:`Inventory app --> Configuration --> Settings`, and tick the + checkbox next to :guilabel:`Multi-Step Routes`, under the :guilabel:`Warehouse` heading. + + Finally, click :guilabel:`Save` to save the change. + +Unarchive MTO route +=================== By default, Odoo sets the |MTO| route as *archived*. This is because |MTO| is a somewhat niche workflow that is only used by certain companies. However, it is easy to unarchive the route in just a few simple steps. -To do so, begin by navigating to :menuselection:`Inventory --> Configuration --> Routes`. On the -:guilabel:`Routes` page, click the :guilabel:`Filters` button and select the :guilabel:`Archived` -option. This shows all routes that are currently archived. +To do so, begin by navigating to :menuselection:`Inventory app --> Configuration --> Routes`. On the +:guilabel:`Routes` page, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon on the right +side of the search bar, and click the :guilabel:`Archived` filter to enable it. .. image:: mto/archived-filter.png :align: center :alt: The archived filter on the Routes page. -Enable the checkbox next to :guilabel:`Replenish on Order (MTO)`, then click the :guilabel:`Action` -button to reveal a drop-down menu. From the drop-down menu, select :guilabel:`Unarchive`. +After enabling the :guilabel:`Archived` filter, the :guilabel:`Routes` page shows all routes which +are currently archived. Tick the checkbox next to :guilabel:`Replenish on Order (MTO)`, then click +the :icon:`fa-cog` :guilabel:`Actions` button to reveal a drop-down menu. From the drop-down menu, +select :guilabel:`Unarchive`. .. image:: mto/unarchive-button.png :align: center :alt: The unarchive action on the Routes page. -Finally, remove the :guilabel:`Archived` filter from the :guilabel:`Search...` bar. The -:guilabel:`Routes` page will now show all available routes, including :guilabel:`Replenish on Order -(MTO)`, which is now selectable on the inventory tab of each product page. +Finally, remove the :guilabel:`Archived` filter from the search bar. The :guilabel:`Routes` page now +shows all unarchived routes, including :guilabel:`Replenish on Order (MTO)`, which is selectable on +the *Inventory* tab of each product page. -.. image:: mto/unarchived-mto.png - :align: center - :alt: The MTO route appears on the Routes page after unarchiving it. - -Configure a product to use the MTO route -======================================== +Configure product for MTO +========================= With the |MTO| route unarchived, products can now be properly configured to use replenish on order. -To do so, begin by going to :menuselection:`Inventory --> Products --> Products`, then select an -existing product, or click :guilabel:`Create` to configure a new one. +To do so, begin by going to :menuselection:`Inventory app --> Products --> Products`, then select an +existing product, or click :guilabel:`New` to configure a new one. On the product page, select the :guilabel:`Inventory` tab and enable the :guilabel:`Replenish on -Order (MTO)` route in the :guilabel:`Routes` section, along with one other route. +Order (MTO)` route in the :guilabel:`Routes` section, along with the :guilabel:`Buy` or +:guilabel:`Manufacture` route. .. important:: The :guilabel:`Replenish on Order (MTO)` route **does not** work unless another route is selected as well. This is because Odoo needs to know how to replenish the product when an order is placed - for it (buy it, manufacture it, etc.). + for it (buy or manufacture it). .. image:: mto/select-routes.png :align: center :alt: Select the MTO route and a second route on the Inventory tab. -If the product is purchased from a vendor to fulfill sales orders, enable the :guilabel:`Can be -Purchased` checkbox under the product name. Doing so makes the :guilabel:`Purchase` tab appear -alongside the other settings tabs below. +If the product is purchased from a vendor to fulfill |SOs|, enable the :guilabel:`Can be Purchased` +checkbox under the product name. Doing so makes the :guilabel:`Purchase` tab appear alongside the +other tabs below. -Select the :guilabel:`Purchase` tab and specify a :guilabel:`Vendor` and the :guilabel:`Price` they +Click the :guilabel:`Purchase` tab and specify a :guilabel:`Vendor` and the :guilabel:`Price` they sell the product for. -.. image:: mto/specify-vendor.png - :align: center - :alt: Enable "Can be Purchased" and specify a vendor. +.. important:: + Specifying a vendor is essential for this workflow, because Odoo cannot generate an |RFQ| without + knowing who the product is purchased from. -If the product is manufactured, make sure that it has a bill of materials (BOM) configured for it. -To do so, click the :guilabel:`Bill of Materials` smart button at the top of the screen, then click -:guilabel:`Create` on the :guilabel:`Bill of Materials` page to configure a new |BOM| for the -product. +If the product is manufactured, make sure it has a bill of materials (BOM) configured for it. To do +so, click the :guilabel:`Bill of Materials` smart button at the top of the screen, then click +:guilabel:`New` on the :guilabel:`Bill of Materials` page to configure a new |BOM| for the product. -On the blank |BOM| form, add the components used to manufacture the product on the -:guilabel:`Components` tab, along with the operations required for the manufacturing workflow on the -:guilabel:`Operations` tab. +.. seealso:: + For a full overview of |BOM| creation, see the documentation on :doc:`bills of materials + <../../../manufacturing/basic_setup/bill_configuration>`. -Finally, click :guilabel:`Save` to save the |BOM|. - -Fulfill a sales order using the MTO route -========================================= +Replenish using MTO +=================== After configuring a product to use the |MTO| route, a replenishment order is created for it every -time a sales order including the product is confirmed. The type of order created depends on the +time an |SO| or |MO| including the product is confirmed. The type of order created depends on the second route selected in addition to |MTO|. -For example, if *Buy* was the second route selected, then a purchase order is created upon -confirmation of a sales order. +For example, if *Buy* was the second route selected, then a |PO| is created upon confirmation of an +|SO|. .. important:: When the |MTO| route is enabled for a product, a replenishment order is always created upon - confirmation of a sales order. This is the case even if there is enough stock of the product - on-hand to fulfill the sales order, without buying or manufacturing additional units of it. + confirmation of an |SO| or |MO|. This is the case, even if there is enough stock of the product + on-hand to fulfill the |SO|, without buying or manufacturing additional units of it. -While the |MTO| route can be used in unison with a variety of other routes, the *Buy* route is used -as the example for this workflow. Begin by navigating to the :menuselection:`Sales` app, then click -:guilabel:`Create`, which opens a blank quotation form. +While the |MTO| route can be used in unison with the *Buy* or *Manufacture* routes, the *Buy* route +is used as the example for this workflow. Begin by navigating to the :menuselection:`Sales` app, +then click :guilabel:`New`, which opens a blank quotation form. -On the blank quotation form, add a :guilabel:`Customer`, then click :guilabel:`Add a product` under -the :guilabel:`Order Lines` tab, and enter a product that has been configured to use the *MTO* and -*Buy* routes. Click :guilabel:`Confirm` and the quotation is turned into a sales order. +On the blank quotation form, add a :guilabel:`Customer`. Then, click :guilabel:`Add a product` under +the :guilabel:`Order Lines` tab, and enter a product configured to use the *MTO* and *Buy* routes. +Click :guilabel:`Confirm`, and the quotation is turned into an |SO|. -A :guilabel:`Purchase` smart button now appears in the top-right corner of the sales order. Clicking -it opens the |RFQ| associated with the sales order. +A :guilabel:`Purchase` smart button now appears at the top of the page. Clicking it opens the |RFQ| +associated with the |SO|. -Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a purchase order. A green -:guilabel:`Receive Products` button now appears at the top of the purchase order. Once the products -are received, click :guilabel:`Receive Products` to register them into inventory. +Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a |PO|. A purple +:guilabel:`Receive Products` button now appears above the |PO|. Once the products are received, +click :guilabel:`Receive Products` to open the receipt order, and click :guilabel:`Validate` to +enter the products into inventory. -Return to the sales order by clicking the :guilabel:`SO` breadcrumb, or by navigating to -:menuselection:`Sales --> Orders --> Orders`, and selecting the sales order. +Return to the |SO| by clicking the :guilabel:`SO` breadcrumb, or by navigating to +:menuselection:`Sales app --> Orders --> Orders`, and selecting the|SO|. -Finally, click the :guilabel:`Delivery` smart button in the top-right of the order to be taken to -the delivery order. Once the products have been shipped to the customer, click :guilabel:`Validate` -to confirm the delivery. +Finally, click the :guilabel:`Delivery` smart button at the top of the order to open the delivery +order. Once the products have been shipped to the customer, click :guilabel:`Validate` to confirm +the delivery. + +.. seealso:: + For information on workflows that include the |MTO| route, see the following documentation: + + - :doc:`resupply_warehouses` + - :doc:`../../../manufacturing/subcontracting/subcontracting_basic` + - :doc:`../../../manufacturing/advanced_configuration/sub_assemblies` diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/archived-filter.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/archived-filter.png index 2c6ff0661..7b2439d3e 100644 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/archived-filter.png and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/archived-filter.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/select-routes.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/select-routes.png index b27ead366..5a1c1b147 100644 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/select-routes.png and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/select-routes.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/specify-vendor.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/specify-vendor.png deleted file mode 100644 index 0e6b85d81..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/specify-vendor.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchive-button.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchive-button.png index fad6335b8..4480460fc 100644 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchive-button.png and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchive-button.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchived-mto.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchived-mto.png deleted file mode 100644 index 5e96507ad..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto/unarchived-mto.png and /dev/null differ