Return Merchandise Authorization Management - Link with MRP Kits

rma_sale_mrp
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/18.0/rma_sale_mrp
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, OCA-git-bot, oca-ci, eduezerouali-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - 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
    - sale_stock
    - sale
    - sales_team
    - account_payment
    - payment
    - utm
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module enables RMAs for kits, wich isn't compatible with the base
modules. In the backend side, we can return separate component while in
the frontend side, customers can return the whole kit and the proper
RMAs will be generated.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits='Product Unit of Measure' help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (2)
  • action_draft(self)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/16.0/rma_sale_mrp
VERSION
VERSION 2.2.2
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, sbejaoui, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci, Joshua Lauer
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - 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
    - sale_stock
    - sale
    - sales_team
    - account_payment
    - payment
    - utm
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits='Product Unit of Measure' help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (2)
  • action_draft(self)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals)
    @api.model
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/15.0/rma_sale_mrp
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, David, oca-ci, Joshua Lauer
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - 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
    - sale_stock
    - sale
    - sales_team
    - payment
    - utm
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits='Product Unit of Measure' help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (2)
  • action_draft(self)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals)
    @api.model
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/14.0/rma_sale_mrp
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, David, Michael Tietz, oca-ci, Joshua Lauer
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - 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
    - sale_stock
    - sale
    - sales_team
    - payment
    - utm
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits='Product Unit of Measure' help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (2)
  • action_draft(self)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals)
    @api.model
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/13.0/rma_sale_mrp
VERSION
VERSION 2.0.2
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSdavid, oca-travis, Weblate, OCA-git-bot, David, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - 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
    - sale_stock
    - sale
    - sales_team
    - payment
    - utm
    - mrp
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits='Product Unit of Measure' help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (2)
  • action_draft(self)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals)
    @api.model
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/12.0/rma_sale_mrp
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYRMA
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSdavid, OCA Transbot, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - rma_sale
    - rma
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - stock
    - barcodes
    - sale_stock
    - sale
    - sales_team
    - payment
    - stock_account
    - mrp
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
portal_my_rmas My RMA Orders MRP ir.ui.view qweb Inherits rma.portal_my_rmas
portal_rma_page RMA Kits ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma_sale.report_rma_document
rma_view_form rma field Inherits rma_sale.rma_view_form
rma_view_tree rma field Inherits rma.rma_view_tree
sale_order_portal_template Request RMA MRP ir.ui.view qweb Inherits rma_sale.sale_rma_request_form
sale_order_rma_wizard_form_view sale.order.rma.wizard xpath Inherits rma_sale.sale_order_rma_wizard_form_view
Models touched (7)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • kit_qty Float
    digits=dp.get_precision('Product Unit of Measure') help='To how many kits this components corresponds to. Used mainly for refunding the right quantity' readonly=True string='Kit quantity'
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product' readonly=True string='Related kit product'
  • rma_kit_register Char
    readonly=True
Public methods (1)
  • action_refund(self)
    We want to process them altogether

New fields (0)

No new fields.

Public methods (1)
  • get_delivery_rma_data(self)
    Get the phantom lines we'll be showing in the wizard

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)
    We'll take both the sale order product and the phantom one so we can play with them when filtering or showing to the customer

New fields (4)
  • kit_qty_done Float
    help='Used to inform kit qty used in the rma. Will be useful to refund' readonly=True
  • per_kit_quantity Float
    readonly=True
  • phantom_bom_product Many2one → product.product
    comodel_name='product.product'
  • phantom_kit_line Boolean
    readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • component_line_ids One2many → sale.order.line.rma.wizard.component
    comodel_name='sale.order.line.rma.wizard.component' inverse_name='wizard_id' string='Component Lines'
Public methods (2)
  • create(self, vals)
    @api.model
    Split component lines
  • create_rma(self, from_portal=None)
    We kept the component lines in the shade and now we need to take the ones linked to the phatom lines (kits) to create the proper RMA for each component according to the proper component quantities