Return Merchandise Authorization Management - Link with Sales

rma_sale
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/18.0/rma_sale
VERSION
VERSION 2.3.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, oca-ci, Marie Lejeune, eugenio
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to link a sales order to an RMA. This can be done
by creating an RMA from scratch and selecting the sales order, creating
one or more RMAs from a sales order form view or from a sales order web
portal page.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings block Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_move_form account.move.form - Add helper sale_line_ids account.move xpath Inherits account.view_move_form
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (9)

New fields (0)

No new fields.

Public methods (3)
  • button_cancel(self)
    If this a refund linked to an RMA, undo the linking of the reception move for having proper quantities and status.
  • button_draft(self)
    Relink the reception move when passing the refund again to draft.
  • unlink(self)
    If the invoice is removed, rollback the quantities correction

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (9)
  • allowed_move_ids Many2many → stock.move
    comodel_name='stock.move' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids' compute_sudo=True
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' compute='_compute_order_id' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', '=', 'sale'),]" readonly=False store=True string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • refund_id Many2one
    index=True
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (2)
  • action_refund(self)
    As we have made a refund, the return move + the refund should be linked to the source sales order line, to decrease both the delivered and invoiced quantity. NOTE: The refund line is linked to the SO line in `_prepare_refund_line`.
  • create_replace(self, scheduled_date, warehouse, product, qty, uom)

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (16)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • allowed_quantity Float
    digits='Product Unit of Measure' readonly=True
  • description Text
  • different_return_product Boolean
    related='operation_id.different_return_product'
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' compute='_compute_operation_id' readonly=False store=True string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' readonly=False required=True store=True
  • return_product_id Many2one → product.product
    help="Product to be returned if it's different from the originally delivered item." args: 'product.product'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (8)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • is_return_all Boolean
    default=True string='Return All?'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/17.0/rma_sale
VERSION
VERSION 2.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
COMMITTERSPedro M. Baeza, sbejaoui, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Alejandro Aladro
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
    - onboarding
    - analytic
    - sale_stock
    - sale
    - sales_team
    - account_payment
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to link a sales order to an RMA. This can be done
by creating an RMA from scratch and selecting the sales order, creating
one or more RMAs from a sales order form view or from a sales order web
portal page.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings block Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_move_form account.move.form - Add helper sale_line_ids account.move xpath Inherits account.view_move_form
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (9)

New fields (0)

No new fields.

Public methods (3)
  • button_cancel(self)
    If this a refund linked to an RMA, undo the linking of the reception move for having proper quantities and status.
  • button_draft(self)
    Relink the reception move when passing the refund again to draft.
  • unlink(self)
    If the invoice is removed, rollback the quantities correction

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (9)
  • allowed_move_ids Many2many → stock.move
    comodel_name='stock.move' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' compute='_compute_order_id' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=False store=True string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • refund_id Many2one
    index=True
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (2)
  • action_refund(self)
    As we have made a refund, the return move + the refund should be linked to the source sales order line, to decrease both the delivered and invoiced quantity. NOTE: The refund line is linked to the SO line in `_prepare_refund_line`.
  • create_replace(self, scheduled_date, warehouse, product, qty, uom)

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (16)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • allowed_quantity Float
    digits='Product Unit of Measure' readonly=True
  • description Text
  • different_return_product Boolean
    related='operation_id.different_return_product'
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' compute='_compute_operation_id' readonly=False store=True string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' readonly=False required=True store=True
  • return_product_id Many2one → product.product
    help="Product to be returned if it's different from the originally delivered item." args: 'product.product'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (8)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • is_return_all Boolean
    default=True string='Return All?'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/16.0/rma_sale
VERSION
VERSION 4.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
COMMITTERSPedro M. Baeza, sbejaoui, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_move_form account.move.form - Add helper sale_line_ids account.move xpath Inherits account.view_move_form
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (9)

New fields (0)

No new fields.

Public methods (3)
  • button_cancel(self)
    If this a refund linked to an RMA, undo the linking of the reception move for having proper quantities and status.
  • button_draft(self)
    Relink the reception move when passing the refund again to draft.
  • unlink(self)
    If the invoice is removed, rollback the quantities correction

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (9)
  • allowed_move_ids Many2many → stock.move
    comodel_name='stock.move' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' compute='_compute_order_id' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=False store=True string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • refund_id Many2one
    index=True
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (2)
  • action_refund(self)
    As we have made a refund, the return move + the refund should be linked to the source sales order line, to decrease both the delivered and invoiced quantity. NOTE: The refund line is linked to the SO line in `_prepare_refund_line`.
  • create_replace(self, scheduled_date, warehouse, product, qty, uom)

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (16)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • allowed_quantity Float
    digits='Product Unit of Measure' readonly=True
  • description Text
  • different_return_product Boolean
    related='operation_id.different_return_product'
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' compute='_compute_operation_id' readonly=False store=True string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' readonly=False required=True store=True
  • return_product_id Many2one → product.product
    help="Product to be returned if it's different from the originally delivered item." args: 'product.product'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (8)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • is_return_all Boolean
    default=True string='Return All?'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/15.0/rma_sale
VERSION
VERSION 1.3.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, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci, Alex Vining
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_move_form account.move.form - Add helper sale_line_ids account.move xpath Inherits account.view_move_form
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (9)

New fields (0)

No new fields.

Public methods (3)
  • button_cancel(self)
    If this a refund linked to an RMA, undo the linking of the reception move for having proper quantities and status.
  • button_draft(self)
    Relink the reception move when passing the refund again to draft.
  • unlink(self)
    If the invoice is removed, rollback the quantities correction

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (9)
  • allowed_move_ids Many2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=True states={'draft': [('readonly', False)]} string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • refund_id Many2one
    index=True
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (1)
  • action_refund(self)
    As we have made a refund, the return move + the refund should be linked to the source sales order line, to decrease both the delivered and invoiced quantity. NOTE: The refund line is linked to the SO line in `_prepare_refund_line`.

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • description Text
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    digits='Product Unit of Measure' required=True
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (6)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/14.0/rma_sale
VERSION
VERSION 2.3.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, david, OCA Transbot, Víctor Martínez, Sébastien BEAU, Florian da Costa, oca-travis, Weblate, OCA-git-bot, Chafique, David, Michael Tietz, Giovanni
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
assets_frontend Request RMA ir.ui.view qweb Inherits web.assets_frontend
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (8)

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (8)
  • allowed_move_ids Many2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=True states={'draft': [('readonly', False)]} string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (0)

No public methods.

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • description Text
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantity'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (6)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/13.0/rma_sale
VERSION
VERSION 2.4.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
COMMITTERSPedro M. Baeza, david, OCA Transbot, Víctor Martínez, Ernesto Tejeda, oca-travis, OCA-git-bot, SilvioGregorini
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
assets_frontend Request RMA ir.ui.view qweb Inherits web.assets_frontend
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (8)

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (8)
  • allowed_move_ids Many2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=True states={'draft': [('readonly', False)]} string='Sale Order'
  • picking_id Many2one
    domain="(order_id or partner_id) and [('id', 'in', allowed_picking_ids)] or [('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing')] "
  • product_id Many2one
    domain="order_id and [('id', 'in', allowed_product_ids)] or [('type', 'in', ['consu', 'product'])]"
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (0)

No public methods.

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • description Text
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantity'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (6)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/12.0/rma_sale
VERSION
VERSION 1.8.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
COMMITTERSPedro M. Baeza, david, OCA Transbot, Ernesto Tejeda, oca-travis, Weblate, 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
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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
assets_frontend Request RMA ir.ui.view qweb Inherits web.assets_frontend
portal_my_home_menu_sale portal_my_home_menu_sale ir.ui.view qweb Inherits sale.portal_my_home_menu_sale
portal_rma_page Show RMAs ir.ui.view qweb Inherits rma.portal_rma_page
report_rma_document report_rma_document ir.ui.view qweb Inherits rma.report_rma_document
request_rma_single_page Request RMA (single page) ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits sale.res_config_settings_view_form
rma_view_form rma.view.form rma field Inherits rma.rma_view_form
sale_order_portal_content Show RMAs ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_portal_template Request RMA ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_rma_wizard_form_view sale.order.rma.wizard.form sale.order.rma.wizard form New
sale_rma_request_form RMA Request Form ir.ui.view qweb New
view_order_form sale.order.form.inherit sale.order button Inherits sale.view_order_form
Models touched (8)

New fields (1)
  • show_full_page_sale_rma Boolean
    help='From the frontend sale order page go to a single RMA page creation instead of the usual popup' string='Full page RMA creation'
Public methods (0)

No public methods.

New fields (1)
  • show_full_page_sale_rma Boolean
    readonly=False related='company_id.show_full_page_sale_rma'
Public methods (0)

No public methods.

New fields (8)
  • allowed_move_ids Many2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_allowed_move_ids'
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • move_id Many2one
    domain="[('id', 'in', allowed_move_ids)]"
  • order_id Many2one → sale.order
    comodel_name='sale.order' domain="[ ('partner_id', 'child_of', commercial_partner_id), ('state', 'in', ['sale', 'done']),]" readonly=True states={'draft': [('readonly', False)]} string='Sale Order'
  • picking_id Many2one
    domain="[('id', 'in', allowed_picking_ids)]"
  • product_id Many2one
    domain="[('id', 'in', allowed_product_ids)]"
  • sale_line_id Many2one
    related='move_id.sale_line_id'
Public methods (0)

No public methods.

New fields (2)
  • rma_count Integer
    compute='_compute_rma_count' string='RMA count'
  • rma_ids One2many → rma
    comodel_name='rma' copy=False inverse_name='order_id' string='RMAs'
Public methods (3)
  • action_create_rma(self)
  • action_view_rma(self)
  • get_delivery_rma_data(self)

New fields (0)

No new fields.

Public methods (2)
  • get_delivery_move(self)
  • prepare_sale_rma_data(self)

New fields (13)
  • allowed_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' compute='_compute_allowed_picking_ids'
  • allowed_product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_allowed_product_ids'
  • description Text
  • move_id Many2one → stock.move
    comodel_name='stock.move' compute='_compute_move_id'
  • operation_id Many2one → rma.operation
    comodel_name='rma.operation' string='Requested operation'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • picking_id Many2one → stock.picking
    comodel_name='stock.picking' domain="[('id', 'in', allowed_picking_ids)]" string='Delivery order'
  • product_id Many2one → product.product
    comodel_name='product.product' domain="[('id', 'in', allowed_product_ids)]" required=True string='Product'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('category_id', '=', uom_category_id)]" required=True string='Unit of Measure'
  • wizard_id Many2one → sale.order.rma.wizard
    comodel_name='sale.order.rma.wizard' string='Wizard'
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (6)
  • commercial_partner_id Many2one → res.partner
    comodel_name='res.partner' related='order_id.partner_id.commercial_partner_id' string='Commercial entity'
  • custom_description Text
    help='Values coming from portal RMA request form custom fields'
  • line_ids One2many → sale.order.line.rma.wizard
    comodel_name='sale.order.line.rma.wizard' inverse_name='wizard_id' string='Lines'
  • location_id Many2one → stock.location
    comodel_name='stock.location' default=<expr> domain=_domain_location_id string='RMA location'
  • order_id Many2one → sale.order
    comodel_name='sale.order' default=<expr>
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' help='Will be used to return the goods when the RMA is completed' string='Shipping Address'
Public methods (2)
  • create_and_open_rma(self)
  • create_rma(self, from_portal=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.