diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst index b2b508c52..8f9a9cf3c 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst @@ -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 +` and :doc:`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 `: Automatically create + |POs| or |MOs| when stock falls below the minimum level. While this is convenient, it is less + flexible. +- :ref:`Manual reordering rules `: Generate suggestions in + the replenishment report for user review, allowing adjustments and batch orders while meeting + deadlines. +- :ref:`Just-in-time logic `: 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 diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst index 1a12aa5e8..d9b396401 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst @@ -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 `: 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 `: 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 diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst index 9fa2f850c..bd0075d53 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst @@ -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 ============================================ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst index 9ae4fa0ec..db380bb1b 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst @@ -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 `_ - `Odoo Tutorials: Manual Reordering Rules `_ -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 ` +- :ref:`Trigger ` +- :ref:`Preferred 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 ` +- :ref:`Visibility days ` + +.. _inventory/warehouses_storage/configure-rr: + +Reordering rules setup +====================== + +To configure automatic and manual reordering rules, complete the following: + +#. :ref:`Product type configuration ` +#. :ref:`Create rule ` + +.. _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 + ` section. For advanced usage of reordering rules, learn about the following reordering rule fields: - :ref:`Trigger ` +- :ref:`Preferred route ` +- :ref:`Vendor ` +- :ref:`Bill of materials ` +- :ref:`Procurement group ` - :ref:`Visibility days ` -- :ref:`Preferred 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 `: 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 `: The :doc:`Replenishment 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 ` 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 - ` 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 ` are understood before proceeding with this section. - -When :ref:`manual reordering rules ` 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 ` is four days, and the - :ref:`purchase security lead time ` 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 `. + + .. 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 `, +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 ` and :ref:`purchasing +delays ` for purchases, or :ref:`manufacturing lead times +` 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 ` + 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. diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/counterexample.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/counterexample.png new file mode 100644 index 000000000..ee19a4f8f Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/counterexample.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/enable-trigger.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/enable-trigger.png deleted file mode 100644 index 32fbfa736..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/enable-trigger.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/forecasted-date.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/forecasted-date.png new file mode 100644 index 000000000..de774bd06 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/forecasted-date.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/need-dates.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/need-dates.png deleted file mode 100644 index e711a14df..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/need-dates.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/po-smartbutton.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/po-smartbutton.png new file mode 100644 index 000000000..8bef2fba8 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/po-smartbutton.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png new file mode 100644 index 000000000..a51425d8a Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/visibility-days.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/visibility-days.png index 924a74484..f38e1468c 100644 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/visibility-days.png and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/visibility-days.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst new file mode 100644 index 000000000..a8435504f --- /dev/null +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst @@ -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 +`, 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 +`. + +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 ` section. + diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/five-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/five-forecast.png new file mode 100644 index 000000000..c21f2287c Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/five-forecast.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/forecasted-date.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/forecasted-date.png new file mode 100644 index 000000000..de774bd06 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/forecasted-date.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-dashboard.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-dashboard.png new file mode 100644 index 000000000..cf39527cc Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-dashboard.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-info.png new file mode 100644 index 000000000..a51425d8a Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/replenishment-info.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/visibility-days.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/visibility-days.png new file mode 100644 index 000000000..406b68303 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/visibility-days.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/zero-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/zero-forecast.png new file mode 100644 index 000000000..44edfaf6d Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report/zero-forecast.png differ