[IMP] Inventory: MTO update

closes odoo/documentation#10977

X-original-commit: 72c6e76906
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
This commit is contained in:
John Holton (hojo) 2024-08-29 14:37:40 +00:00
parent a3a667baa9
commit 2948da8318
6 changed files with 81 additions and 64 deletions

View File

@ -2,121 +2,138 @@
Replenish on order (MTO) 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)` .. |MTO| replace:: :abbr:`MTO (make to order)`
.. |RFQ| replace:: :abbr:`RFQ (request for quotation)` .. |RFQ| replace:: :abbr:`RFQ (request for quotation)`
.. |BOM| replace:: :abbr:`BOM (bill of materials)` .. |BOM| replace:: :abbr:`BOM (bill of materials)`
*Replenish on order*, also known as *MTO* (make to order), is a replenishment strategy that creates *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 a draft order for a product every time it is required to fulfill a sales order (SO), or when it is
purchased from a vendor, a request for quotation (RFQ) is created, while a sales order for a product needed as a component in a manufacturing order (MO).
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.
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 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 workflow that is only used by certain companies. However, it is easy to unarchive the route in just
a few simple steps. a few simple steps.
To do so, begin by navigating to :menuselection:`Inventory --> Configuration --> Routes`. On the To do so, begin by navigating to :menuselection:`Inventory app --> Configuration --> Routes`. On the
:guilabel:`Routes` page, click the :guilabel:`Filters` button and select the :guilabel:`Archived` :guilabel:`Routes` page, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon on the right
option. This shows all routes that are currently archived. side of the search bar, and click the :guilabel:`Archived` filter to enable it.
.. image:: mto/archived-filter.png .. image:: mto/archived-filter.png
:align: center :align: center
:alt: The archived filter on the Routes page. :alt: The archived filter on the Routes page.
Enable the checkbox next to :guilabel:`Replenish on Order (MTO)`, then click the :guilabel:`Action` After enabling the :guilabel:`Archived` filter, the :guilabel:`Routes` page shows all routes which
button to reveal a drop-down menu. From the drop-down menu, select :guilabel:`Unarchive`. 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 .. image:: mto/unarchive-button.png
:align: center :align: center
:alt: The unarchive action on the Routes page. :alt: The unarchive action on the Routes page.
Finally, remove the :guilabel:`Archived` filter from the :guilabel:`Search...` bar. The Finally, remove the :guilabel:`Archived` filter from the search bar. The :guilabel:`Routes` page now
:guilabel:`Routes` page will now show all available routes, including :guilabel:`Replenish on Order shows all unarchived routes, including :guilabel:`Replenish on Order (MTO)`, which is selectable on
(MTO)`, which is now selectable on the inventory tab of each product page. the *Inventory* tab of each product page.
.. image:: mto/unarchived-mto.png Configure product for MTO
:align: center =========================
:alt: The MTO route appears on the Routes page after unarchiving it.
Configure a product to use the MTO route
========================================
With the |MTO| route unarchived, products can now be properly configured to use replenish on order. 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 To do so, begin by going to :menuselection:`Inventory app --> Products --> Products`, then select an
existing product, or click :guilabel:`Create` to configure a new one. 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 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:: .. important::
The :guilabel:`Replenish on Order (MTO)` route **does not** work unless another route is selected 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 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 .. image:: mto/select-routes.png
:align: center :align: center
:alt: Select the MTO route and a second route on the Inventory tab. :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 If the product is purchased from a vendor to fulfill |SOs|, enable the :guilabel:`Can be Purchased`
Purchased` checkbox under the product name. Doing so makes the :guilabel:`Purchase` tab appear checkbox under the product name. Doing so makes the :guilabel:`Purchase` tab appear alongside the
alongside the other settings tabs below. 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. sell the product for.
.. image:: mto/specify-vendor.png .. important::
:align: center Specifying a vendor is essential for this workflow, because Odoo cannot generate an |RFQ| without
:alt: Enable "Can be Purchased" and specify a vendor. 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. If the product is manufactured, make sure it has a bill of materials (BOM) configured for it. To do
To do so, click the :guilabel:`Bill of Materials` smart button at the top of the screen, then click 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 :guilabel:`New` on the :guilabel:`Bill of Materials` page to configure a new |BOM| for the product.
product.
On the blank |BOM| form, add the components used to manufacture the product on the .. seealso::
:guilabel:`Components` tab, along with the operations required for the manufacturing workflow on the For a full overview of |BOM| creation, see the documentation on :doc:`bills of materials
:guilabel:`Operations` tab. <../../../manufacturing/basic_setup/bill_configuration>`.
Finally, click :guilabel:`Save` to save the |BOM|. Replenish using MTO
===================
Fulfill a sales order using the MTO route
=========================================
After configuring a product to use the |MTO| route, a replenishment order is created for it every 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|. second route selected in addition to |MTO|.
For example, if *Buy* was the second route selected, then a purchase order is created upon For example, if *Buy* was the second route selected, then a |PO| is created upon confirmation of an
confirmation of a sales order. |SO|.
.. important:: .. important::
When the |MTO| route is enabled for a product, a replenishment order is always created upon 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 confirmation of an |SO| or |MO|. 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. 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 While the |MTO| route can be used in unison with the *Buy* or *Manufacture* routes, the *Buy* route
as the example for this workflow. Begin by navigating to the :menuselection:`Sales` app, then click is used as the example for this workflow. Begin by navigating to the :menuselection:`Sales` app,
:guilabel:`Create`, which opens a blank quotation form. 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 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 the :guilabel:`Order Lines` tab, and enter a product configured to use the *MTO* and *Buy* routes.
*Buy* routes. Click :guilabel:`Confirm` and the quotation is turned into a sales order. 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 A :guilabel:`Purchase` smart button now appears at the top of the page. Clicking it opens the |RFQ|
it opens the |RFQ| associated with the sales order. associated with the |SO|.
Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a purchase order. A green Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a |PO|. A purple
:guilabel:`Receive Products` button now appears at the top of the purchase order. Once the products :guilabel:`Receive Products` button now appears above the |PO|. Once the products are received,
are received, click :guilabel:`Receive Products` to register them into inventory. 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 Return to the |SO| by clicking the :guilabel:`SO` breadcrumb, or by navigating to
:menuselection:`Sales --> Orders --> Orders`, and selecting the sales order. :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 Finally, click the :guilabel:`Delivery` smart button at the top of the order to open the delivery
the delivery order. Once the products have been shipped to the customer, click :guilabel:`Validate` order. Once the products have been shipped to the customer, click :guilabel:`Validate` to confirm
to confirm the delivery. 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`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB