Products Expiration Date

product_expiry
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYSupply Chain/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, 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), sawer, agbr-odoo, Lulu Grimalkin (lugr), adip-odoo, Eliott Loop (oplo-odoo), assh-odoo, Eve Lin (evlin), Mathias Mathy
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
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 xpath 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 xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.lot xpath 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 xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_kanban stock.production.lot.kanban.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_kanban
view_production_lot_view_tree stock.production.lot.list.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_tree
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.list stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.list stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree stock.quant.list.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_editable stock.quant.list.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inventory_editable stock.quant.inventory.list.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
Models touched (12)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.lot
    readonly=True required=True args: 'stock.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Remove the expired mls and confirm the picking.

New fields (2)
  • free_qty Float
    help="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_available Float
    help="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."
Public methods (0)

No public methods.

New fields (5)
  • alert_time Integer
    help='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_time Integer
    help='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_time Integer
    help='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_date Boolean
    help='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_time Integer
    help='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'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    compute='_compute_dates' help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' readonly=False store=True string='Alert Date'
  • expiration_date Datetime
    compute='_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=False store=True string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    compute='_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=False store=True string='Removal Date'
  • use_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' readonly=False store=True string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (1)
  • action_generate_lot_line_vals(self, context_data, mode, first_lot, count, lot_text)
    @api.model

New fields (4)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
  • is_expired Boolean
    related='lot_id.product_expiry_alert'
  • removal_date Datetime
    compute='_compute_removal_date' readonly=False store=True string='Removal Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • available_quantity Float
    help="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_date Datetime
    related='lot_id.expiration_date' store=True
  • removal_date Datetime
    related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    related='product_id.use_expiration_date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYInventory/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Odoo Online, Arnold Moyaux, Denis Roussel, William Henrotin, svs-odoo, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, David (dafr), JF Aubert, Pedram (PEBR), Louis Wicket (wil), Walid, clesgow, Djamel Touati, Dylan Kiss (dyki), Antoine (ande), Chong Wang (cwg), Ahmed Khalaf, omra-odoo, Louis (wil), Mohammad Abdulmoneim, djameltouati, suju-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
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 xpath 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 xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.lot xpath 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 xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_kanban stock.production.lot.kanban.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_kanban
view_production_lot_view_tree stock.production.lot.list.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_tree
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.list stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.list stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree stock.quant.list.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_editable stock.quant.list.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inventory_editable stock.quant.inventory.list.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
Models touched (10)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.lot
    readonly=True required=True args: 'stock.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Don't process for concerned pickings (ones with expired lots), but process for all other pickings (in case of multi).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_open_quants(self)

New fields (5)
  • alert_time Integer
    help='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_time Integer
    help='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_time Integer
    help='Number of days before the Expiration Date after which the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Removal Date'
  • use_expiration_date Boolean
    help='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_time Integer
    help='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'
Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    compute='_compute_dates' help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' readonly=False store=True string='Alert Date'
  • expiration_date Datetime
    compute='_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=False store=True string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' readonly=False store=True string='Removal Date'
  • use_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' readonly=False store=True string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (3)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
  • is_expired Boolean
    related='lot_id.product_expiry_alert'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • expiration_date Datetime
    related='lot_id.expiration_date' store=True
  • removal_date Datetime
    related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    related='product_id.use_expiration_date'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYInventory/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Damien Bouvy, Wolfgang Taferner, Odoo Online, Jorge Pinna Puissant, Arnold Moyaux, Denis Roussel, William Henrotin, svs-odoo, Prakash Prajapati, Tiffany Chang (tic), Gorash, snd, David (dafr), Aurelien van Delft (avd), Mathieu Walravens, Pedram (PEBR), Louis Wicket (wil), Walid, Adrien Widart (awt), clesgow, Djamel Touati, Pieter Claeys (clpi), Dylan Kiss (dyki), Antoine (ande), Ahmed Khalaf, stcc-odoo, Julien Carion (juca), Louis (wil), Mathias Mathy (MAMA), suju-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (19)
