TIP: You can type at any time to perform a new search.
Products Expiration Date
product_expiry · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 0.1.0
- Category
- Supply Chain/Inventory
- Folder size
- 1.52 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-08-11 04:11:20
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Arnold Moyaux, Julien Castiaux, Denis Roussel, William Henrotin, svs-odoo, Tiffany Chang (tic), Gorash, Djamel Touati, Pieter Claeys (clpi), Dylan Kiss (dyki), Paweł Fertyk, Quentin Wolfs, nihp-odoo, Stéphane Diez, djameltouati, Bastien PIERRE, chha-odoo, Krzysztof Magusiak (krma), agbr-odoo, Lulu Grimalkin (lugr), sawer, adip-odoo, Eliott Loop (oplo-odoo), assh-odoo, Eve Lin (evlin), Mathias Mathy
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- mrp_product_expiry, sale_stock_product_expiry
- Description
Track different dates on products and production lots. ====================================================== Following dates can be tracked: ------------------------------- - end of life - best before date - removal date - alert date Also implements the removal strategy First Expiry First Out (FEFO) widely used, for example, in food industries.
Code Analysis ⓘ
Views touched (18)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
confirm_expiry_view |
Confirm | expiry.picking.confirmation | form | New |
label_lot_template_view_expiry |
label_lot_template_view_expiry | ir.ui.view | qweb | Inherits stock.label_lot_template_view |
quant_search_view_inherit_product_expiry |
stock.quant.search.inherit | stock.quant | search | Inherits stock.quant_search_view |
report_lot_label_expiry |
report_lot_label_expiry | ir.ui.view | qweb | Inherits stock.report_lot_label |
res_config_settings_view_form_stock |
res.config.settings.view.form.inherit.product.expiry.stock | res.config.settings | form | Inherits stock.res_config_settings_view_form |
search_product_lot_filter_inherit_product_expiry |
stock.production.lot.search.inherit | stock.lot | search | Inherits stock.search_product_lot_filter |
stock_report_delivery_document_inherit_product_expiry |
stock_report_delivery_document_inherit_product_expiry | ir.ui.view | qweb | Inherits stock.report_delivery_document |
stock_report_delivery_has_serial_move_line_inherit_product_expiry |
stock_report_delivery_has_serial_move_line_inherit_product_expiry | ir.ui.view | qweb | Inherits stock.stock_report_delivery_has_serial_move_line |
view_move_form_expiry |
stock.production.lot.inherit.form | stock.lot | form | Inherits stock.view_production_lot_form |
view_product_form_expiry |
product.template.inherit.form | product.template | form | Inherits stock.view_template_property_form |
view_production_lot_view_kanban |
stock.production.lot.kanban.inherit.product.expiry | stock.lot | kanban | Inherits stock.view_production_lot_kanban |
view_production_lot_view_tree |
stock.production.lot.list.inherit.product.expiry | stock.lot | list | Inherits stock.view_production_lot_tree |
view_stock_move_line_detailed_operation_tree_expiry |
stock.move.line.operations.inherit.list | stock.move.line | list | Inherits stock.view_stock_move_line_detailed_operation_tree |
view_stock_move_line_operation_tree_expiry |
stock.move.line.inherit.list | stock.move.line | list | Inherits stock.view_stock_move_line_operation_tree |
view_stock_move_operations_expiry |
stock.move.operations.inherit.form | stock.move | form | Inherits stock.view_stock_move_operations |
view_stock_quant_tree |
stock.quant.list.inherit.expiry_date | stock.quant | list | Inherits stock.view_stock_quant_tree |
view_stock_quant_tree_editable |
stock.quant.list.editable.inherit.expiry_date | stock.quant | list | Inherits stock.view_stock_quant_tree_editable |
view_stock_quant_tree_inventory_editable |
stock.quant.inventory.list.editable.inherit.expiry_date | stock.quant | list | Inherits stock.view_stock_quant_tree_inventory_editable |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (12)
New fields (4)
-
descriptionCharcompute='_compute_descriptive_fields' args: 'Description' -
lot_idsMany2many → stock.lotreadonly=Truerequired=True args: 'stock.lot' -
picking_idsMany2many → stock.pickingreadonly=True args: 'stock.picking' -
show_lotsBooleancompute='_compute_descriptive_fields' args: 'Show Lots'
-
process(self) -
process_no_expired(self)Remove the expired mls and confirm the picking.
New fields (2)
-
free_qtyFloathelp="Available quantity (computed as Quantity On Hand - reserved quantity - quantity to remove)\nIn a context with a single Stock Location, this includes goods stored in this location, or any of its children.\nIn a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods stored in any Stock Location with 'internal' type." -
virtual_availableFloathelp="Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming - Quantity to Remove)\nIn a context with a single Stock Location, this includes goods stored in this location, or any of its children.\nIn a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\nOtherwise, this includes goods stored in any Stock Location with 'internal' type."
No public methods.
New fields (5)
-
alert_timeIntegerhelp='Number of days before the Expiration Date after which an alert should be raised on the lot/serial number. It will be computed on the lot/serial number.'string='Alert Date' -
expiration_timeIntegerhelp='Number of days after the receipt of the products (from the vendor or in stock after production) after which the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number.'string='Expiration Date' -
removal_timeIntegerhelp='Number of days before the Expiration Date after which the goods should be removed from the stock and not be counted in the Fresh On Hand Stock anymore.It will be computed on the lot/serial number.'string='Removal Date' -
use_expiration_dateBooleanhelp='When this box is ticked, you have the possibility to specify dates to manage product expiration, on the product and on the corresponding lot/serial numbers'string='Use Expiration Date' -
use_timeIntegerhelp='Number of days before the Expiration Date after which the goods starts deteriorating, without being dangerous yet. It will be computed on the lot/serial number.'string='Best Before Date'
-
write(self, vals)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
group_expiry_date_on_delivery_slipBooleanimplied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (7)
-
alert_dateDatetimecompute='_compute_dates'help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".'readonly=Falsestore=Truestring='Alert Date' -
expiration_dateDatetimecompute='_compute_expiration_date'help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.'readonly=Falsestore=Truestring='Expiration Date' -
product_expiry_alertBooleancompute='_compute_product_expiry_alert'help='The Expiration Date has been reached.' -
product_expiry_remindedBooleanstring='Expiry has been reminded' -
removal_dateDatetimecompute='_compute_dates'help='This is the date on which the goods with this Serial Number should be removed from the stock and not be counted in the Fresh On Hand Stock anymore. This date will be used in FEFO removal strategy.'readonly=Falsestore=Truestring='Removal Date' -
use_dateDatetimecompute='_compute_dates'help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.'readonly=Falsestore=Truestring='Best before Date' -
use_expiration_dateBooleanrelated='product_id.use_expiration_date'string='Use Expiration Date'
No public methods.
New fields (1)
-
use_expiration_dateBooleanrelated='product_id.use_expiration_date'string='Use Expiration Date'
-
action_generate_lot_line_vals(self, context_data, mode, first_lot, count, lot_text)@api.model
New fields (4)
-
expiration_dateDatetimecompute='_compute_expiration_date'help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.'store=Truestring='Expiration Date' -
is_expiredBooleanrelated='lot_id.product_expiry_alert' -
removal_dateDatetimecompute='_compute_removal_date'readonly=Falsestore=Truestring='Removal Date' -
use_expiration_dateBooleanrelated='product_id.use_expiration_date'string='Use Expiration Date'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (4)
-
available_quantityFloathelp="On hand quantity which hasn't been reserved on a transfer and is still fresh, in the default unit of measure of the product" -
expiration_dateDatetimerelated='lot_id.expiration_date'store=True -
removal_dateDatetimerelated='lot_id.removal_date'store=True -
use_expiration_dateBooleanrelated='product_id.use_expiration_date'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…