[IMP] Inventory: Update FEFO removal strategy

Co-authored-by: Jess Rogers <104637850+jero-odoo@users.noreply.github.com>
This commit is contained in:
erjer-odoo
2025-12-09 13:01:25 -08:00
parent 6874b14169
commit c86d160113
9 changed files with 112 additions and 37 deletions

View File

@@ -5,8 +5,82 @@ FEFO removal
The *First Expired, First Out* (FEFO) removal strategy targets products for removal based on their The *First Expired, First Out* (FEFO) removal strategy targets products for removal based on their
assigned removal dates. assigned removal dates.
.. seealso:: .. _inventory/warehouses_storage/fefo_enable:
:doc:`About removal strategies <../removal_strategies>`
Enabling the FEFO removal strategy
==================================
Lots and serial numbers differentiate identical products and track information like arrival or
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
--> Settings`. Under the :guilabel:`Traceability` heading, check the box beside :guilabel:`Lots &
Serial Numbers`. After :guilabel:`Lots & Serial Numbers` is enabled, the :guilabel:`Expiration Date`
feature appears. Enable it to track expiration dates, best-before dates, removal dates, and alert
dates.
.. image:: fefo/enable-features.png
:alt: Enable Lots & Serial Numbers and Expiration Dates in the Inventory settings.
Enable tracking by lots or serial numbers
-----------------------------------------
Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
form through :menuselection:`Inventory --> Products --> Products` and selecting the desired product.
On the product form, open the :guilabel:`General Information` tab and select the check box next to
the :guilabel:`Track Inventory` field, then select either :guilabel:`By Unique Serial Number` or
:guilabel:`By Lots`.
.. image:: fefo/track-by-lots.png
:alt: Enable tracking by lot.
Setting dates
-------------
Next, set the :guilabel:`Expiration Date`, :guilabel:`Best Before Date`, :guilabel:`Removal Date`,
and :guilabel:`Alert Date` settings for the product. In the :guilabel:`Inventory` tab of the product
form, under the :guilabel:`Traceability` heading, select the :guilabel:`Expiration Date` check box.
The :guilabel:`Dates` heading appears. See :ref:`Removal date
<inventory/warehouses_storage/removal-date>` for more information.
Assigning lots and serial numbers
---------------------------------
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
adjustment <../../warehouses_storage/inventory_management/count_products>` or during :ref:`product
reception <inventory/product_management/assign-lots>`.
Setting removal strategies
--------------------------
After lot or serial numbers have been assigned, set the removal strategy on the storage location or
product category.
.. image:: fefo/location-categories.png
:alt: Find the Locations or Categories from the Configuration menu.
On the location
~~~~~~~~~~~~~~~
Open :menuselection:`Inventory app --> Configuration --> Locations`. Select the desired location. On
the location form, under the :guilabel:`Logistics` heading, select :guilabel:`First Expiry First Out
(FEFO)` from the list of removal strategies.
.. image:: fefo/set-on-location.png
:alt: Set First Expiry First Out as the location removal strategy.
On the product category
~~~~~~~~~~~~~~~~~~~~~~~
Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
Configuration --> Categories` and selecting the intended product category. Next, in the
:guilabel:`Force Removal Strategy` field, specify :guilabel:`First Expiry First Out (FEFO)`.
.. image:: fefo/set-on-category.png
:alt: Set First Expiry First Out as the product category removal strategy.
.. important::
When there are different removal strategies applied on both the location and product category for
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
category form is applied as top priority.
.. _inventory/warehouses_storage/removal-date: .. _inventory/warehouses_storage/removal-date:
@@ -34,9 +108,6 @@ number of days specified in the :guilabel:`Expiration Date` field of the product
The removal date takes this expiration date, and subtracts the number of days specified in the The removal date takes this expiration date, and subtracts the number of days specified in the
:guilabel:`Removal Date` field of the product form. :guilabel:`Removal Date` field of the product form.
.. seealso::
:doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
.. example:: .. example::
In the :guilabel:`Inventory` tab of the product, `Egg`, the following :guilabel:`Dates` are set In the :guilabel:`Inventory` tab of the product, `Egg`, the following :guilabel:`Dates` are set
by the user: by the user:
@@ -45,7 +116,6 @@ The removal date takes this expiration date, and subtracts the number of days sp
- :guilabel:`Removal Date`: `15` days before expiration date - :guilabel:`Removal Date`: `15` days before expiration date
.. image:: fefo/user-set-date.png .. image:: fefo/user-set-date.png
:align: center
:alt: Display expiration and removal dates set on the product form. :alt: Display expiration and removal dates set on the product form.
A shipment of Eggs arrive at the warehouse on January 1st. So, the expiration date of the Eggs is A shipment of Eggs arrive at the warehouse on January 1st. So, the expiration date of the Eggs is
@@ -54,16 +124,20 @@ The removal date takes this expiration date, and subtracts the number of days sp
.. _inventory/warehouses_storage/exp-date: .. _inventory/warehouses_storage/exp-date:
To view the expiration dates of items in stock, navigate to the product form, and click the To view the expiration dates of items in stock, go to :menuselection:`Inventory app --> Products -->
:guilabel:`On Hand` smart button. Lots / Serial Numbers`. By default, this report is grouped by location. If necessary, remove that
grouping in the search bar and group by product. Expand the product to show its lots. Next, click
Next, click the additional options icon, located on the far-right, and select the columns: the :icon:`oi-settings-adjust` :guilabel:`(Additional Options)` icon, located on the far-right, and
:guilabel:`Expiration Date` and :guilabel:`Removal Date`. select the columns: :guilabel:`Expiration Date` and :guilabel:`Removal Date`.
.. image:: fefo/removal-date.png .. image:: fefo/removal-date.png
:align: center :alt: Show expiration dates from the Lots / Serial Numbers list.
:alt: Show expiration dates from the inventory adjustments model accessed from the *On Hand*
smart button from the product form. Alternatively, view these dates by clicking the :guilabel:`Lot/Serial Numbers` smart button on the
product form.
.. image:: fefo/removal-date-lots-serial-numbers.png
:alt: Show expiration dates from the Lots/Serial Numbers list on the product form.
Workflow Workflow
======== ========
@@ -72,15 +146,10 @@ Using the :abbr:`FEFO (First Expired, First Out)` removal strategy ensures that
nearest removal date are picked first. nearest removal date are picked first.
To understand how this removal strategy works, consider the following example below about the To understand how this removal strategy works, consider the following example below about the
product, `Carton of eggs`, which is a box containing twelve eggs. product, `Carton of Eggs`, which is a box containing twelve eggs.
The product is tracked :guilabel:`By Lots`, and the product category's :guilabel:`Force Removal The product is tracked :guilabel:`By Lots`, and the product category's :guilabel:`Force Removal
Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`. Strategy` is set to :guilabel:`First Expiry First Out (FEFO)`.
.. seealso::
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
.. list-table:: .. list-table::
:header-rows: 1 :header-rows: 1
@@ -95,32 +164,38 @@ Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.
- 2 - 2
- 1 - 1
* - Expiration date * - Expiration date
- April 4 - January 8, 2026
- April 10 - January 15, 2026
- April 15 - January 22, 2026
* - :ref:`Removal date <inventory/warehouses_storage/exp-date>` * - :ref:`Removal date <inventory/warehouses_storage/exp-date>`
- February 26 - December 24, 2025
- March 4 - December 31, 2025
- March 9 - January 7, 2026
To see the removal strategy in action, go to the :menuselection:`Sales app` and create a new To see the removal strategy in action, go to the :menuselection:`Sales app` and create a new
quotation. quotation.
Clicking :guilabel:`Confirm` creates a delivery order for today, December 29th, and the lot numbers Clicking :guilabel:`Confirm` creates a delivery order for today, December 9th, and the lot numbers
with the soonest expiration dates are reserved, using the :abbr:`FEFO (First Expired, First Out)` with the soonest expiration dates are reserved, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy. removal strategy.
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the To view the detailed pickings, click the :guilabel:`Details` link, located on the far-right of the
far-right of the Carton of egg's product line, in the :guilabel:`Operations` tab of the delivery Carton of Eggs' product line, in the :guilabel:`Operations` tab of the delivery order. Doing so
order. Doing so opens the :guilabel:`Open: Stock move` pop-up window. opens the :guilabel:`Detailed Operations` pop-up window.
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field displays where
the quantities to fulfill the :guilabel:`Demand` are picked from. the quantities to fulfill the :guilabel:`Demand` are picked from.
Since the order demanded six Cartons of eggs, using the :abbr:`FEFO (First Expired, First Out)` Since the order demanded six Cartons of Eggs, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy, all five Cartons from `LOT1`, with the removal date of February 26th, are picked. removal strategy, all five Cartons from `LOT1`, with the removal date of December 24, are picked.
The remaining Carton is selected from `LOT2`, which has a removal date of March 4th. The remaining Carton is selected from `LOT2`, which has a removal date of December 31.
.. image:: fefo/eggs-picking.png .. image:: fefo/eggs-picking.png
:align: center :alt: The detailed operations window that shows the lots to be removed using FEFO.
:alt: The stock moves window that shows the lots to be removed using FEFO.
.. seealso::
- :doc:`Removal strategies <../removal_strategies>`
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB