[IMP] inventory: CRL - replenishment & visibility days

closes odoo/documentation#11444

Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
This commit is contained in:
Felicious 2024-11-21 11:24:21 -08:00
parent 498280b932
commit 91165a7012
18 changed files with 496 additions and 302 deletions

View File

@ -8,35 +8,75 @@ Replenishment
.. |MTO| replace:: :abbr:`MTO (Make to Oder)`
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |SO| replace:: :abbr:`SO (Sales Order)`
In Odoo, there are two strategies for automatically replenishing inventory: *reordering rules* and
the *make to order (MTO)* route. Although these strategies differ slightly, they both have similar
consequences: triggering the automatic creation of a |PO| or |MO|. The choice of which strategy to
use depends on the business's manufacturing and delivery processes.
In Odoo, stock can be replenished one of three ways: *reordering rules*, the *make to order* (MTO)
route, or using the *master production schedule* (MPS).
Terminology
===========
Each replenishment mechanism triggers the creation or suggestion of a purchase order (PO) or
manufacturing order (MO), with the best choice depending on the business process.
.. cards::
.. card:: Reordering rules
:target: replenishment/reordering_rules
:tag: Recommended
:large:
Automatically suggest or generate POs or MOs when stock falls below a minimum level.
.. card:: MTO
:target: replenishment/mto
:tag: Beginner-friendly
Automatically generate POs or MOs when sales orders are confirmed.
.. card:: MPS
:target: ../../manufacturing/management/use_mps
Manage long-term replenishment based on inputted sales forecasts, via a dashboard.
Replenishment strategies
========================
Replenishment report and reordering rules
-----------------------------------------
The replenishment report is a list of all products that have a negative forecast quantity.
Reordering rules are rules that can be set up to maintain a minimum stock level. They are often
configured to support manufacturing or sales requirements. When a product's stock falls at or below
the minimum level, Odoo generates (or suggests) a purchase or manufacturing order to replenish stock
to the maximum level.
*Reordering rules* are used to ensure there's always a minimum amount of a product in-stock, in
order to manufacture products and/or fulfill sales orders. When the stock level of a product reaches
its minimum, Odoo automatically generates a purchase order with the quantity needed to reach the
maximum stock level.
When using automatic reordering rules, Odoo generates a new order. When using manual, Odoo suggests
orders on the replenishment report. For detailed guidance, refer to the :doc:`replenishment report
<replenishment/report>` and :doc:`reordering rules <replenishment/reordering_rules>`.
Reordering rules can be created and managed in the replenishment report, or from the product form.
Key points include:
- :ref:`Automatic reordering rules <inventory/warehouses_storage/auto-rr>`: Automatically create
|POs| or |MOs| when stock falls below the minimum level. While this is convenient, it is less
flexible.
- :ref:`Manual reordering rules <inventory/warehouses_storage/manual-rr>`: Generate suggestions in
the replenishment report for user review, allowing adjustments and batch orders while meeting
deadlines.
- :ref:`Just-in-time logic <inventory/warehouses_storage/just-in-time>`: A strategy to replenish
only what is needed to prevent overstocking.
.. seealso::
- :doc:`replenishment/reordering_rules`
- :doc:`replenishment/report`
.. _inventory/management/products/strategies:
Make to order
-------------
*Make to order (MTO)* is a procurement route that creates a draft purchase order (or manufacturing
order) each time a sales order is confirmed, **regardless of the current stock level**.
An |MTO| strategy means that procurement or production is triggered only after a sales order has
been confirmed. This strategy is recommended when products are customizable, demand is
unpredictable, there is limited storage capacity, and when products are high in value and low in
demand. In such cases, it does not make sense to keep on-hand inventory.
Unlike products replenished using reordering rules, Odoo automatically links the sales order to the
|PO| or |MO| generated by the |MTO| route.
@ -51,159 +91,29 @@ as the |PO| or |MO| is not confirmed.
The |MTO| route is the best replenishment strategy for products that are customized, and/or for
products that have no stock kept on-hand.
.. seealso::
:doc:`replenishment/mto`
Configuration
=============
Master production schedule
--------------------------
Replenishment report and reordering rules
-----------------------------------------
The :abbr:`MPS (Master Production Schedule)` is a dashboard where products and their forecasted
quantities are entered. Based on confirmed manufacturing and purchase orders, the dashboard
recommends amounts to order or produce.
To access the replenishment report, go to :menuselection:`Inventory app --> Operations -->
Replenishment.`
This a useful **manual** tool for keeping track of quantities. The :abbr:`MPS (Master Production
Schedule)` **should absolutely not** be used alongside reordering rules, as the automated workflow
disrupts its manual replenishment method.
By default, the replenishment report dashboard shows every product that needs to be manually
reordered. If there is no specific rule for a product, Odoo assumes the :guilabel:`Min Quantity` and
:guilabel:`Max Quantity` stock are both `0.00`
.. note::
For products that don't have a set reordering rule, Odoo calculates the forecast based on
confirmed sales orders, deliveries, and receipts. For products that have a set reordering rule,
Odoo calculates the forecast normally, but also takes into account the purchase/manufacturing
lead time and security lead time.
.. important::
Before creating a new reordering rule, make sure the product has a *vendor* or a *bill of
materials* configured on the product form. To check this, go to :menuselection:`Inventory app
--> Products --> Products`, and select the product to open its product form. The vendor, if
configured, is listed in the :guilabel:`Purchase` tab, and the bill on materials, if configured,
is found in the :guilabel:`Bill of Materials` smart button at the top of the form.
The :guilabel:`Product Type`, located in the :guilabel:`General Information` tab on the product
form, **must** be set to :guilabel:`Storable Product`. By definition, a consumable product does
not have its inventory levels tracked, so Odoo cannot account for a consumable product in the
replenishment report.
.. image:: replenishment/replenishment/replenishment-report-dashboard.png
:align: center
:alt: Replenishment report listing all items needing to be purchased to meet current needs.
To create a new reordering rule from the replenishment report, go to :menuselection:`Inventory app
--> Operations --> Replenishment`, click :guilabel:`Create`, and select the desired product from the
drop-down menu in the :guilabel:`Product` column. If necessary, a :guilabel:`Min Quantity` and a
:guilabel:`Max Quantity` can be configured in the corresponding columns on the
:guilabel:`Replenishment` report page, as well.
To create a new reordering rule from the product form, go to :menuselection:`Inventory app -->
Products --> Products`, and select a product to open its product form. Click the
:guilabel:`Reordering Rules` smart button, click :guilabel:`Create`, and fill out the fields.
Replenishment report fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following fields are on the :guilabel:`Replenishment` report. If any of these fields are not
visible, click the :guilabel:`⋮ (additional options)` icon on the far right side of the report, then
click the checkbox next to a field to make it visible.
- :guilabel:`Product`: the product that requires a replenishment.
- :guilabel:`Location`: the specific location where the product is stored.
- :guilabel:`Warehouse`: the warehouse where the product is stored.
- :guilabel:`On Hand`: the amount of product currently available.
- :guilabel:`Forecast`: the amount of product available after all current orders (sales,
manufacturing, purchase, etc.) are taken into account.
- :guilabel:`Preferred Route`: how the product is procured, either :guilabel:`Buy`,
:guilabel:`Manufactured`, :guilabel:`Dropship`, etc.
- :guilabel:`Vendor`: the company from which the product is acquired.
- :guilabel:`Bill of Materials`: the bill of materials for the product (if one is configured).
- :guilabel:`Trigger`: how the replenishment is created, either :guilabel:`Auto` (automatically,
once the :guilabel:`On Hand` quantity goes below the :guilabel:`Min Quantity`) or
:guilabel:`Manual` (only when the replenishment is requested).
- :guilabel:`Procurement Group`: the reference number for how the product is being acquired, such as
a sales order, purchase order, or manufacturing order.
- :guilabel:`Min Quantity`: the minimum amount of product that should be available. When inventory
levels goes below this number, the replenishment is triggered.
- :guilabel:`Max Quantity`: the amount of product that should be available after replenishing the
product.
- :guilabel:`Multiple Quantity`: if the product should be ordered in specific quantities, enter the
number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`,
and only 3 are needed, 5 products are replenished.
- :guilabel:`To Order`: the amount of product that is currently needed, and will be ordered, if the
:guilabel:`Order Once` or :guilabel:`Automate Orders` button is clicked.
- :guilabel:`UoM`: the unit of measure used to acquire the product.
- :guilabel:`Company`: the company for which the product is acquired.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the set
:guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by clicking on
the field and changing the value. To replenish a product manually, click :guilabel:`Order Once`.
To automate a replenishment from the :guilabel:`Replenishment` page, click :guilabel:`Automate
Orders` on the right-side of the line, represented by a :guilabel:`🔄 (circular arrow)` icon.
When this button is clicked, Odoo will automatically generate a draft |PO|/|MO| every time the
forecasted stock level falls below the set :guilabel:`Min Quantity` of the reordering rule.
On the :guilabel:`Replenishment` page, a reordering rule or manual replenishment can be temporarily
deactivated for a given period, by clicking the :guilabel:`🔕 (snooze)` icon on the far-right of the
line.
.. image:: replenishment/replenishment/reordering-rule-snooze-settings.png
:align: center
:alt: Snooze options to turn off notifications for reordering for a period of time.
A |PO| or |MO| created by a manual replenishment has a :guilabel:`Replenishment Report` as the
source document. A |PO| or |MO| created by an automated reordering rule has the |SO| reference
number(s) that triggered the rule as the source document.
.. image:: replenishment/replenishment/rfq-source-document.png
:align: center
:alt: Quote request list shows which quotes are directly from the replenishment report.
Make to order (MTO) route
=========================
Since the |MTO| route is recommended for customized products, the route is hidden by default.
To activate the |MTO| route in Odoo:
#. Go to :menuselection:`Inventory app --> Configuration --> Settings`.
#. Activate the :guilabel:`Multi-Step Routes` setting, located under the :guilabel:`Warehouse`
section, and click :guilabel:`Save`.
#. Then, go to :menuselection:`Inventory app --> Configuration --> Routes`.
#. Click on :menuselection:`Filters --> Archived` to show archived routes.
#. Select the checkbox next to :guilabel:`Replenish on Order (MTO)`, and click on
:menuselection:`Action --> Unarchive`.
.. note::
Activating the :guilabel:`Multi-Step Routes` setting also activates :guilabel:`Storage
Locations`. If these features aren't applicable to the warehouse, disable these settings after
unarchiving the |MTO| route.
To set a product's procurement route to |MTO|, go to :menuselection:`Inventory app --> Products -->
Products`, and click on the desired product to open its product form.
Then, click the :guilabel:`Inventory` tab, and in the :guilabel:`Routes` section of options, select
:guilabel:`Replenish on Order (MTO)`.
For products purchased directly from a vendor, make sure the :guilabel:`Buy` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a vendor is configured
in the :guilabel:`Purchase` tab of the product form.
For products manufactured in-house, make sure the :guilabel:`Manufacture` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a bill of materials is
configured for the product, which is accessible via the :guilabel:`Bill of Materials` smart button
on the product form.
.. note::
The |MTO| route cannot be selected alone. |MTO| **only** works if the :guilabel:`Manufacture` or
:guilabel:`Buy` route is also selected.
.. image:: replenishment/replenishment/acoustic-block-screen-replenish.png
:align: center
:alt: Replenish on Order selected on the product form.
.. seealso::
:doc:`../../manufacturing/management/use_mps`
.. toctree::
:titlesonly:
replenishment/mto
replenishment/reordering_rules
replenishment/report
replenishment/lead_times
replenishment/resupply_warehouses
replenishment/warehouse_replenishment_transfer

View File

@ -2,9 +2,11 @@
Lead times
==========
.. |RFQ| replace:: :abbr:`RFQ (Request for Quotation)`
Accurately forecasting delivery dates is vital for fulfilling customer expectations. In Odoo, the
*Inventory* app allows for comprehensive lead time configuration, allowing coordination and planning
of manufacturing orders, deliveries, and receptions.
**Inventory** app allows for comprehensive lead time configuration, allowing coordination and planning
of manufacturing orders, deliveries, and receipts.
Lead time types
===============
@ -37,6 +39,10 @@ process. Here's a summary of the types of lead times in Odoo:
are set to replenish to order, the need appears on the *Replenishment report* earlier, according
to the specified number of days.
- :ref:`Days to Purchase lead time <inventory/warehouses_storage/days-to-purchase>`: days needed for
the vendor to receive a request for quotation (RFQ) and confirm it. It advances the deadline to
schedule a |RFQ| by a specified number of days.
- :ref:`Manufacturing lead time <inventory/management/manuf-lt>`: the number of days needed to
complete a manufacturing order (MO) from the date of confirmation. This lead time includes
weekends (non-working hours in Odoo), and is used to forecast an approximate production date for a
@ -227,6 +233,15 @@ set to account for potential delays in supplier deliveries.
:align: center
:alt: Set security lead time for purchase from the Inventory > Configuration > Settings.
.. _inventory/warehouses_storage/days-to-purchase:
Days to purchase lead time
--------------------------
To set it up, go to :menuselection:`Inventory app --> Configuration --> Settings`. Under the
:guilabel:`Advanced Scheduling` section, in the :guilabel:`Days to Purchase` field, specify the
number of days required for the vendor to confirm a |RFQ| after receiving it from the company.
.. _inventory/management/manuf-lt:
Manufacturing lead times

View File

@ -13,6 +13,8 @@ manufactured in-house triggers the creation of a manufacturing order. The creati
manufacturing order occurs every time a sales order is created, regardless of the current stock
level of the product being ordered.
.. _inventory/warehouse_storage/mto-route:
Unarchive the Replenish on Order (MTO) route
============================================

View File

@ -2,38 +2,71 @@
Reordering rules
================
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOs| replace:: :abbr:`SOs (Sales Orders)`
.. |RFQ| replace:: :abbr:`RFQ (Request for Quotation)`
.. |RFQs| replace:: :abbr:`RFQs (Requests for Quotations)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |BoMs| replace:: :abbr:`BoMs (Bills of Materials)`
.. _inventory/management/reordering_rules:
Reordering rules are used to keep forecasted stock levels above a certain threshold without
*Reordering rules* are used to keep forecasted stock levels above a certain threshold without
exceeding a specified upper limit. This is accomplished by specifying a minimum quantity that stock
should not fall below and a maximum quantity that stock should not exceed.
Reordering rules can be configured for each product based on the route used to replenish it. If a
product uses the *Buy* route, then a Request for Quotation (RFQ) is created when the reordering rule
is triggered. If a product uses the *Manufacture* route, then a Manufacturing Order (MO) is created
instead. This is the case regardless of the selected replenishment route.
product uses the *Buy* route, then a *request for quotation* (RFQ) is created when the reordering
rule is triggered. If a product uses the *Manufacture* route, then a *manufacturing order* (MO) is
created instead. This is the case regardless of the selected replenishment route.
.. seealso::
- `Odoo Tutorials: Automatic Reordering Rules <https://www.youtube.com/watch?v=XEJZrCjoXaU>`_
- `Odoo Tutorials: Manual Reordering Rules <https://www.youtube.com/watch?v=deIREJ1FFj4>`_
Configure products for reordering rules
=======================================
To set up reordering rules for the first time, refer to:
In order to use reordering rules for a product, it must first be correctly configured. Begin by
navigating to :menuselection:`Inventory app --> Products --> Products`, then select an existing
product, or create a new one by clicking :guilabel:`New`.
- :ref:`Reordering rules setup <inventory/warehouses_storage/configure-rr>`
- :ref:`Trigger <inventory/product_management/trigger>`
- :ref:`Preferred route <inventory/warehouses_storage/route>`
On the product form, under the :guilabel:`General Information` tab, make sure that the
:guilabel:`Product Type` is set to :guilabel:`Storable Product`. This is necessary because Odoo only
tracks stock quantities for storable products, and this number is used to trigger reordering rules.
To understand and optimize replenishment using advanced features, see:
- :ref:`Just-in-time logic <inventory/warehouses_storage/just-in-time>`
- :ref:`Visibility days <inventory/product_management/visibility-days>`
.. _inventory/warehouses_storage/configure-rr:
Reordering rules setup
======================
To configure automatic and manual reordering rules, complete the following:
#. :ref:`Product type configuration <inventory/warehouses_storage/set-product-type>`
#. :ref:`Create rule <inventory/warehouses_storage/rr-fields>`
.. _inventory/warehouses_storage/set-product-type:
Product type configuration
--------------------------
A product must be configured correctly to use reordering rules. Begin by navigating to
:menuselection:`Inventory app --> Products --> Products`, then select an existing product, or create
a new one by clicking :guilabel:`New`.
On the product form, under the :guilabel:`General Information` tab, set the :guilabel:`Product Type`
to :guilabel:`Storable Product`. This is necessary because Odoo only tracks stock quantities for
storable products, and quantities are needed to trigger reordering rules.
.. image:: reordering_rules/product-type.png
:align: center
:alt: Set the Product Type as Storable.
Next, click on the :guilabel:`Inventory` tab and select one or more routes from the
:guilabel:`Routes` section. Doing so tells Odoo which route to use to replenish the product.
Next, click the :guilabel:`Inventory` tab and select one or more routes from the :guilabel:`Routes`
section. Doing so tells Odoo which route to use to replenish the product.
.. image:: reordering_rules/select-routes.png
:align: center
@ -49,94 +82,104 @@ they sell the product for, so that Odoo knows which company the product should b
:alt: Specify a vendor and price on the Purchase tab.
If the product is replenished using the :guilabel:`Manufacture` route, it needs to have at least one
Bill of Materials (BoM) associated with it. This is necessary because Odoo only creates
manufacturing orders for products with a :abbr:`BoM (Bill of Materials)`.
*bill of materials* (BoM) associated with it. This is necessary because Odoo only creates
manufacturing orders for products with a |BoM|.
If a :abbr:`BoM (Bill of Materials)` does not already exist for the product, select the
:guilabel:`Bill of Materials` smart button at the top of the product form, then click
:guilabel:`New` to configure a new :abbr:`BoM (Bill of Materials)`.
If a |BoM| does not already exist for the product, select the :guilabel:`Bill of Materials` smart
button at the top of the product form, then click :guilabel:`New` to configure a new |BoM|.
.. image:: reordering_rules/bom-smart-button.png
:align: center
:alt: The Bill of Materials smart button on a product form.
.. _inventory/warehouses_storage/rr-fields:
Create new reordering rules
===========================
---------------------------
To create a new reordering rule, navigate to :menuselection:`Inventory app --> Configuration -->
Reordering Rules`, then click :guilabel:`New`, and fill out the new line as follows:
Reordering Rules`, then click :guilabel:`New`, and fill out the following fields in the new line:
- :guilabel:`Product`: The product that is replenished by the rule.
- :guilabel:`Location`: The location where the product is stored.
- :guilabel:`Min Quantity`: The minimum quantity that can be forecasted without the rule being
triggered. When forecasted stock falls below this number, a replenishment order for the product is
created.
- :guilabel:`Max Quantity`: The maximum quantity that stock is replenished up to.
- :guilabel:`Multiple Quantity`: Specify if the product should be replenished in batches of a
certain quantity (e.g., a product could be replenished in batches of 20).
- :guilabel:`UoM`: The unit of measure used for reordering the product. This value can simply be
`Units` or a specific unit of measurement for weight, length, etc.
- :guilabel:`Product`: The product that requires replenishment.
- :guilabel:`Location`: The specific location where the product is stored.
- :guilabel:`Min Quantity`: The minimum amount of product that should be available. When inventory
levels goes below this number, the replenishment is triggered.
- :guilabel:`Max Quantity`: The amount of product that should be available after replenishing the
product.
- :guilabel:`Multiple Quantity`: If the product should be ordered in specific quantities, enter the
number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`,
and only 3 are needed, 5 products are replenished.
.. image:: reordering_rules/reordering-rule-form.png
:align: center
:alt: The form for creating a new reordering rule.
.. tip::
Reordering rules can also be created from each product form. To do so, navigate to
:menuselection:`Inventory app --> Products --> Products`, then select a product. Click on
:menuselection:`Reordering Rules smart button --> New`, then fill out the new line, as detailed
above.
Reordering rules can also be created from the :guilabel:`Reordering Rules` smart button on the
product form.
.. note::
To learn how the :guilabel:`On Hand`, :guilabel:`Forecast`, and :guilabel:`To Order` fields are
calculated using on-hand quantities and future demand, see the :ref:`Just-in-time logic
<inventory/warehouses_storage/just-in-time>` section.
For advanced usage of reordering rules, learn about the following reordering rule fields:
- :ref:`Trigger <inventory/product_management/trigger>`
- :ref:`Preferred route <inventory/warehouses_storage/route>`
- :ref:`Vendor <inventory/warehouses_storage/set-vendor>`
- :ref:`Bill of materials <inventory/warehouses_storage/set-bom-field>`
- :ref:`Procurement group <inventory/warehouses_storage/procurement-grp>`
- :ref:`Visibility days <inventory/product_management/visibility-days>`
- :ref:`Preferred route <inventory/product_management/route>`
.. note::
The fields above are not available by default, and must be enabled by selecting the
:guilabel:`(slider)` icon in the far-right corner, and selecting the desired column from the
drop-down menu.
:icon:`oi-settings-adjust` :guilabel:`(adjust)` icon in the far-right corner and selecting the
desired column from the drop-down menu.
.. _inventory/product_management/trigger:
Trigger
=======
When stock falls below the reordering rule's minimum, set the reordering rule's *trigger* to
*automatic* to automatically create purchase or manufacturing orders to replenish stock.
A reordering rule's *trigger* can be set to *automatic* or *manual*. While both function the same
way, the difference between the two types of reordering rules is how the rule is launched:
Alternatively, setting the reordering rule's trigger to *manual* displays the product and forecasted
stock on the *replenishment dashboard*, where the procurement manager can review the stock levels,
lead times, and forecasted dates of arrival.
- :ref:`Auto <inventory/warehouses_storage/auto-rr>`: A purchase or manufacturing order is
automatically created when the forecasted stock falls below the reordering rule's minimum
quantity. By default, the :guilabel:`Auto` trigger is selected.
- :ref:`Manual <inventory/warehouses_storage/manual-rr>`: The :doc:`Replenishment report <report>`
lists products needing replenishment, showing current/forecasted stock, lead times, and arrival
dates. Users can review forecasts before clicking *Order Once*.
.. seealso::
:doc:`../replenishment`
.. tip::
The :guilabel:`Replenishment` dashboard is accessible by going to :menuselection:`Inventory app
--> Operations --> Replenishment`.
To enable the :guilabel:`Trigger` field, go to :menuselection:`Inventory app --> Configuration -->
Reordering Rules`. Then, click the :guilabel:`(slider)` icon, located to the far-right of the column
titles, and enable the :guilabel:`Trigger` option from the additional options drop-down menu that
appears.
.. image:: reordering_rules/enable-trigger.png
:align: center
:alt: Enable the Trigger field by toggling it in the additional options menu.
To enable the :guilabel:`Trigger` field, go to :menuselection:`Inventory app --> Operations -->
Replenishment` or :menuselection:`Inventory app --> Configuration --> Reordering Rules`. Then, click
the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, located to the far-right of the column
titles, and tick the :guilabel:`Trigger` checkbox.
In the :guilabel:`Trigger` column, select :guilabel:`Auto` or :guilabel:`Manual`. Refer to the
sections below to learn about the different types of reordering rules.
.. _inventory/warehouses_storage/auto-rr:
Auto
----
Automatic reordering rules, enabled by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Auto`, generate purchase or manufacturing orders when:
*Automatic reordering rules*, enabled by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Auto`, generate purchase or manufacturing orders when either:
#. the scheduler runs, and the *On Hand* quantity is below the minimum
#. a sales order is confirmed, and lowers the *Forecasted* quantity of the product below the minimum
#. The scheduler runs, and the *Forecasted* quantity is below the minimum, or
#. A sales order is confirmed, and lowers the *Forecasted* quantity of the product below the
minimum.
If the :guilabel:`Buy` route is selected, then an |RFQ| is generated. To view and manage |RFQs|,
navigate to :menuselection:`Purchase app --> Orders --> Requests for Quotation`.
If the :guilabel:`Manufacture` route is selected, then an |MO| is generated. To view and manage
|MOs|, navigate to :menuselection:`Manufacturing app --> Operations --> Manufacturing Orders`.
When no route is selected, Odoo selects the :guilabel:`Route` specified in the :guilabel:`Inventory`
tab of the product form.
.. tip::
The scheduler is set to run once a day, by default.
@ -157,102 +200,35 @@ Automatic reordering rules, enabled by setting the reordering rule's :guilabel:`
:align: center
:alt: Show automatic reordering rule from the Reordering Rule page.
If the :guilabel:`Buy` route is selected, then an :abbr:`RFQ (Request for Quotation)` is generated.
To view and manage :abbr:`RFQs (Requests for Quotation)`, navigate to :menuselection:`Purchase app
--> Orders --> Requests for Quotation`.
If the :guilabel:`Manufacture` route is selected, then an :abbr:`MO (Manufacturing Order)` is
generated. To view and manage :abbr:`MOs (Manufacturing Orders)`, navigate to
:menuselection:`Manufacturing app --> Operations --> Manufacturing Orders`.
When no route is selected, Odoo selects the :guilabel:`Route` specified in the :guilabel:`Inventory`
tab of the product form.
.. _inventory/product_management/manual-rr:
.. _inventory/warehouses_storage/manual-rr:
Manual
------
Manual reordering rules, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Manual`, list a product on the replenishment dashboard when the forecasted quantity
falls below a specified minimum. Products on this dashboard are called *needs*, because they are
needed to fulfill upcoming sales orders, for which the forecasted quantity is not enough.
*Manual reordering rules*, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Manual`, list a product on the :doc:`replenishment dashboard <report>` when the
forecasted quantity falls below a specified minimum. Products on this dashboard are called *needs*,
because they are needed to fulfill upcoming sales orders, for which the forecasted quantity is not
enough.
The replenishment dashboard, accessible by navigating to :menuselection:`Inventory app -->
Operations --> Replenishment`, considers sales order deadlines, forecasted stock levels, and vendor
lead times. It displays needs **only** when it is time to reorder items.
.. note::
If the one-day window for ordering products is too short, skip to the :ref:`visibility days
<inventory/product_management/visibility-days>` section to make the need appear on the
replenishment dashboard a specified number of days in advance.
lead times. It displays needs **only** when it is time to reorder items, thanks to the :guilabel:`To
Reorder` filter.
.. image:: reordering_rules/manual.png
:align: center
:alt: Click the Order Once button on the replenishment dashboard to replenish stock.
.. _inventory/product_management/visibility-days:
Visibility days
===============
.. important::
Ensure :doc:`lead times <lead_times>` are understood before proceeding with this section.
When :ref:`manual reordering rules <inventory/product_management/manual-rr>` are assigned to a
product, *visibility days* make the product appear on the replenishment dashboard
(:menuselection:`Inventory app --> Operations --> Replenishment`) a certain number of days in
advance.
.. example::
A product has a manual reordering rule set to trigger when the stock level falls below four
units. The current on-hand quantity is ten units.
The current date is February twentieth, and the *delivery date* on a sales order (in the
:guilabel:`Other Info` tab) is March third — twelve days from the current date.
The :ref:`vendor lead time <inventory/management/purchase-lt>` is four days, and the
:ref:`purchase security lead time <inventory/management/purchase-security-lt>` is one day.
When the :guilabel:`Visibility Days` field of the reordering rule is set to zero, the product
appears on the replenishment dashboard five days before the delivery date, which, in this case,
is February twenty-seventh.
.. image:: reordering_rules/need-dates.png
:align: center
:alt: Graphic representing when the need appears on the replenishment dashboard: Feb 27.
To see the product on the replenishment dashboard for the current date, February twentieth, set
the :guilabel:`Visibility Days` to `7.00`.
To determine the number of visibility days needed to see a product on the replenishment dashboard,
subtract *today's date* from the *date the need appears* on the replenishment dashboard.
.. math::
Visibility~days = Need~appears~date - Today's~date
.. example::
Referring to the example above, today's date is February twentieth, and the need for the product
appears on February twenty-seventh.
(February 27 - February 20 = 7 days)
Incorrectly setting the :guilabel:`Visibility Days` fewer than seven days in this case results in
the need **not** appearing on the replenishment dashboard.
.. image:: reordering_rules/visibility-days.png
:align: center
:alt: Show the replenishment dashboard with the correct and incorrect visibility days set.
.. _inventory/product_management/route:
.. _inventory/warehouses_storage/route:
Preferred route
===============
Odoo allows for multiple routes to be selected under the :guilabel:`Inventory` tab on each product
form. For instance, it is possible to select both :guilabel:`Buy` and :guilabel:`Manufacture`, thus
enabling the functionality of both routes.
Odoo allows for multiple routes to be selected as replenishment methods under the
:guilabel:`Inventory` tab on each product form. For instance, it is possible to select both
:guilabel:`Buy` and :guilabel:`Manufacture`, indicating to Odoo that the product can be bought or
manufactured.
Odoo also enables users to set a preferred route for a product's reordering rule. This is the route
that the rule defaults to if multiple are selected. To select a preferred route, begin by navigating
@ -263,10 +239,249 @@ Click inside of the column on the row of a reordering rule, and a drop-down menu
routes for that rule. Select one to set it as the preferred route.
.. image:: reordering_rules/select-preferred-route.png
:align: center
:alt: Select a preferred route from the drop-down.
.. important::
If multiple routes are enabled for a product but no preferred route is set for its reordering
rule, the product is reordered using the selected route that is listed first on the
:guilabel:`Inventory` tab of the product form.
Advanced uses
-------------
Pairing :guilabel:`Preferred Route` with one of the following fields on the replenishment report
unlocks advanced configurations of reordering rules. Consider the following:
.. _inventory/warehouses_storage/set-vendor:
- :guilabel:`Vendor`: When the selected :guilabel:`Preferred Route` is :guilabel:`Buy`, setting the
:guilabel:`Vendor` field to one of the multiple vendors on the vendor pricelist indicates to Odoo
that the vendor is automatically populated on |RFQs| when a reordering rule triggers the creation
of a purchase order.
.. _inventory/warehouses_storage/set-bom-field:
- :guilabel:`Bill of Materials`: When the :guilabel:`Preferred Route` is set to
:guilabel:`Manufacture`, and there are multiple |BoMs| in use, specifying the desired |BoM| in the
replenishment report, draft manufacturing orders are created with this |BoM| in use.
.. _inventory/warehouses_storage/procurement-grp:
- :guilabel:`Procurement Group`: This is a way to group related |POs| or |MOs| that are tied to
fulfilling a specific demand, like an |SO| or a project. It helps organize and track which orders
are linked to a particular demand.
.. note::
Procurement groups link replenishment methods to demand, enabling smart buttons to appear when
using the :ref:`MTO route <inventory/warehouse_storage/mto-route>`.
.. figure:: reordering_rules/po-smartbutton.png
:alt: Showing smart button to PO.
Sales order (demand) with a linked purchase order (replenishment method).
In the context of reordering rules:
- Reordering rules do not automatically assign a procurement group, which is why there are no
smart buttons that link |SOs| to |POs|, unlike the :abbr:`MTO (Make to Order)` route.
- To enable smart buttons for products replenished by reordering rules (not :abbr:`MTO (Make to
Order)`), with specific quantities linked to specific demands (e.g. |SOs|), assign a procurement
group.
- Without a procurement group, demands for the same product can be combined into a single |RFQ|,
even if the reordering rule is executed multiple times for those demands. This allows for more
efficient procurement by consolidating demands into fewer orders.
Selecting a procurement group in the :guilabel:`Procurement Group` field on the replenishment
report ensures that all linked orders are grouped under the same demand, based on the defined
route.
.. exercise::
How can you set the *Procurement Group*, *Vendor*, and *Preferred Route* fields on the
replenishment report to generate a single |RFQ| for five different products in sales order
SO35, given they share the same vendor, Azure Interior, and ensure other demands for these
products are handled separately?
.. spoiler:: View the answer
#. Set the :guilabel:`Procurement Group` to `SO35`, in the reordering rule for all five
products. This groups the demands for `SO35` in the same |RFQ| or |MO|.
#. Set the :guilabel:`Vendor` to `Azure Interior` to ensure the |RFQ| is created for the
same supplier.
#. Set the :guilabel:`Preferred Route` to :guilabel:`Buy` to generate an |RFQ|.
#. Click the :guilabel:`Order Once` button to generate a single |RFQ| for the five products
tied to `SO35`.
| After placing the order, remove `SO35` from the :guilabel:`Procurement Group` field of the
five products' reordering rules. This ensures future demands for these products are
managed separately and assigned to different |RFQs| (the usual behavior).
.. _inventory/warehouses_storage/just-in-time:
Just-in-time logic
==================
*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines.
This is achieved using the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>`,
which determines when replenishment is necessary to avoid overstocking.
The forecasted date is the **earliest possible date** to receive a product if the replenishment
process starts immediately. It is calculated by summing the lead times linked to the replenishment
process, such as :ref:`vendor lead times <inventory/management/purchase-lt>` and :ref:`purchasing
delays <inventory/management/purchase-security-lt>` for purchases, or :ref:`manufacturing lead times
<inventory/management/manuf-lt>` for production. Both automatic and manual reordering rules work
this way.
.. example::
For a product with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits
5 days to place the order, ensuring it arrives just in time for delivery.
Important considerations:
- **If this feels risky**, consider adding buffer time or :doc:`adjusting lead times <lead_times>`
for more flexibility.
- While lead times and just-in-time logic provide additional control, **reordering rules work
perfectly fine without them**. Keeping delivery dates on sales orders as their *creation date*
ensures purchases are immediately triggered when needed
.. _inventory/warehouses_storage/forecasted-date:
Forecasted date and To Order quantity
-------------------------------------
To view the *forecasted date*, go to the replenishment report and click the :icon:`fa-info-circle`
:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information`
pop-up window displays the :guilabel:`Forecasted Date` and various lead times.
The *forecasted date* is the total time needed to procure a product in Odoo. It is calculated by
summing the lead times linked to the product's replenishment process. The total of these lead times,
added to the current date, determines when Odoo checks for demanded stock.
.. important::
The forecasted date is the **earliest possible date** the customer can receive the product if the
replenishment process began right **now**. It is calculated by adding all lead times related to
the product to the current date.
.. example::
A manual reordering rule is set up with no minimum or maximum quantities.
- Vendor lead time is 4 days, the purchase security lead time is 1 day, and the days to purchase
is 2 days.
- Today's date is November 26.
- These add up to 7 days, making the forecasted date, December 3rd.
A confirmed |SO| for 5 units has a delivery date of December 3rd (7 days from today). This demand
will appear on the replenishment report today, in the **To Order** field.
However, if the delivery date were later than December 3rd, it would not yet appear on the
report. Odoo only displays quantities to replenish when they fall within the forecasted date
window, ensuring orders are placed precisely when needed.
.. image:: reordering_rules/replenishment-info.png
:alt: Show forecasted date in Odoo.
The *just-in-time* logic ensures replenishment happens only when it's necessary for the forecasted
date's demand, helping avoid overstocking.
For example:
- If the forecasted quantity drops below the minimum **on** the forecasted date, replenishment must
begin immediately to avoid shortages.
- If the quantity drops below the minimum **after** the forecasted date, replenishment can wait.
The **To Order** quantity is the total demand on the forecasted date.
By timing purchase orders based on the combined lead times, Odoo optimizes stock levels, keeping
inventory minimal while ensuring future requirements are ordered at the last possible
moment—strategic procrastination without the stress!
Common confusion about forecasted quantities
--------------------------------------------
|SOs| due **after** the :guilabel:`Forecasted Date` are not accounted for in the
:guilabel:`Forecast` quantities of the reordering rule.
They are, however, accounted for on the forecasted report that is opened by clicking the
:icon:`fa-area-chart` :guilabel:`(graph)` icon on the replenishment report, as this one represents
the **long-term forecasted quantity**.
.. example::
.. figure:: report/zero-forecast.png
:alt: Forecast and To Order quantities is zero.
Continuing the above example, when the sales order's deadline is adjusted to December 4th, the
:guilabel:`Forecast` and :guilabel:`To Order` quantities are zero.
.. figure:: report/five-forecast.png
:alt: Show forecasted report.
Opening the :guilabel:`Forecasted Report` shows the :guilabel:`Forecasted` units is `5.00`.
.. _inventory/product_management/visibility-days:
Visibility days
===============
*Visibility days* enable the ability to determine if additional quantities should be added to the
planned replenishment. Odoo checks if forecasted stock on the forecasted date will drop below the
minimum in the reordering rule. **Only if** it is time to reorder, visibility days check additional
future demand by the specified number of days.
This feature helps consolidate orders by grouping immediate and near-future needs, reducing
transport costs and enabling supplier discounts for larger orders.
To set visibility days to incorporate orders for a specified number of days in the future, navigate
to :menuselection:`Inventory app --> Operations --> Replenishment`, or by clicking the *Reordering
Rules* smart button from the product form.
Next, enable the :guilabel:`Visibility Days` field by clicking the :icon:`oi-settings-adjust`
:guilabel:`(adjust)` icon to the far right and choosing the feature from the drop-down menu. Then,
enter the desired visibility days.
.. important::
The forecasted date is never pushed forward or extended; Odoo only checks the extra visibility
days if the stock falls below the minimum threshold on the forecasted date.
Example where visibility days is triggered
------------------------------------------
A product shipped from Asia has a combined vendor lead time of 30 days and a shipping cost of $100
(including :doc:`landed costs
<../../product_management/inventory_valuation/integrating_landed_costs>` and tariffs).
- November 4: Current date. The forecasted date is December 4 (30 days later).
- |SO| 1: Requires the product by Dec 4. Odoo places the order today, costing $100.
- |SO| 2: Requires the product by Dec 19. Normally, Odoo would order on Nov 19, costing an
additional $100.
- |SO| 3: Requires the product by Dec 25. Normally, Odoo would order on Nov 25, costing another
$100.
Ordering separately for these sales orders totals $300 in shipping costs.
.. image:: report/forecasted-date.png
:alt: Show forecasted date visualization.
Setting :guilabel:`Visibility Days` to `20.0` allows Odoo to "look ahead" 20 days from December 4
(|SO| 1's forecasted date) to December 24.
- It groups |SO| 2's order with |SO| 1, reducing shipping costs by consolidating orders.
- |SO| 3, which is due on Dec 25, is one day late and is not grouped with the other two orders.
.. image:: report/visibility-days.png
:alt: Visibility days visualization.
Counterexample where visibility days is not triggered
-----------------------------------------------------
Considering the example above, if |SO| 1 does not exist, then:
- **November 4**: Current date. The forecasted date is December 4 (30 days later).
- **November 5**: The forecasted date shifts to December 5.
- |SO| 2: Requires the product by December 19. Odoo will only trigger the order on November 19,
meaning the user will not see a replenishment notification until then.
This shows that visibility days complement just-in-time logic by optimizing it to balance
replenishment costs more effectively.
.. image:: reordering_rules/counterexample.png
:alt: Example where the visibility days does not trigger.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,52 @@
====================
Replenishment report
====================
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOs| replace:: :abbr:`SOs (Sales Orders)`
The *replenishment report* is an interactive dashboard that uses :doc:`manual reordering rules
<reordering_rules>`, lead times, and upcoming demands to forecast quantities of products that need
restocking.
Reordering rules used on this dashboard are normal reordering rules, but the user benefits from a
monitoring menu with extra options to manage suggestions for replenishment.
This enables users to anticipate future needs, keep less products on hand without the risk of
running out, plan and consolidate orders.
To access the replenishment report, go to :menuselection:`Inventory app --> Operations -->
Replenishment.`
The fields and features unique to the replenishment dashboard are displayed below. For definitions
of the other fields, go to the :ref:`Create reordering rules section
<inventory/warehouses_storage/rr-fields>`.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the set
:guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by clicking on
the field and changing the value. To replenish a product manually, click :icon:`fa-truck`
:guilabel:`Order Once`.
Clicking :icon:`fa-bell-slash` :guilabel:`Snooze` temporarily deactivates the reordering rule for
the set period, hiding the entry from the replenishment dashboard, when it is supposed to appear.
.. tip::
Defining a :guilabel:`Vendor` allows filtering or grouping demands by the vendor. This simplifies
the process of identifying products to order and can reduce shipment costs.
.. image:: report/replenishment-dashboard.png
:alt: Replenishment report that displays recommended quantities to order.
.. note::
Automatic reordering rules appear on this menu, too but are hidden by default.
Replenishment information
=========================
In each line of the replenishment report, clicking the :icon:`fa-info-circle` :guilabel:`(info)`
icon opens the :guilabel:`Replenishment Information` pop-up window, which displays the *lead times*
and *forecasted date*.
For detailed information on how to use this feature for replenishment, go to the :ref:`Just in time
logic <inventory/warehouses_storage/just-in-time>` section.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB