| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/18.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, ThiagoMForgeFlow, DavidJForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/17.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, ThiagoMForgeFlow, DavidJForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/16.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Lois Rilo, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow, DavidJForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/15.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Lois Rilo, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/14.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, Iryna Vyshnevska, BernatPForgeFlow, Dũng (Trần Đình), KV |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/13.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 2.4.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Lois Rilo, Sébastien Alix, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, BernatPForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
has_replaced_buffers
Boolean
compute='_compute_replaced_by_alert_text'
replaced_by_alert_text
Text
compute='_compute_replaced_by_alert_text'
No public methods.
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'
action_view_buffers_replaced(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/ddmrp |
| GIT | |
| GIT | https://github.com/OCA/ddmrp.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/ddmrp/tree/11.0/ddmrp_product_replace |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Eficent |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Eficent |
| COMMITTERS | |
| COMMITTERS | Lois Rilo, oca-travis, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/ddmrp |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-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 - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 |
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'
button_validate(self)
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'
No public methods.