XML IDNameModelTypeStatus
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 xpath Inherits stock.quant_search_view
report_lot_label_expiry report_lot_label_expiry ir.ui.view qweb Inherits stock.report_lot_label
report_package_barcode_expiry report_package_barcode_expiry ir.ui.view qweb Inherits stock.report_package_barcode
res_config_settings_view_form_stock res.config.settings.view.form.inherit.product.expiry.stock res.config.settings xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.lot xpath 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 xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_kanban stock.production.lot.kanban.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_kanban
view_production_lot_view_tree stock.production.lot.tree.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_tree
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree stock.quant.tree.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_editable stock.quant.tree.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inventory_editable stock.quant.inventory.tree.editable.inherit.expiry_date stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
Models touched (10)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.lot
    readonly=True required=True args: 'stock.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Don't process for concerned pickings (ones with expired lots), but process for all other pickings (in case of multi).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_open_quants(self)

New fields (5)
  • alert_time Integer
    help='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_time Integer
    help='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_time Integer
    help='Number of days before the Expiration Date after which the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Removal Date'
  • use_expiration_date Boolean
    help='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_time Integer
    help='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'
Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    compute='_compute_dates' help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' readonly=False store=True string='Alert Date'
  • expiration_date Datetime
    compute='_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=False store=True string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' readonly=False store=True string='Removal Date'
  • use_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' readonly=False store=True string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (3)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
  • is_expired Boolean
    related='lot_id.product_expiry_alert'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • expiration_date Datetime
    related='lot_id.expiration_date' store=True
  • removal_date Datetime
    related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    related='product_id.use_expiration_date'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYInventory/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Roussel, Romeo Fragomeli, Victor Feyens, William Henrotin, svs-odoo, Adrien Widart, Touati Djamel (otd), Tiffany Chang (tic), remi-filament, yhu-odoo, nouraellm, Abdelouahab (abla), Aurelien van Delft (avd), Mathieu Walravens, Adrien Widart (awt), clesgow, Antoine (ande), stcc-odoo, Martin Trigaux (mat)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (17)
XML IDNameModelTypeStatus
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 xpath Inherits stock.quant_search_view
report_lot_label_expiry report_lot_label_expiry ir.ui.view qweb Inherits stock.report_lot_label
report_package_barcode_expiry report_package_barcode_expiry ir.ui.view qweb Inherits stock.report_package_barcode
res_config_settings_view_form_stock res.config.settings.view.form.inherit.product.expiry.stock res.config.settings xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.lot xpath 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 xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_tree stock.production.lot.tree.inherit.product.expiry stock.lot xpath Inherits stock.view_production_lot_tree
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree_editable_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree
Models touched (10)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.lot
    readonly=True required=True args: 'stock.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Don't process for concerned pickings (ones with expired lots), but process for all other pickings (in case of multi).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_open_quants(self)

New fields (5)
  • alert_time Integer
    help='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_time Integer
    help='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_time Integer
    help='Number of days before the Expiration Date after which the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Removal Date'
  • use_expiration_date Boolean
    help='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_time Integer
    help='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'
Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    compute='_compute_dates' help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' readonly=False store=True string='Alert Date'
  • expiration_date Datetime
    compute='_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=False store=True string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' readonly=False store=True string='Removal Date'
  • use_date Datetime
    compute='_compute_dates' help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' readonly=False store=True string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (3)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
  • is_expired Boolean
    related='lot_id.product_expiry_alert'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • removal_date Datetime
    readonly=False related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    readonly=True related='product_id.use_expiration_date'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYInventory/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Arnold Moyaux, Xavier-Do, William Henrotin, svs-odoo, Adrien Widart, Touati Djamel (otd), remi-filament, Kevin Baptiste, nouraellm, Abdelouahab (abla), Aurelien van Delft (avd), Mathieu Walravens, Adrien Widart (awt), clesgow
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (16)
XML IDNameModelTypeStatus
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 xpath 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 xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.production.lot xpath 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.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_tree stock.production.lot.tree.inherit.product.expiry stock.production.lot xpath Inherits stock.view_production_lot_tree
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree_editable_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree
Models touched (10)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.production.lot
    readonly=True required=True args: 'stock.production.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Don't process for concerned pickings (ones with expired lots), but process for all other pickings (in case of multi).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_open_quants(self)

