[IMP] inventory: CRL - replenishment & visibility days

closes odoo/documentation#11965

X-original-commit: 26f226c51b
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 19:24:21 +00:00
parent 294174dad9
commit 1da43054be
17 changed files with 519 additions and 371 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/workflows/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,158 +91,28 @@ 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/workflows/use_mps`
.. toctree::
:titlesonly:
replenishment/mto
replenishment/reordering_rules
replenishment/report
replenishment/lead_times
replenishment/resupply_warehouses

View File

@ -2,14 +2,15 @@
Lead times
==========
.. |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)`
.. |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
===============
@ -18,52 +19,50 @@ Different lead times for different operations can impact various stages of the o
process. Here's a summary of the types of lead times in Odoo:
.. image:: lead_times/all-lead-times.png
:align: center
:alt: Show graphic of all lead times working together.
- :ref:`Customer lead time <inventory/shipping_receiving/customer-lt>`: default time frame for
- :ref:`Customer lead time <inventory/warehouses_storage/customer-lt>`: default time frame for
fulfilling customer orders. The customer lead time is the number of days from the date the sales
order (SO) is confirmed to the date the products are shipped from the warehouse. This is also
known as *delivery lead time*.
- :ref:`Sales security lead time <inventory/shipping_receiving/sales-security-lt>`: moves the
- :ref:`Sales security lead time <inventory/warehouses_storage/sales-security-lt>`: moves the
*scheduled delivery date* forward by a specified number of days. This serves as a buffer to allow
ample time to prepare the outgoing shipment earlier, considering the possibility of delays in the
fulfillment process.
- :ref:`Purchase lead time <inventory/shipping_receiving/purchase-lt>`: number of days from the
- :ref:`Purchase lead time <inventory/warehouses_storage/purchase-lt>`: number of days from the
confirmation of a purchase order (PO) to the receipt of products. It provides insight on the time
it takes for products to arrive at the warehouse, facilitating effective scheduling and planning
of supplier deliveries.
- :ref:`Purchase security lead time <inventory/shipping_receiving/purchase-security-lt>`: advances
- :ref:`Purchase security lead time <inventory/warehouses_storage/purchase-security-lt>`: advances
the order deadline on a :abbr:`PO (Purchase Order)` by a specified number of days. This proactive
approach of placing orders earlier mitigates the risk of vendor or shipping delays. Thus, for
products that 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 <inventory/shipping_receiving/days-to-purchase>`: days needed for the
- :ref:`Days to Purchase <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/shipping_receiving/manuf-lt>`: number of days needed to
- :ref:`Manufacturing lead time <inventory/warehouses_storage/manuf-lt>`: 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
finished good.
- :ref:`Days to prepare manufacturing order
<inventory/shipping_receiving/prepare-manufacturing-order>`: number of days needed to replenish
<inventory/warehouses_storage/prepare-manufacturing-order>`: number of days needed to replenish
components, or manufacture sub-assemblies of the product. Either set one directly on the bill of
materials (BoM), or click *Compute* to sum up purchase and manufacturing lead times of components
in the |BoM|.
- :ref:`Manufacturing security lead time <inventory/shipping_receiving/manuf-security-lt>`: moves
the scheduled date of the :abbr:`MO (Manufacturing Order)` forward by a specified number of days.
When used in conjunction with :ref:`replenish to order
<inventory/management/products/strategies>`, the security lead time makes the need appear earlier
on the replenishment report.
- :ref:`Manufacturing security lead time <inventory/warehouses_storage/manuf-security-lt>`: moves
the scheduled date of the |MO| forward by a specified number of days. When used in conjunction
with :ref:`replenish to order <inventory/management/products/strategies>`, the security lead time
makes the need appear earlier on the replenishment report.
.. _inventory/shipping_receiving/customer-lt:
.. _inventory/warehouses_storage/customer-lt:
Sales lead times
================
@ -81,7 +80,6 @@ not be feasible to fulfill the order by that time, which would impact other ware
1 day. Based on the lead time inputs, Odoo suggests a delivery date in 15 days, on July 26th.
.. image:: lead_times/scheduled-date.png
:align: center
:alt: Set *Delivery Date* in a sales order. Enables delivery lead times feature.
The following sections demonstrate how to automatically compute expected delivery dates.
@ -100,10 +98,9 @@ in the number of calendar days required to fulfill the delivery order from start
Time` field.
.. image:: lead_times/customer.png
:align: center
:alt: Set *Customer Lead Time* on the product form.
.. _inventory/shipping_receiving/sales-security-lt:
.. _inventory/warehouses_storage/sales-security-lt:
Sales security lead time
------------------------
@ -124,7 +121,6 @@ team to prepare for outgoing shipments earlier than the scheduled date.
the new scheduled date for the delivery order would be April 5th.
.. image:: lead_times/sales-security.png
:align: center
:alt: View of the security lead time for sales configuration from the sales settings.
Deliver several products
@ -143,7 +139,6 @@ and set the :guilabel:`Shipping Policy` to:
date to the longest lead time among the products in the order.
.. image:: lead_times/shipping-policy.png
:align: center
:alt: Show *Shipping Policy* field in the *Other Info* tab of a quotation.
.. example::
@ -154,7 +149,7 @@ and set the :guilabel:`Shipping Policy` to:
delivery date is 5 days from today: April 7th. On the other hand, selecting :guilabel:`When all
products are ready` configures the scheduled date to be 8 days from today: April 10th.
.. _inventory/shipping_receiving/purchase-lt:
.. _inventory/warehouses_storage/purchase-lt:
Purchase lead times
===================
@ -171,11 +166,10 @@ This deadline is the date by which the order should be confirmed, in order to en
by the expected receipt date.
.. image:: lead_times/vendor-lead-times.png
:align: center
:alt: Visualization of PO deadline and receipt date used with vendor lead times.
.. seealso::
:ref:`PO scheduling with reordering rules <inventory/management/reordering_rules>`
:doc:`PO scheduling with reordering rules <reordering_rules>`
Vendor lead time
----------------
@ -197,7 +191,6 @@ pricelist, click the :guilabel:`Add a line` button to add vendor details, such a
vendor is set to `10 days.`
.. image:: lead_times/set-vendor.png
:align: center
:alt: Add delivery lead times to vendor pricelist on a product.
By setting the vendor lead time, the expected arrival date of the item is automatically determined
@ -212,14 +205,12 @@ timeframe.
from the :guilabel:`Receipt` smart button, located on the :guilabel:`PO (Purchase Order)`.
.. image:: lead_times/receipt-date.png
:align: center
:alt: Show expected *Receipt Date* of the product from the vendor.
.. image:: lead_times/scheduled-date-receipt.png
:align: center
:alt: Show expected *Scheduled Date* of arrival of the product from the vendor.
.. _inventory/shipping_receiving/purchase-security-lt:
.. _inventory/warehouses_storage/purchase-security-lt:
Purchase security lead time
---------------------------
@ -240,24 +231,18 @@ set to account for potential delays in supplier deliveries. Then, click :guilabe
the receipt would be April 8th.
.. image:: lead_times/vendor-security.png
:align: center
:alt: Set security lead time for purchase from the Inventory > Configuration > Settings.
.. _inventory/shipping_receiving/days-to-purchase:
.. _inventory/warehouses_storage/days-to-purchase:
Days to purchase
----------------
Days to purchase lead time
--------------------------
To set up the *days to purchase* lead time, 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.
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.
.. image:: lead_times/days-to-purchase.png
:align: center
:alt: Show "Days to Purchase" configuration in the Settings page.
.. _inventory/shipping_receiving/manuf-lt:
.. _inventory/warehouses_storage/manuf-lt:
Manufacturing lead times
========================
@ -265,12 +250,11 @@ Manufacturing lead times
Lead times can help simplify the procurement process for consumable materials and components used in
manufactured products with bills of materials (BoMs).
The :abbr:`MO (Manufacturing Order)` deadline, which is the deadline to begin the manufacturing
process to complete the product by the scheduled delivery date, can be determined by configuring the
manufacturing lead times and manufacturing security lead times.
The |MO| deadline, which is the deadline to begin the manufacturing process to complete the product
by the scheduled delivery date, can be determined by configuring the manufacturing lead times and
manufacturing security lead times.
.. image:: lead_times/manuf-lead-times.png
:align: center
:alt: Visualization of the determination of planned MO date manufacturing lead times.
Manufacturing lead time
@ -285,7 +269,6 @@ On the |BoM| form, click the :guilabel:`Miscellaneous` tab. Change the value (in
:guilabel:`Manuf. Lead Time` field to specify the calendar days needed to manufacture the product.
.. image:: lead_times/set-manufacturing.png
:align: center
:alt: Manuf. Lead Time value specified on a product's Bill of Material form.
.. note::
@ -295,12 +278,11 @@ On the |BoM| form, click the :guilabel:`Miscellaneous` tab. Change the value (in
If the |BoM| product is subcontracted, the :guilabel:`Manuf. Lead Time` can be used to determine
the date at which components should be sent to the subcontractor.
Establish a :abbr:`MO (Manufacturing Order)` deadline, based on the *expected delivery date*,
indicated in the :guilabel:`Scheduled Date` field of the :abbr:`DO (Delivery Order)`.
Establish a |MO| deadline, based on the *expected delivery date*, indicated in the
:guilabel:`Scheduled Date` field of the :abbr:`DO (Delivery Order)`.
The :abbr:`MO (Manufacturing Order)` deadline, which is the :guilabel:`Scheduled Date` field on the
:abbr:`MO (Manufacturing Order)`, is calculated as the *expected delivery date* subtracted by the
manufacturing lead time.
The |MO| deadline, which is the :guilabel:`Scheduled Date` field on the |MO|, is calculated as the
*expected delivery date* subtracted by the manufacturing lead time.
This ensures the manufacturing process begins on time, in order to meet the delivery date.
@ -317,7 +299,7 @@ performed at the work center simultaneously`).
product requires 14 days to manufacture. So, the latest date to start the :abbr:`MO
(Manufacturing Order)` to meet the commitment date is August 1st.
.. _inventory/shipping_receiving/prepare-manufacturing-order:
.. _inventory/warehouses_storage/prepare-manufacturing-order:
Days to prepare manufacturing order
-----------------------------------
@ -343,7 +325,7 @@ manufacture semi-finished products.
purchase lead time of four days. The :guilabel:`Days to prepare Manufacturing Order` is four
days.
.. _inventory/shipping_receiving/manuf-security-lt:
.. _inventory/warehouses_storage/manuf-security-lt:
Manufacturing security lead time
--------------------------------
@ -356,15 +338,13 @@ Next, enter the desired number of calendar days. By configuring the security lea
set to account for potential delays in the manufacturing process. Then, click :guilabel:`Save`.
.. image:: lead_times/manuf-security.png
:align: center
:alt: View of the security lead time for manufacturing from the manufacturing app settings.
.. example::
A product has a scheduled shipment date on the :abbr:`DO (Delivery Order)` set for August 15th.
The manufacturing lead time is 7 days, and manufacturing security lead time is 3 days. So, the
:guilabel:`Scheduled Date` on the :abbr:`MO (Manufacturing Order)` reflects the latest date to
begin the manufacturing order. In this example, the planned date on the :abbr:`MO (Manufacturing
Order)` is August 5th.
:guilabel:`Scheduled Date` on the |MO| reflects the latest date to begin the manufacturing order.
In this example, the planned date on the |MO| is August 5th.
Global example
==============
@ -383,7 +363,6 @@ date from the warehouse is on September 20th. Odoo uses lead times and automated
schedule the necessary operations, based on the outgoing shipment delivery date, September 20th:
.. image:: lead_times/global-example.png
:align: center
:alt: Show timeline of how lead times work together to schedule warehouse operations.
- **September 1st**: Sales order created, confirmed by salesperson.

View File

@ -2,39 +2,69 @@
Reordering rules
================
.. _inventory/management/reordering_rules:
.. |SO| replace:: :abbr:`SO (sales order)`
.. |PO| replace:: :abbr:`PO (purchase order)`
.. |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)`
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |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)`
*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 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
: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
:alt: Select one or more routes on the Inventory tab.
@ -48,61 +78,60 @@ 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)`.
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)`.
*bill of materials* (BoM) associated with it. This is necessary because Odoo only creates
manufacturing orders for products with a |BoM|.
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
: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 --> Operations --> Replenishment`, then click :guilabel:`New`,
and fill out the following fields for the new reordering rule line item:
- :guilabel:`Product`: The product that is replenished by the rule.
- :guilabel:`Route`: The
:doc:`supply chain route <../../shipping_receiving/daily_operations/use_routes>` for this product
- :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 at which the stock is replenished.
- :guilabel:`To Order`: The number of units, according to the *UoM* that should be replenished for
this reordering rule.
- :guilabel:`UoM`: The *unit of measurement* used for reordering the product. This value can simply
be `Units` or a more specific unit of measurement for weight, length, etc.
.. note::
Two other fields are automatically populated: :guilabel:`On Hand` (the number of units currently
available in inventory) and :guilabel:`Forecast` (the number of units expected to be available in
inventory after all orders are taken into account). These numbers will only change when an
:doc:`inventory adjustment <../inventory_management/count_products>` is made.
.. tip::
Additional fields can be accessed by clicking the :icon:`oi-settings-adjust`
:guilabel:`(additional options slider icon)`. For example, :guilabel:`Multiple Quantity`
specifies if the product should be replenished in batches of a certain quantity
(e.g., a product could be replenished in batches of 20).
- :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`, and select a product. Then, click the
:guilabel:`Reordering Rules` smart button, and click :guilabel:`New` to 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:`Route <inventory/product_management/route>`
.. note::
The fields above are not available by default, and must be enabled by selecting the
:icon:`oi-settings-adjust` :guilabel:`(adjust)` icon in the far-right corner and selecting the
desired column from the drop-down menu.
.. _inventory/warehouses_storage/zero-zero:
@ -171,40 +200,44 @@ quantity of the product to fall below the :guilabel:`Min Quantity` of `0.00`, th
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 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
: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, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Auto`, generates 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.
@ -224,35 +257,21 @@ Automatic reordering rules, configured by setting the reordering rule's :guilabe
.. image:: reordering_rules/auto.png
: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`, lists 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, but 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.
When a product appears on the replenishment dashboard, clicking the :guilabel:`Order Once` button
generates the purchase or manufacturing order with the specified amounts :guilabel:`To Order`.
@ -260,67 +279,15 @@ generates the purchase or manufacturing order with the specified amounts :guilab
.. image:: reordering_rules/manual.png
: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 20th, and the *delivery date* on a sales order (in the
:guilabel:`Other Info` tab) is March 3rd — twelve days from the current date.
The :ref:`vendor lead time <inventory/shipping_receiving/purchase-lt>` is four days, and the
:ref:`purchase security lead time <inventory/shipping_receiving/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 27th.
.. image:: reordering_rules/need-dates.png
:alt: Graphic representing when the need appears on the replenishment dashboard: Feb 27th.
To see the product on the replenishment dashboard for the current date, February 20, set
the :guilabel:`Visibility Days` to `7.00`.
To determine the amount 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 20th, and the need for the product
appears on February 27th.
(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
:alt: Show the replenishment dashboard with the correct and incorrect visibility days set.
.. _inventory/product_management/route:
.. _inventory/warehouses_storage/route:
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
@ -341,3 +308,243 @@ routes for that rule. Select one to set it as the preferred route.
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 :doc:`MTO route <mto>`.
.. 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/warehouses_storage/purchase-lt>` and
:ref:`purchasing delays <inventory/warehouses_storage/purchase-security-lt>` for purchases, or
:ref:`manufacturing lead times <inventory/warehouses_storage/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/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.

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

View File

@ -144,7 +144,7 @@ Below is a list of commonly-used fields when importing vendor pricelists:
* - Quantity
- The minimum quantity required to receive the product at the specified price.
- :guilabel:`Quantity` field in the vendor pricelist. (If not visible, enable it by clicking
the :icon:`oi-settings-adjust` :guilabel:`(settings)` icon, and tick the :guilabel:`Quantity`
the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, and tick the :guilabel:`Quantity`
checkbox)
- `min_qty`
* - Unit Price
@ -152,8 +152,8 @@ Below is a list of commonly-used fields when importing vendor pricelists:
- :guilabel:`Price` field in the vendor pricelist.
- `price`
* - Delivery Lead Time
- :ref:`Number of days <inventory/shipping_receiving/purchase-lt>` before receiving the
product after confirming a purchase order.
- :ref:`Number of days <inventory/warehouses_storage/purchase-lt>` before receiving the product
after confirming a purchase order.
- :guilabel:`Delivery Lead Time` field on the vendor pricelist.
- `delay`
* - Sequence