[IMP] Inventory: Update FEFO removal strategy
Co-authored-by: Jess Rogers <104637850+jero-odoo@users.noreply.github.com>
@@ -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>`_
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 12 KiB |