New fields (5)
  • alert_time Integer
    help='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 Time'
  • expiration_time Integer
    help='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 Time'
  • removal_time Integer
    help='Number of days before the Expiration Date after which the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Removal Time'
  • use_expiration_date Boolean
    help='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='Expiration Date'
  • use_time Integer
    help='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 Time'
Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' string='Alert Date'
  • expiration_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • removal_date Datetime
    readonly=False related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    readonly=True related='product_id.use_expiration_date'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYInventory/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Simon Lejeune, Yannick Tivisse, Xavier-Do, svs-odoo, Adrien Widart, Touati Djamel (otd), Tiffany Chang (tic), Rémy Voet (ryv), remi-filament, Hiral Bhavsar, Kevin Baptiste, Pratima Gupta, yhu-odoo, nouraellm, Abdelouahab (abla), Mathieu Walravens
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (17)
XML IDNameModelTypeStatus
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 xpath 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 xpath Inherits stock.res_config_settings_view_form
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.production.lot xpath 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.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_tree stock.production.lot.tree.inherit.product.expiry stock.production.lot xpath Inherits stock.view_production_lot_tree
view_quant_form_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_form
view_stock_move_line_detailed_operation_tree_expiry stock.move.line.operations.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_detailed_operation_tree
view_stock_move_line_operation_tree_expiry stock.move.line.inherit.tree stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_operations_expiry stock.move.operations.inherit.form stock.move xpath Inherits stock.view_stock_move_operations
view_stock_quant_tree_editable_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_tree
Models touched (10)

New fields (4)
  • description Char
    compute='_compute_descriptive_fields' args: 'Description'
  • lot_ids Many2many → stock.production.lot
    readonly=True required=True args: 'stock.production.lot'
  • picking_ids Many2many → stock.picking
    readonly=True args: 'stock.picking'
  • show_lots Boolean
    compute='_compute_descriptive_fields' args: 'Show Lots'
Public methods (2)
  • process(self)
  • process_no_expired(self)
    Don't process for concerned pickings (ones with expired lots), but process for all other pickings (in case of multi).

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_open_quants(self)

New fields (5)
  • alert_time Integer
    help='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 Time'
  • expiration_time Integer
    help='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 Time'
  • removal_time Integer
    help='Number of days before the Expiration Date after which the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Removal Time'
  • use_expiration_date Boolean
    help='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='Expiration Date'
  • use_time Integer
    help='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 Time'
Public methods (0)

No public methods.

New fields (1)
  • group_expiry_date_on_delivery_slip Boolean
    implied_group='product_expiry.group_expiry_date_on_delivery_slip' args: 'Display Expiration Dates on Delivery Slips'
Public methods (0)

No public methods.

New fields (1)
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (0)

No public methods.

New fields (1)
  • expiration_date Datetime
    compute='_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=True string='Expiration Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • alert_date Datetime
    help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' string='Alert Date'
  • expiration_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='Expiration Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Expiration Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
  • use_expiration_date Boolean
    related='product_id.use_expiration_date' string='Use Expiration Date'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • removal_date Datetime
    readonly=False related='lot_id.removal_date' store=True
  • use_expiration_date Boolean
    readonly=True related='product_id.use_expiration_date'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYOperations/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Simon Lejeune, Damien Bouvy, Xavier-Do, Victor Feyens, svs-odoo, Prakash Prajapati, Arnaud Baes, Haresh Shyara
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (5)
XML IDNameModelTypeStatus
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.production.lot xpath Inherits stock.search_product_lot_filter
view_move_form_expiry stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_production_lot_view_tree stock.production.lot.tree.inherit.product.expiry stock.production.lot xpath Inherits stock.view_production_lot_tree
view_quant_form_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_form
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • alert_time Integer
    help='Number of days before an alert should be raised on the lot/serial number.' string='Product Alert Time'
  • life_time Integer
    help='Number of days before the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number.' string='Product Life Time'
  • removal_time Integer
    help='Number of days before the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Product Removal Time'
  • use_time Integer
    help='Number of days before the goods starts deteriorating, without being dangerous yet. It will be computed using the lot/serial number.' string='Product Use Time'
