Product Expiry Available

stock_available_product_expiry
REPOSITORY
REPOSITORYOCA/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/10.0/stock_available_product_expiry
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSDenis Roussel, oca-travis, OCA-git-bot, François Honoré
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_available
odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
    - procurement
    - barcodes
    - web_planner
    - product_expiry
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
assets_backend stock_available_product_expiry assets ir.ui.view qweb Inherits web.assets_backend
product_product_form_view product.product.form (in stock_available_product_expiry) product.product field Inherits stock.product_form_view_procurement_button
product_template_form_view product.template.form (in stock_available_product_expiry) product.template field Inherits stock.product_template_form_view_procurement_button
product_template_kanban_stock_view product.template.kanban (in stock_available_product_expiry) product.template field Inherits stock.product_template_kanban_stock_view
stock_scrap_expired_document stock_scrap_expired_document ir.ui.view qweb New
stock_scrap_expired_form_view stock.scrap.expired.form (in stock_available_product_expiry) stock.scrap.expired form New
stock_scrap_expired_line_tree_view stock.scrap.expired.line.tree (in stock_available_product_expiry) stock.scrap.expired.line tree New
stock_scrap_expired_search_view stock.scrap.expired.search (in stock_available_product_expiry) stock.scrap.expired search New
stock_scrap_expired_tree_view stock.scrap.expired.tree (in stock_available_product_expiry) stock.scrap.expired tree New
view_stock_configuration Stock settings: Take into account expired lots stock.config.settings data Inherits stock.view_stock_config_settings
view_stock_product_template_tree product.template.stock.available.tree (in stock_available_product_expiry) product.template tree Inherits stock.view_stock_product_template_tree
Models touched (7)

New fields (2)
  • outgoing_expired_qty Float
    compute='_compute_quantities' digits=dp.get_precision('Product Unit of Measure') help='Quantity of products that are planned to leave but which should be removed from the stock since these are expired.' string='Expired Outgoing'
  • qty_expired Float
    compute='_compute_quantities' digits=dp.get_precision('Product Unit of Measure') help='Stock for this Product that must be removed from the stock. This stock is no more available for sale to Customers.\nThis quantity include all the production lots with a past removal date.' string='Expired'
Public methods (1)
  • action_open_expired_quants(self)
    @api.multi

New fields (3)
  • check_expired_lots Boolean
    compute='_compute_check_expired_lots'
  • outgoing_expired_qty Float
    compute='_compute_quantities' digits=dp.get_precision('Product Unit of Measure') help='Quantity of products that are planned to leave but which should be removed from the stock since these are expired.' string='Expired Outgoing'
  • qty_expired Float
    compute='_compute_quantities' digits=dp.get_precision('Product Unit of Measure') help='Stock for this Product that must be removed from the stock. This stock is no more available for sale to Customers.\nThis quantity include all the production lots with a past removal date.' string='Expired'
Public methods (2)
  • action_open_expired_quants(self)
    @api.multi
  • action_open_quants(self)
    @api.multi

New fields (1)
  • stock_qty_available_lot_expired Boolean
    help='Check this if you want to compute stock level minus expired product lots (based on removal date) if it is defined' args: "Stock level won't take into account lots expired"
Public methods (2)
  • get_default_stock_qty_available_lot_expired(self, fields)
    @api.model
  • set_stock_qty_available_lot_expired(self)
    @api.multi

New fields (1)
  • removal_date Datetime
    index=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (9)
  • location_id Many2one → stock.location
    default=_get_default_location_id domain="[('usage', '=', 'internal')]" required=True states={'done': [('readonly', True)]} args: 'stock.location', 'Location'
  • move_ids One2many → stock.move
    compute='_compute_move_ids' readonly=True args: 'stock.move'
  • name Char
    copy=False default=<expr> readonly=True required=True states={'done': [('readonly', True)]} args: 'Reference'
  • origin Char
    string='Source Document'
  • owner_id Many2one → res.partner
    states={'done': [('readonly', True)]} args: 'res.partner', 'Owner'
  • removal_date Datetime
    default=fields.Datetime.now args: 'Expirity date'
  • scrap_location_id Many2one → stock.location
    default=_get_default_scrap_location_id domain="[('scrap_location', '=', True)]" states={'done': [('readonly', True)]} args: 'stock.location', 'Scrap Location'
  • state Selection
    default='draft' string='Status' args: [('draft', 'Draft'), ('prepared', 'Prepared'), ('done', 'Done')]
  • stock_scrap_expired_line_ids One2many → stock.scrap.expired.line
    inverse_name='stock_scrap_expired_id' states={'done': [('readonly', True)]} args: 'stock.scrap.expired.line'
Public methods (4)
  • action_confirm(self)
    @api.multi
  • action_get_stock_moves(self)
    @api.multi
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi

New fields (10)
  • expected_scrap_qty Float
    default=1.0 readonly=True required=True args: 'Expected Quantity'
  • location_id Many2one → stock.location
    readonly=True required=True args: 'stock.location', 'Location'
  • lot_id Many2one → stock.production.lot
    readonly=True required=True states={'done': [('readonly', True)]} args: 'stock.production.lot', 'Lot'
  • move_id Many2one → stock.move
    readonly=True related='stock_scrap_id.move_id' store=True args: 'stock.move', 'Scrap Move'
  • product_id Many2one → product.product
    readonly=True required=True args: 'product.product', 'Product'
  • product_uom_id Many2one → product.uom
    readonly=True required=True args: 'product.uom', 'Unit of Measure'
  • scrap_qty Float
    default=0.0 required=True states={'done': [('readonly', True)]} args: 'Quantity'
  • state Selection
    default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('done', 'Done')]
  • stock_scrap_expired_id Many2one → stock.scrap.expired
    index=True ondelete='cascade' readonly=True required=True args: 'stock.scrap.expired'
  • stock_scrap_id Many2one → stock.scrap
    readonly=True args: 'stock.scrap', 'Scrap'
Public methods (2)
  • do_scrap(self)
    @api.multi
  • unlink(self)
    @api.multi