DDMRP Product Replace

ddmrp_product_replace
REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/18.0/ddmrp_product_replace
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, ThiagoMForgeFlow, DavidJForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp_chatter
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_location_is_sublocation
OCA/stock-logistics-workflow:
    - stock_move_quantity_product_uom
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - 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
    - account
    - onboarding
    - analytic
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==3.6.3
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Provides a tool for product replacement.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' readonly=True string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/17.0/ddmrp_product_replace
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, ThiagoMForgeFlow, DavidJForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp_chatter
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_helper
OCA/stock-logistics-workflow:
    - stock_move_quantity_product_uom
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==3.4.1
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Provides a tool for product replacement.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' readonly=True string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/16.0/ddmrp_product_replace
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSLois Rilo, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow, DavidJForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_helper
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==3.1.1
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' readonly=True string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/15.0/ddmrp_product_replace
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSLois Rilo, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:34
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_helper
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==2.4.2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/14.0/ddmrp_product_replace
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSOCA Transbot, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, Iryna Vyshnevska, BernatPForgeFlow, Dũng (Trần Đình), KV
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_helper
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==2.3.1
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
    string='Copy Packaging'
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
    string='New Product Name'
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/13.0/ddmrp_product_replace
VERSION
VERSION 2.4.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSLois Rilo, Sébastien Alix, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, BernatPForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp
OCA/manufacture:
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/stock-logistics-warehouse:
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_helper
OCA/web:
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase_stock
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - purchase
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh==1.1.0
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
stock_buffer_search stock.buffer.search - ddmrp_product_replace stock.buffer filter Inherits ddmrp.stock_buffer_search
stock_buffer_view_form stock.buffer.form - ddmrp_product_replace stock.buffer sheet Inherits ddmrp.stock_buffer_view_form
stock_buffer_view_tree stock.buffer.tree - ddmrp_product_replace stock.buffer field Inherits ddmrp.stock_buffer_view_tree
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_make_procurement_buffer_wizard Request Procurement make.procurement.buffer xpath Inherits ddmrp.view_make_procurement_buffer_wizard
Models touched (4)

New fields (14)
  • buffer_ids Many2many → stock.buffer
    comodel_name='stock.buffer' compute='_compute_buffer_ids' readonly=False store=True string='Affected Buffers'
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_packaging Boolean
    string='Copy Packaging'
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • is_already_replaced Boolean
    compute='_compute_is_already_replaced'
  • mode Selection
    default='new_buffer' required=True selection=[('new_buffer', 'Create a new buffer for the replacing product.'), ('use_existing', 'Replace product in existing buffers')]
  • multi_product Boolean
    compute='_compute_multi_product'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
    string='New Product Name'
  • old_product_ids Many2many → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Products'
  • primary_old_product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_primary_old_product_id' domain="[('id', 'in', old_product_ids)]" readonly=False store=True string='Primary Replaced Product'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)

New fields (2)
  • has_replaced_buffers Boolean
    compute='_compute_replaced_by_alert_text'
  • replaced_by_alert_text Text
    compute='_compute_replaced_by_alert_text'
Public methods (0)

No public methods.

New fields (7)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' copy=False help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
  • is_replacement_product Boolean
    compute='_compute_is_replacement_product' help='The product of this buffer is replacing another product' store=True string='Replacement Product'
  • replaced_by_alert_text Char
    compute='_compute_replaced_by_alert_text'
  • replaced_by_id Many2one → stock.buffer
    comodel_name='stock.buffer' help='The product in this buffer is replaced by the product of selected buffer. When you replace another buffer:\n - Past Demand of the replacement buffer will include the past demand of this product\n - Several buffers can be replaced in chained and coexist at the same time: A replaces B that replaces C, then A aggregates both B and C where B only aggregates C' string='Replaced by' tracking=True
  • replacement_for_count Integer
    compute='_compute_replacement_for_count'
  • replacement_for_ids One2many → stock.buffer
    comodel_name='stock.buffer' inverse_name='replaced_by_id' string='Replaces'
  • use_replacement_for_buffer_status Boolean
    compute='_compute_use_replacement_for_buffer_status' copy=False help='If you tick this option, the buffer will consider the incoming and on-hand of all products it replaces and this will impact its NFP.' readonly=False store=True string='Include Incoming & On-Hands of replaced products'
Public methods (1)
  • action_view_buffers_replaced(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/ddmrp
GIT
GIThttps://github.com/OCA/ddmrp.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/ddmrp/tree/11.0/ddmrp_product_replace
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSLois Rilo, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/ddmrp
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/ddmrp:
    - ddmrp
OCA/manufacture:
    - mrp_bom_location
    - mrp_multi_level
    - mrp_warehouse_calendar
OCA/server-tools:
    - base_cron_exclusion
OCA/server-ux:
    - date_range
OCA/stock-logistics-warehouse:
    - stock_warehouse_orderpoint_stock_info
    - stock_warehouse_orderpoint_stock_info_unreserved
    - stock_available_unreserved
    - stock_orderpoint_purchase_link
    - stock_orderpoint_move_link
    - stock_orderpoint_uom
    - stock_orderpoint_manual_procurement
    - stock_demand_estimate
    - stock_warehouse_calendar
    - stock_putaway_product
    - stock_putaway_method
OCA/web:
    - web_tree_dynamic_colored_field
    - web_widget_x2many_2d_matrix
    - web_widget_bokeh_chart
odoo/odoo:
    - purchase
    - stock_account
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - barcodes
    - web_planner
    - account
    - analytic
    - portal
    - http_routing
    - mrp
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES bokeh
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_ddmrp_adjustment_sheet_wizard_form ddmrp.product.replace.form ddmrp.product.replace form New
view_warehouse_orderpoint_form stock.warehouse.orderpoint.form - ddmrp_product_replace stock.warehouse.orderpoint notebook Inherits ddmrp.view_warehouse_orderpoint_form
Models touched (2)

New fields (9)
  • consider_past_demand Boolean
    default=True help='Consider Old product moves as demand for new product' string='Consider Old Product Demand'
  • copy_putaway Boolean
    string='Copy Put Away Strategy'
  • copy_route Boolean
    string='Copy Routes'
  • new_product_default_code Char
    string='New Product Internal Ref.'
  • new_product_id Many2one → product.product
    comodel_name='product.product' help='Product that is going to replace the other one.' string='Substitute Product'
  • new_product_name Char
    string='New Product Name'
  • old_product_id Many2one → product.product
    comodel_name='product.product' help='Product to be replaced.' ondelete='cascade' required=True string='Replaced Product'
  • orderpoint_ids Many2many → stock.warehouse.orderpoint
    comodel_name='stock.warehouse.orderpoint' compute='_compute_orderpoint_ids' readonly=True string='Affected Buffers'
  • use_existing Selection
    required=True selection=[('existing', 'Use Existing Product'), ('new', 'Create New Product')] string='Use Existing/New Product'
Public methods (1)
  • button_validate(self)
    @api.multi

New fields (1)
  • demand_product_ids Many2many → product.product
    comodel_name='product.product' help='This field is used for a correct product replacement within a DDMRP buffer.' string='Considered As Demand'
Public methods (0)

No public methods.