Public methods (0)

No public methods.

New fields (6)
  • alert_date Datetime
    help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' string='Alert Date'
  • life_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='End of Life Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Alert Date has been reached.'
  • product_expiry_reminded Boolean
    string='Expiry has been reminded'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock. This date will be used in FEFO removal strategy.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • removal_date Datetime
    readonly=False related='lot_id.removal_date' store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Yannick Tivisse, qsm-odoo, Pierre Masereel, Adrian Torres, XavierDo, Xavier-Do
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (5)
XML IDNameModelTypeStatus
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.production.lot xpath Inherits stock.search_product_lot_filter
view_move_form_expiry stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_move_form_expiry_simple stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form_simple
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_quant_form_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_form
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • alert_time Integer
    help='Number of days before an alert should be raised on the lot/serial number.' string='Product Alert Time'
  • life_time Integer
    help='Number of days before the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number.' string='Product Life Time'
  • removal_time Integer
    help='Number of days before the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Product Removal Time'
  • use_time Integer
    help='Number of days before the goods starts deteriorating, without being dangerous yet. It will be computed using the lot/serial number.' string='Product Use Time'
Public methods (0)

No public methods.

New fields (5)
  • alert_date Datetime
    help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' string='Alert Date'
  • life_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='End of Life Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Alert Date has been reached.'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • removal_date Datetime
    readonly=False related='lot_id.removal_date' store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Christophe Simonis, Xavier Morel, Simon Lejeune, Nicolas Martinelli, GitHub, Yannick Tivisse, Odoo Online, Pierre Masereel, amoyaux
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - barcodes
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (6)
XML IDNameModelTypeStatus
report_delivery_document_inherit_product_expiry report_delivery_document_inherit_product_expiry ir.ui.view qweb Inherits stock.report_delivery_document
search_product_lot_filter_inherit_product_expiry stock.production.lot.search.inherit stock.production.lot xpath Inherits stock.search_product_lot_filter
view_move_form_expiry stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_move_form_expiry_simple stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form_simple
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_quant_form_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_form
Models touched (3)

New fields (4)
  • alert_time Integer
    help='Number of days before an alert should be raised on the lot/serial number.' string='Product Alert Time'
  • life_time Integer
    help='Number of days before the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number.' string='Product Life Time'
  • removal_time Integer
    help='Number of days before the goods should be removed from the stock. It will be computed on the lot/serial number.' string='Product Removal Time'
  • use_time Integer
    help='Number of days before the goods starts deteriorating, without being dangerous yet. It will be computed on the lot/serial number.' string='Product Use Time'
Public methods (0)

No public methods.

New fields (5)
  • alert_date Datetime
    help='Date to determine the expired lots and serial numbers using the filter "Expiration Alerts".' string='Alert Date'
  • life_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='End of Life Date'
  • product_expiry_alert Boolean
    compute='_compute_product_expiry_alert' help='The Alert Date has been reached.'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • removal_date Datetime
    related='lot_id.removal_date' store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/product_expiry
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Julien Legros, qdp-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
    - procurement
    - barcodes
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (4)
XML IDNameModelTypeStatus
report_delivery_document_inherit_product_expiry report_delivery_document_inherit_product_expiry ir.ui.view qweb Inherits stock.report_delivery_document
view_move_form_expiry stock.production.lot.inherit.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.template.inherit.form product.template group Inherits stock.view_template_property_form
view_quant_form_expiry stock.quant.inherit.form stock.quant xpath Inherits stock.view_stock_quant_form
Models touched (3)

