From 91fae571b8201b5422179235dbca4ab2f8ee12f3 Mon Sep 17 00:00:00 2001 From: "John Holton (hojo)" Date: Wed, 12 Jun 2024 11:44:41 -0700 Subject: [PATCH] [IMP] Inventory: Reordering rules 001 update closes odoo/documentation#9898 X-original-commit: da4186c1c28c7a41a5ddb07849ae755792de8b09 Signed-off-by: John Holton (hojo) --- .../reordering_rules.rst | 65 +++++++++++++++++- .../reordering_rules/001-rule.png | Bin 0 -> 6050 bytes 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules/001-rule.png diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules.rst b/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules.rst index 199afdc58..6e1e0e59c 100644 --- a/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules.rst +++ b/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules.rst @@ -3,8 +3,10 @@ Reordering rules ================ .. _inventory/management/reordering_rules: +.. |SO| replace:: :abbr:`SO (sales order)` +.. |PO| replace:: :abbr:`PO (purchase order)` -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. @@ -93,6 +95,67 @@ For advanced usage of reordering rules, learn about the following reordering rul - :ref:`Visibility days ` - :ref:`Route ` +0/0/1 reordering rule +--------------------- + +The *0/0/1* reordering rule is a specialty rule used to replenish a product that is not kept +on-hand, each time a sales order (SO) is confirmed for that product. + +.. important:: + The 0/0/1 reordering rule is similar to the *Replenish on Order (MTO)* route, in that both + workflows are used to replenish a product upon confirmation of an |SO|. + + The main difference between the two methods is that the *Replenish on Order* route automatically + reserves the product for the |SO| that caused it to be replenished. This means the product + **cannot** be used for a different |SO|. + + The 0/0/1 reordering rule does not have this limitation. A product replenished using the rule is + not reserved for any specific |SO|, and can be used as needed. + + Another key difference is that replenishment orders created by the *Replenish on Order* route are + linked to the original |SO| by a smart button at the top of the order. When using the 0/0/1 + reordering rule, a replenishment order is created, but is not linked to the original |SO|. + + See the :doc:`Replenish on Order (MTO) ` documentation for a full overview of the MTO route. + +To create a 0/0/1 reordering rule, navigate to :menuselection:`Inventory app --> Products --> +Products`, and select a product. + +At the top of the product's page, click the :icon:`fa-refresh` :guilabel:`Reordering Rules` smart +button to open the :guilabel:`Reordering Rules` page for the product. On the resulting page, click +:guilabel:`New` to begin configuring a new reordering rule. + +In the :guilabel:`Location` field of the new reordering rule, select the location in which +replenished products should be stored. By default, this location is set to :guilabel:`WH/Stock`. + +In the :guilabel:`Route` field, select the route the rule should use to replenish the item. For +example, if the product should be purchased from a vendor, select the :guilabel:`Buy` route. + +In the :guilabel:`Min Quantity` field and :guilabel:`Max Quantity` field, leave the values set to +`0.00`. In the :guilabel:`To Order` field, enter a value of `1.00`. + +.. image:: reordering_rules/001-rule.png + :align: center + :alt: A 0/0/1 reordering rule. + +With the reordering rule configured using these values, each time an |SO| causes the forecasted +quantity of the product to fall below the :guilabel:`Min Quantity` of `0.00`, the selected +:guilabel:`Route` is used to replenish the product in one-unit increments, back up to the +:guilabel:`Max Quantity` of `0.00`. + +.. example:: + A picture frame is configured with a 0/0/1 reordering rule that uses the *Buy* route. Zero units + of the picture frame are kept on-hand at any given time. + + An |SO| is confirmed for one unit of the picture frame, which causes the forecasted quantity to + drop to `-1.00`. This triggers the reordering rule, which automatically creates a |PO| for one + unit of the picture frame. + + Once the product is received from the vendor, the forecasted quantity of the picture frame + returns to `0.00`. There is now one picture frame on-hand, but it is not reserved for the |SO| + which triggered its purchase. It can be used to fulfill that |SO|, or reserved for a different + order. + .. _inventory/product_management/trigger: Trigger diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules/001-rule.png b/content/applications/inventory_and_mrp/inventory/product_management/product_replenishment/reordering_rules/001-rule.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd7a66bf00693ca5132fc8008325f590157f42d GIT binary patch literal 6050 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