New fields (4)
  • alert_time Integer
    help='When a new a Serial Number is issued, this is the number of days before an alert should be notified.' string='Product Alert Time'
  • life_time Integer
    help='When a new a Serial Number is issued, this is the number of days before the goods may become dangerous and must not be consumed.' string='Product Life Time'
  • removal_time Integer
    help='When a new a Serial Number is issued, this is the number of days before the goods should be removed from the stock.' string='Product Removal Time'
  • use_time Integer
    help='When a new a Serial Number is issued, this is the number of days before the goods starts deteriorating, without being dangerous yet.' string='Product Use Time'
Public methods (0)

No public methods.

New fields (4)
  • alert_date Datetime
    help='This is the date on which an alert should be notified about the goods with this Serial Number.' string='Alert Date'
  • life_date Datetime
    help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.' string='End of Life Date'
  • removal_date Datetime
    help='This is the date on which the goods with this Serial Number should be removed from the stock.' string='Removal Date'
  • use_date Datetime
    help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.' string='Best before Date'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • removal_date Datetime
    related='lot_id.removal_date' store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/product_expiry
VERSION
VERSION 1.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Frédéric van der Essen, Nicolas Martinelli, Richard Mathot, Yannick Tivisse
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - report
    - procurement
    - barcodes
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (3)
XML IDNameModelTypeStatus
view_move_form_expiry stock.production.lot.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.normal.form product.template group Inherits stock.view_template_property_form
view_quant_form_expiry stock.quant.form stock.quant xpath Inherits stock.view_stock_quant_form
Models touched (1)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/product_expiry
VERSION
VERSION 1.0
CATEGORY
CATEGORYSpecific Industry Applications
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRandhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Goffin Simon, Aaron Bohy
WEBSITE
WEBSITEhttps://www.odoo.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - report
    - procurement
    - board
    - web_kanban_gauge
    - web_kanban_sparkline
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (2)
XML IDNameModelTypeStatus
view_move_form_expiry stock.production.lot.form stock.production.lot xpath Inherits stock.view_production_lot_form
view_product_form_expiry product.normal.form product.template group Inherits product.product_template_form_view
Models touched (1)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/product_expiry
VERSION
VERSION 1.0
CATEGORY
CATEGORYSpecific Industry Applications
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Odoo Translation Bot, Numerigraphe - Lionel Sausin, Harry (OpenERP), Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Hardik, pso (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), Sanjay Gohel (Open ERP), help
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - process
    - web
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - account
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Track different dates on products and production lots.
======================================================

Following dates can be tracked:
-------------------------------
    - end of life
    - best before date
    - removal date
    - alert date

Used, for example, in food industries.

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_move_form_expiry stock.production.lot.form stock.production.lot field Inherits stock.view_production_lot_form
view_product_form_expiry product.normal.form product.product group Inherits stock.view_normal_procurement_locations_form
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/product_expiry
VERSION
VERSION 1.0
CATEGORY
CATEGORYSpecific Industry Applications
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Stephane Wirtel, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Vo Minh Thu, Launchpad Translations on behalf of openerp, vro, niv-openerp, Carlos Vásquez, Els Van Vossel, Israel Fermin Montilla, Hardik Ansodariy (OpenERP)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - process
    - decimal_precision
    - account
    - base_setup
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Track different dates on products and production lots.
======================================================

Following dates can be tracked:
    - end of life
    - best before date
    - removal date
    - alert date

Used, for example, in food industries.

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_move_form_expiry stock.production.lot.form stock.production.lot field Inherits stock.view_production_lot_form
view_product_form_expiry product.normal.form product.product notebook Inherits product.product_normal_form_view
Models touched (0)

No models found for this module.