| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/18.0/rma |
| VERSION | |
| VERSION | 2.5.1 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | sbejaoui, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, eduezerouali-tecnativa |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows you to manage [Return Merchandise Authorization (RMA)](https://en.wikipedia.org/wiki/Return_merchandise_authorization). RMA documents can be created from scratch, from a delivery order or from an incoming email. Product receptions and returning delivery operations of the RMA module are fully integrated with the Receipts and Deliveries Operations of Odoo inventory core module. It also allows you to generate refunds in the same way as Odoo generates it. Besides, you have full integration of the RMA documents in the customer portal. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits base.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_operation_form_view |
rma.operation | form | New | |
rma_operation_kanban |
rma.operation.kanban | rma.operation | kanban | New |
rma_operation_search_view |
rma.operation | search | New | |
rma_operation_tree_view |
rma.operation | list | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_rma_wizard_form_view |
rma.rma.wizard.form | rma.rma.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | list | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | list | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | list | New |
view_rma_tag_form |
Tags | rma.tag | form | New |
view_rma_tag_list |
Tags | rma.tag | list | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_new_rma_button_from_rma
Boolean
help='If an RMA has been delivered (returned or replaced), a button will appear that allows you to create a new RMA to manage the delivered items'
string='Button to create a new RMA from another one'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals_list)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
domain="[('model', '=', 'rma')]"
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
domain="[('model', '=', 'rma')]"
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
domain="[('model', '=', 'rma')]"
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_new_rma_button_from_rma
Boolean
readonly=False
related='company_id.rma_new_rma_button_from_rma'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_new_rma
Boolean
compute='_compute_can_be_new_rma'
compute_sudo=True
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
date
Datetime
default=fields.Datetime.now
index=True
required=True
deadline
Date
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
different_return_product
Boolean
related='operation_id.different_return_product'
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
compute='_compute_location_id'
domain=_domain_location_id
readonly=False
store=True
manual_finish_allowed
Boolean
compute='_compute_manual_finish_allowed'
help='Indicates whether this RMA can be manually finished, without requiring further processing such as a receipt, delivery, or refund.'
move_id
Many2one → stock.move
comodel_name='stock.move'
compute='_compute_move_id'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=False
store=True
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
tracking=True
origin
Char
help='Reference of the document that generated this RMA.'
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=False
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
help='Shipping address for current RMA.'
readonly=False
store=True
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
string='Origin Delivery'
priority
Selection
default='1'
selection=PROCUREMENT_PRIORITIES
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
domain=[('type', 'in', ['consu', 'product'])]
readonly=False
store=True
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
default=<expr>
readonly=False
required=True
store=True
string='UoM'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
readonly=False
required=True
store=True
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
rma_count
Integer
compute='_compute_rma_count'
compute_sudo=True
string='RMA count'
sent
Boolean
show_create_receipt
Boolean
compute='_compute_show_create_receipt'
string='Show Create Receipt Button'
show_create_refund
Boolean
compute='_compute_show_refund_replace'
string='Show Create refund Button'
show_create_replace
Boolean
compute='_compute_show_create_replace'
string='Show Create replace Button'
show_create_return
Boolean
compute='_compute_show_create_return'
string='Show Create Return Button'
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded/Not invoiceable'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
compute='_compute_team_id'
index=True
store=True
string='RMA team'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
string='Category UoM'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_create_receipt(self)
action_create_rma(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
action_view_rma(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
uom_category_id
Many2one
related='product_id.uom_id.category_id'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
domain="[('company_id', '=', company_id)]"
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
action_create_delivery
Selection
default='manual_after_receipt'
help='Define how the delivery action should be handled.'
string='Delivery Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt')]
action_create_receipt
Selection
default='automatic_on_confirm'
help='Define how the receipt action should be handled.'
string='Create Receipt'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm')]
action_create_refund
Selection
default='manual_after_receipt'
help='Define how the refund action should be handled.'
string='Refund Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt'), ('update_quantity', 'Update Quantities')]
active
Boolean
default=True
auto_confirm_reception
Boolean
help='Enable this option to automatically confirm the reception when the RMA is confirmed.'
color
Integer
count_rma_awaiting_action
Integer
compute='_compute_count_rma'
count_rma_draft
Integer
compute='_compute_count_rma'
count_rma_processed
Integer
compute='_compute_count_rma'
different_return_product
Boolean
help='If checked, allows the return of a product different from the one originally ordered. Used if the delivery is created automatically'
name
Char
required=True
translate=True
prevent_delivery_grouping
Boolean
help='If enabled, RMAs using this operation will NOT be grouped into a single delivery picking, even if the company setting allows grouping.'
string='Do not group deliveries'
copy(self, default=None)
get_action_all_rma(self)
get_action_rma_tree_awaiting_action(self)
get_action_rma_tree_draft(self)
get_action_rma_tree_processed(self)
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
required=True
string='Requested operation'
rma_id
Many2one → rma
comodel_name='rma'
default=<expr>
create_and_open_rma(self)
create_rma(self)
default_get(self, fields_list)
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
index=True
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
create_rma
Boolean
string='Create RMAs'
picking_type_code
Selection
related='picking_id.picking_type_id.code'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
action_create_returns(self)
different_return_product
Boolean
related='rma_operation_id.different_return_product'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
compute='_compute_rma_operation_id'
readonly=False
store=True
string='Operation'
No public methods.
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_route_id
Many2one → stock.route
copy=False
ondelete='restrict'
args: 'stock.route', 'RMA in Route'
rma_in_type_id
Many2one → stock.picking.type
check_company=True
comodel_name='stock.picking.type'
copy=False
string='RMA In Type'
rma_loc_id
Many2one → stock.location
check_company=True
comodel_name='stock.location'
string='RMA Location'
rma_out_replace_route_id
Many2one → stock.route
rma_out_route_id
Many2one → stock.route
copy=False
ondelete='restrict'
args: 'stock.route', 'RMA out Route'
rma_out_type_id
Many2one → stock.picking.type
check_company=True
comodel_name='stock.picking.type'
copy=False
string='RMA Out Type'
get_rules_dict(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/17.0/rma |
| VERSION | |
| VERSION | 3.3.3 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | sbejaoui, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Joshua Lauer, Antoni Marroig Campomar, Juan Alberto Raja, giovannigd |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows you to manage [Return Merchandise Authorization (RMA)](https://en.wikipedia.org/wiki/Return_merchandise_authorization). RMA documents can be created from scratch, from a delivery order or from an incoming email. Product receptions and returning delivery operations of the RMA module are fully integrated with the Receipts and Deliveries Operations of Odoo inventory core module. It also allows you to generate refunds in the same way as Odoo generates it. Besides, you have full integration of the RMA documents in the customer portal. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits base.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_operation_form_view |
rma.operation | form | New | |
rma_operation_kanban |
rma.operation | kanban | New | |
rma_operation_search_view |
rma.operation | search | New | |
rma_operation_tree_view |
rma.operation | tree | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | tree | New |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals_list)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
date
Datetime
default=fields.Datetime.now
index=True
required=True
deadline
Date
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
different_return_product
Boolean
related='operation_id.different_return_product'
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
compute='_compute_location_id'
domain=_domain_location_id
readonly=False
store=True
manual_finish_allowed
Boolean
compute='_compute_manual_finish_allowed'
help='Indicates whether this RMA can be manually finished, without requiring further processing such as a receipt, delivery, or refund.'
move_id
Many2one → stock.move
comodel_name='stock.move'
compute='_compute_move_id'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=False
store=True
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=False
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
help='Shipping address for current RMA.'
readonly=False
store=True
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
string='Origin Delivery'
priority
Selection
default='1'
selection=PROCUREMENT_PRIORITIES
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
domain=[('type', 'in', ['consu', 'product'])]
readonly=False
store=True
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
default=<expr>
readonly=False
required=True
store=True
string='UoM'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
readonly=False
required=True
store=True
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
sent
Boolean
show_create_receipt
Boolean
compute='_compute_show_create_receipt'
string='Show Create Receipt Button'
show_create_refund
Boolean
compute='_compute_show_refund_replace'
string='Show Create refund Button'
show_create_replace
Boolean
compute='_compute_show_create_replace'
string='Show Create replace Button'
show_create_return
Boolean
compute='_compute_show_create_return'
string='Show Create Return Button'
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
compute='_compute_team_id'
index=True
store=True
string='RMA team'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
string='Category UoM'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_create_receipt(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
uom_category_id
Many2one
related='product_id.uom_id.category_id'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
action_create_delivery
Selection
default='manual_after_receipt'
help='Define how the delivery action should be handled.'
string='Delivery Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt')]
action_create_receipt
Selection
default='automatic_on_confirm'
help='Define how the receipt action should be handled.'
string='Create Receipt'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm')]
action_create_refund
Selection
default='manual_after_receipt'
help='Define how the refund action should be handled.'
string='Refund Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt'), ('update_quantity', 'Update Quantities')]
active
Boolean
default=True
auto_confirm_reception
Boolean
help='Enable this option to automatically confirm the reception when the RMA is confirmed.'
color
Integer
count_rma_awaiting_action
Integer
compute='_compute_count_rma'
count_rma_draft
Integer
compute='_compute_count_rma'
count_rma_processed
Integer
compute='_compute_count_rma'
different_return_product
Boolean
help='If checked, allows the return of a product different from the one originally ordered. Used if the delivery is created automatically'
name
Char
required=True
translate=True
prevent_delivery_grouping
Boolean
help='If enabled, RMAs using this operation will NOT be grouped into a single delivery picking, even if the company setting allows grouping.'
string='Do not group deliveries'
get_action_all_rma(self)
get_action_rma_tree_awaiting_action(self)
get_action_rma_tree_draft(self)
get_action_rma_tree_processed(self)
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
index=True
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
location_id
Many2one
domain="create_rma and [('id', 'child_of', rma_location_ids)]or ['|', ('id', '=', original_location_id), '|', '&', ('return_location', '=', True), ('company_id', '=', False), '&', ('return_location', '=', True), ('company_id', '=', company_id)]"
picking_type_code
Selection
related='picking_id.picking_type_id.code'
rma_location_ids
Many2many → stock.location
comodel_name='stock.location'
compute='_compute_rma_location_id'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
create_returns(self)
different_return_product
Boolean
related='rma_operation_id.different_return_product'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
compute='_compute_rma_operation_id'
readonly=False
store=True
string='Operation'
No public methods.
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_route_id
Many2one → stock.route
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_replace_route_id
Many2one → stock.route
rma_out_route_id
Many2one → stock.route
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
get_rules_dict(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/16.0/rma |
| VERSION | |
| VERSION | 5.3.6 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, sbejaoui, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci, Joshua Lauer |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - 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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits base.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_operation_form_view |
rma.operation | form | New | |
rma_operation_kanban |
rma.operation | kanban | New | |
rma_operation_search_view |
rma.operation | search | New | |
rma_operation_tree_view |
rma.operation | tree | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | tree | New |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals_list)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
date
Datetime
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
deadline
Date
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
delivered_qty_done
Float
compute='_compute_delivered_qty'
compute_sudo=True
digits='Product Unit of Measure'
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
readonly=True
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
different_return_product
Boolean
related='operation_id.different_return_product'
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
compute='_compute_location_id'
domain=_domain_location_id
readonly=False
store=True
manual_finish_allowed
Boolean
compute='_compute_manual_finish_allowed'
help='Indicates whether this RMA can be manually finished, without requiring further processing such as a receipt, delivery, or refund.'
move_id
Many2one → stock.move
comodel_name='stock.move'
compute='_compute_move_id'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=False
store=True
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
readonly=True
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=False
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
help='Shipping address for current RMA.'
readonly=False
store=True
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin Delivery'
priority
Selection
default='1'
readonly=True
selection=PROCUREMENT_PRIORITIES
states={'draft': [('readonly', False)]}
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
readonly=True
states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)], 'received': [('readonly', False)]}
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
domain=[('type', 'in', ['consu', 'product'])]
readonly=False
store=True
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
default=<expr>
readonly=False
required=True
store=True
string='UoM'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
readonly=False
required=True
store=True
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
readonly=True
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
readonly=True
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
remaining_qty_to_done
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty to done'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
sent
Boolean
show_create_receipt
Boolean
compute='_compute_show_create_receipt'
string='Show Create Receipt Button'
show_create_refund
Boolean
compute='_compute_show_refund_replace'
string='Show Create refund Button'
show_create_replace
Boolean
compute='_compute_show_create_replace'
string='Show Create replace Button'
show_create_return
Boolean
compute='_compute_show_create_return'
string='Show Create Return Button'
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
compute='_compute_team_id'
index=True
readonly=False
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
store=True
string='RMA team'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
string='Category UoM'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_create_receipt(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
uom_category_id
Many2one
related='product_id.uom_id.category_id'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
action_create_delivery
Selection
default='manual_after_receipt'
help='Define how the delivery action should be handled.'
string='Delivery Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt')]
action_create_receipt
Selection
default='automatic_on_confirm'
help='Define how the receipt action should be handled.'
string='Create Receipt'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm')]
action_create_refund
Selection
default='manual_after_receipt'
help='Define how the refund action should be handled.'
string='Refund Action'
args: [('manual_on_confirm', 'Manually on Confirm'), ('automatic_on_confirm', 'Automatically on Confirm'), ('manual_after_receipt', 'Manually After Receipt'), ('automatic_after_receipt', 'Automatically After Receipt'), ('update_quantity', 'Update Quantities')]
active
Boolean
default=True
auto_confirm_reception
Boolean
help='Enable this option to automatically confirm the reception when the RMA is confirmed.'
color
Integer
count_rma_awaiting_action
Integer
compute='_compute_count_rma'
count_rma_draft
Integer
compute='_compute_count_rma'
count_rma_processed
Integer
compute='_compute_count_rma'
different_return_product
Boolean
help='If checked, allows the return of a product different from the one originally ordered. Used if the delivery is created automatically'
name
Char
required=True
translate=True
prevent_delivery_grouping
Boolean
help='If enabled, RMAs using this operation will NOT be grouped into a single delivery picking, even if the company setting allows grouping.'
string='Do not group deliveries'
get_action_all_rma(self)
get_action_rma_tree_awaiting_action(self)
get_action_rma_tree_draft(self)
get_action_rma_tree_processed(self)
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
index=True
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
location_id
Many2one
domain="create_rma and [('id', 'child_of', rma_location_ids)]or ['|', ('id', '=', original_location_id), '|', '&', ('return_location', '=', True), ('company_id', '=', False), '&', ('return_location', '=', True), ('company_id', '=', company_id)]"
picking_type_code
Selection
related='picking_id.picking_type_id.code'
rma_location_ids
Many2many → stock.location
comodel_name='stock.location'
compute='_compute_rma_location_id'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
create_returns(self)
different_return_product
Boolean
related='rma_operation_id.different_return_product'
return_product_id
Many2one → product.product
help="Product to be returned if it's different from the originally delivered item."
args: 'product.product'
rma_operation_id
Many2one → rma.operation
comodel_name='rma.operation'
compute='_compute_rma_operation_id'
readonly=False
store=True
string='Operation'
No public methods.
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_route_id
Many2one → stock.route
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_replace_route_id
Many2one → stock.route
rma_out_route_id
Many2one → stock.route
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
get_rules_dict(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/15.0/rma |
| VERSION | |
| VERSION | 1.3.2 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci, Joshua Lauer, Nikolaus Weingartmair |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource - account - analytic |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits stock.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | tree | New |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
date
Datetime
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
deadline
Date
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
delivered_qty_done
Float
compute='_compute_delivered_qty'
compute_sudo=True
digits='Product Unit of Measure'
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
readonly=True
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=_domain_location_id
readonly=True
states={'draft': [('readonly', False)]}
move_id
Many2one → stock.move
comodel_name='stock.move'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
readonly=True
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
help='Shipping address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin Delivery'
priority
Selection
default='1'
readonly=True
selection=PROCUREMENT_PRIORITIES
states={'draft': [('readonly', False)]}
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
readonly=True
states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)], 'received': [('readonly', False)]}
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', 'in', ['consu', 'product'])]
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='UoM'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
readonly=True
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
readonly=True
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
remaining_qty_to_done
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty to done'
sent
Boolean
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='RMA team'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
string='Category UoM'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
uom_category_id
Many2one
related='product_id.uom_id.category_id'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
active
Boolean
default=True
name
Char
required=True
translate=True
No public methods.
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
picking_type_code
Selection
related='picking_id.picking_type_id.code'
create_returns(self)
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
create(self, vals_list)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/14.0/rma |
| VERSION | |
| VERSION | 3.3.0 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, david, OCA Transbot, Miquel Raïch, Víctor Martínez, Florian da Costa, oca-travis, Weblate, OCA-git-bot, Chafique, David, oca-ci, Giovanni, Patrick Wilson, oca-git-bot, Kev-Roche, Joshua Lauer, Freni Patel, FrankC013 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource - account - analytic |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits stock.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | tree | New |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
date
Datetime
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
deadline
Date
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
string='Delivered qty'
delivered_qty_done
Float
compute='_compute_delivered_qty'
compute_sudo=True
digits='Product Unit of Measure'
string='Delivered qty done'
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
readonly=True
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=_domain_location_id
readonly=True
states={'draft': [('readonly', False)]}
move_id
Many2one → stock.move
comodel_name='stock.move'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Name'
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
readonly=True
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
help='Shipping address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin Delivery'
priority
Selection
default='1'
readonly=True
selection=PROCUREMENT_PRIORITIES
states={'draft': [('readonly', False)]}
string='Priority'
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
readonly=True
states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)], 'received': [('readonly', False)]}
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', 'in', ['consu', 'product'])]
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='UoM'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
readonly=True
string='Refund'
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
readonly=True
string='Refund line'
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
remaining_qty_to_done
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty to done'
sent
Boolean
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='RMA team'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
string='Category UoM'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now()
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
string='Type'
uom_category_id
Many2one
related='product_id.uom_id.category_id'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
active
Boolean
default=True
name
Char
required=True
translate=True
No public methods.
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
picking_type_code
Selection
related='picking_id.picking_type_id.code'
create_returns(self)
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
create(self, vals_list)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/13.0/rma |
| VERSION | |
| VERSION | 2.7.4 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, david, OCA Transbot, Víctor Martínez, Ernesto Tejeda, oca-travis, Weblate, OCA-git-bot, David |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - account - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits stock.res_config_settings_view_form | |
rma_finalization_form |
rma | xpath | Inherits rma.rma_view_form | |
rma_finalization_view_search |
rma.finalization | search | New | |
rma_finalization_wizard_view_form |
rma.finalization.wizard | form | New | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_finalization_form |
Rma Finalization Reasons | rma.finalization | form | New |
view_rma_finalization_list |
RMA Finalization Reasons | rma.finalization | tree | New |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)post(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
rma_return_grouping
Boolean
default=True
string='Group RMA returns by customer address and warehouse'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals)
create_rma_index(self)
group_rma_manual_finalization
Boolean
help='Allow to finish an RMA without returning back a product or refunding'
implied_group='rma.group_rma_manual_finalization'
string='Finish RMA manually choosing a reason'
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
rma_return_grouping
Boolean
readonly=False
related='company_id.rma_return_grouping'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_finished
Boolean
compute='_compute_can_be_finished'
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
date
Datetime
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
deadline
Date
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
delivered_qty
Float
compute='_compute_delivered_qty'
digits='Product Unit of Measure'
store=True
string='Delivered qty'
delivered_qty_done
Float
compute='_compute_delivered_qty'
compute_sudo=True
digits='Product Unit of Measure'
string='Delivered qty done'
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
readonly=True
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
string='Finalization Reason'
tracking=True
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=_domain_location_id
readonly=True
states={'draft': [('readonly', False)]}
move_id
Many2one → stock.move
comodel_name='stock.move'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Name'
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
readonly=True
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Customer'
tracking=True
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Refund address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
help='Shipping address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin Delivery'
priority
Selection
default='1'
readonly=True
selection=PROCUREMENT_PRIORITIES
states={'draft': [('readonly', False)]}
string='Priority'
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
readonly=True
states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)], 'received': [('readonly', False)]}
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', 'in', ['consu', 'product'])]
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='UoM'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.move
comodel_name='account.move'
copy=False
readonly=True
string='Refund'
refund_line_id
Many2one → account.move.line
comodel_name='account.move.line'
copy=False
readonly=True
string='Refund line'
remaining_qty
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty'
remaining_qty_to_done
Float
compute='_compute_remaining_qty'
digits='Product Unit of Measure'
string='Remaining delivered qty to done'
sent
Boolean
state
Selection
copy=False
default='draft'
tracking=True
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('finished', 'Finished'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='RMA team'
user_id
Many2one → res.users
comodel_name='res.users'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Responsible'
tracking=True
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_draft(self)
action_finish(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals_list)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
string='Product qty'
rma_count
Integer
rma_return_grouping
Boolean
default=<expr>
string='Group RMA returns by customer address and warehouse'
scheduled_date
Datetime
default=fields.Datetime.now()
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
string='Type'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
company_id
Many2one → res.company
comodel_name='res.company'
name
Char
copy=False
required=True
string='Reason Name'
translate=True
No public methods.
finalization_id
Many2one → rma.finalization
comodel_name='rma.finalization'
required=True
string='Reason'
action_finish(self)
active
Boolean
default=True
name
Char
required=True
translate=True
No public methods.
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits='Product Unit of Measure'
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
get_alias_model_name(self, vals)
get_alias_values(self)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
picking_type_code
Selection
readonly=True
related='picking_id.picking_type_id.code'
selection=[('incoming', 'Vendors'), ('outgoing', 'Customers'), ('internal', 'Internal')]
store=True
create_returns(self)
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
create(self, vals_list)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/12.0/rma |
| VERSION | |
| VERSION | 2.6.0 |
| CATEGORY | |
| CATEGORY | RMA |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, david, OCA Transbot, Ernesto Tejeda, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/rma |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account - base_setup - base - web - product - decimal_precision - bus - web_tour - uom - analytic - portal - http_routing - digest - stock - barcodes |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home_menu_rma |
Portal layout : RMA menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_rma |
Portal My Home : RMA entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_rmas |
My RMA Orders | ir.ui.view | qweb | New |
portal_rma_page |
My RMA | ir.ui.view | qweb | New |
report_rma |
report_rma | ir.ui.view | qweb | New |
report_rma_document |
report_rma_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings | xpath | Inherits stock.res_config_settings_view_form | |
rma_redelivery_wizard_view_form |
rma.delivery.wizard.form | rma.delivery.wizard | form | New |
rma_split_wizard_view_form2 |
rma.split.wizard.form | rma.split.wizard | form | New |
rma_tag_view_search |
rma.tag | search | New | |
rma_team_view_form |
rma.team.view.form | rma.team | form | New |
rma_team_view_tree |
rma.team | tree | New | |
rma_view_calendar |
rma.calendar | rma | calendar | New |
rma_view_form |
rma.view.form | rma | form | New |
rma_view_pivot |
rma.pivot | rma | pivot | New |
rma_view_search |
rma.view.search | rma | search | New |
rma_view_tree |
rma.view.tree | rma | tree | New |
view_partner_form |
res.partner.form | res.partner | div | Inherits base.view_partner_form |
view_picking_form |
stock.picking.form | stock.picking | div | Inherits stock.view_picking_form |
view_rma_tag_form |
Rma Tags | rma.tag | form | New |
view_rma_tag_list |
RMA Tags | rma.tag | tree | New |
view_stock_return_picking_form |
Return lines inherit RMA | stock.return.picking | xpath | Inherits stock.view_stock_return_picking_form |
view_warehouse_inherit_mrp |
Stock Warehouse Inherit MRP | stock.warehouse | xpath | Inherits stock.view_warehouse |
No new fields.
Public methods (2)action_invoice_open(self)
unlink(self)
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
No public methods.
rma_mail_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_confirmation_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA is confirmed.'
string='Email Template confirmation for RMA'
rma_mail_draft_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_draft_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer when they place an RMA from the portal'
string='Email Template draft notification for RMA'
rma_mail_receipt_confirmation_template_id
Many2one → mail.template
comodel_name='mail.template'
default=_default_rma_mail_receipt_template
domain="[('model', '=', 'rma')]"
help='Email sent to the customer once the RMA products are received.'
string='Email Template receipt confirmation for RMA'
send_rma_confirmation
Boolean
help='When the delivery is confirmed, send a confirmation email to the customer.'
string='Send RMA Confirmation'
send_rma_draft_confirmation
Boolean
help='When a customer places an RMA, send a notification with it'
string='Send RMA draft Confirmation'
send_rma_receipt_confirmation
Boolean
help='When the RMA receipt is confirmed, send a confirmation email to the customer.'
string='Send RMA Receipt Confirmation'
create(self, vals)
create_rma_index(self)
rma_mail_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_confirmation_template_id'
rma_mail_draft_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_draft_confirmation_template_id'
rma_mail_receipt_confirmation_template_id
Many2one
readonly=False
related='company_id.rma_mail_receipt_confirmation_template_id'
send_rma_confirmation
Boolean
readonly=False
related='company_id.send_rma_confirmation'
send_rma_draft_confirmation
Boolean
readonly=False
related='company_id.send_rma_draft_confirmation'
send_rma_receipt_confirmation
Boolean
readonly=False
related='company_id.send_rma_receipt_confirmation'
No public methods.
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
rma_ids
One2many → rma
comodel_name='rma'
inverse_name='partner_id'
string='RMAs'
action_view_rma(self)
rma_team_id
Many2one → rma.team
comodel_name='rma.team'
help='RMA Team the user is member of.'
string='RMA Team'
No public methods.
can_be_locked
Boolean
compute='_compute_can_be_locked'
can_be_refunded
Boolean
compute='_compute_can_be_refunded'
can_be_replaced
Boolean
compute='_compute_can_be_replaced'
can_be_returned
Boolean
compute='_compute_can_be_returned'
can_be_split
Boolean
compute='_compute_can_be_split'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
related='partner_id.commercial_partner_id'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
date
Datetime
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
deadline
Date
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
delivered_qty
Float
compute='_compute_delivered_qty'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Delivered qty'
delivered_qty_done
Float
compute='_compute_delivered_qty'
digits=dp.get_precision('Product Unit of Measure')
string='Delivered qty done'
delivery_move_ids
One2many → stock.move
comodel_name='stock.move'
copy=False
inverse_name='rma_id'
readonly=True
string='Delivery reservation'
delivery_picking_count
Integer
compute='_compute_delivery_picking_count'
string='Delivery count'
description
Html
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=_domain_location_id
readonly=True
states={'draft': [('readonly', False)]}
move_id
Many2one → stock.move
comodel_name='stock.move'
domain="[ ('picking_id', '=', picking_id), ('picking_id', '!=', False)]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin move'
name
Char
copy=False
default=<expr>
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Name'
operation_id
Many2one → rma.operation
comodel_name='rma.operation'
string='Requested operation'
origin
Char
help='Reference of the document that generated this RMA.'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Source Document'
origin_split_rma_id
Many2one → rma
comodel_name='rma'
copy=False
readonly=True
string='Extracted from'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
readonly=True
states={'draft': [('readonly', False)]}
string='Customer'
track_visibility='always'
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
domain=[('customer', '=', True)]
help='Refund address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
help='Shipping address for current RMA.'
readonly=True
states={'draft': [('readonly', False)]}
string='Shipping Address'
picking_id
Many2one → stock.picking
comodel_name='stock.picking'
domain="[ ('state', '=', 'done'), ('picking_type_id.code', '=', 'outgoing'), ('partner_id', 'child_of', commercial_partner_id),]"
readonly=True
states={'draft': [('readonly', False)]}
string='Origin Delivery'
priority
Selection
default='1'
readonly=True
selection=PROCUREMENT_PRIORITIES
states={'draft': [('readonly', False)]}
string='Priority'
procurement_group_id
Many2one → procurement.group
comodel_name='procurement.group'
readonly=True
states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)], 'received': [('readonly', False)]}
string='Procurement group'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', 'in', ['consu', 'product'])]
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='UoM'
product_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Quantity'
reception_move_id
Many2one → stock.move
comodel_name='stock.move'
copy=False
string='Reception move'
refund_id
Many2one → account.invoice
comodel_name='account.invoice'
copy=False
readonly=True
string='Refund'
refund_line_id
Many2one → account.invoice.line
comodel_name='account.invoice.line'
copy=False
readonly=True
string='Refund line'
remaining_qty
Float
compute='_compute_remaining_qty'
digits=dp.get_precision('Product Unit of Measure')
string='Remaining delivered qty'
remaining_qty_to_done
Float
compute='_compute_remaining_qty'
digits=dp.get_precision('Product Unit of Measure')
string='Remaining delivered qty to done'
sent
Boolean
state
Selection
copy=False
default='draft'
track_visibility='onchange'
args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('received', 'Received'), ('waiting_return', 'Waiting for return'), ('waiting_replacement', 'Waiting for replacement'), ('refunded', 'Refunded'), ('returned', 'Returned'), ('replaced', 'Replaced'), ('locked', 'Locked'), ('cancelled', 'Canceled')]
tag_ids
Many2many → rma.tag
comodel_name='rma.tag'
string='Tags'
team_id
Many2one → rma.team
comodel_name='rma.team'
index=True
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='RMA team'
user_id
Many2one → res.users
comodel_name='res.users'
states={'locked': [('readonly', True)], 'cancelled': [('readonly', True)]}
string='Responsible'
track_visibility='always'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
compute='_compute_warehouse_id'
store=True
action_cancel(self)
action_confirm(self)
action_draft(self)
action_lock(self)
action_preview(self)
action_refund(self)
action_replace(self)
action_return(self)
action_rma_send(self)
action_split(self)
action_unlock(self)
action_view_delivery(self)
action_view_receipt(self)
action_view_refund(self)
copy(self, default=None)
create(self, vals)
create_replace(self, scheduled_date, warehouse, product, qty, uom)
create_return(self, scheduled_date, qty=None, uom=None)
extract_quantity(self, qty, uom)
message_get_suggested_recipients(self)
message_new(self, msg_dict, custom_values=None)
message_post(self, **kwargs)
unlink(self)
update_received_state(self)
update_received_state_on_reception(self)
update_replaced_state(self)
update_returned_state(self)
product_id
Many2one → product.product
comodel_name='product.product'
string='Replace Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
string='Unit of measure'
product_uom_qty
Float
digits=dp.get_precision('Product Unit of Measure')
string='Product qty'
rma_count
Integer
scheduled_date
Datetime
default=fields.Datetime.now()
required=True
type
Selection
required=True
selection=[('replace', 'Replace'), ('return', 'Return to customer')]
string='Type'
warehouse_id
Many2one → stock.warehouse
comodel_name='stock.warehouse'
required=True
string='Warehouse'
action_deliver(self)
default_get(self, fields_list)
active
Boolean
default=True
name
Char
required=True
translate=True
No public methods.
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
required=True
string='Unit of measure'
product_uom_qty
Float
digits=dp.get_precision('Product Unit of Measure')
help='Quantity to extract to a new RMA.'
required=True
string='Quantity to extract'
rma_id
Many2one → rma
comodel_name='rma'
string='RMA'
action_split(self)
default_get(self, fields_list)
fields_get(self, allfields=None, attributes=None)
active
Boolean
default=True
help='The active field allows you to hide the category without removing it.'
color
Integer
string='Color Index'
is_public
Boolean
help='The tag is visible in the portal view'
string='Public Tag'
name
Char
copy=False
required=True
string='Tag Name'
translate=True
rma_ids
Many2many → rma
comodel_name='rma'
No public methods.
active
Boolean
default=True
help='If the active field is set to false, it will allow you to hide the RMA Team without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
member_ids
One2many → res.users
comodel_name='res.users'
inverse_name='rma_team_id'
string='Team Members'
name
Char
required=True
translate=True
sequence
Integer
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=[('share', '=', False)]
string='Team Leader'
copy(self, default=None)
get_alias_model_name(self, vals)
get_alias_values(self)
rma_id
Many2one → rma
comodel_name='rma'
copy=False
string='RMA return'
rma_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='move_id'
string='RMAs'
rma_receiver_ids
One2many → rma
comodel_name='rma'
copy=False
inverse_name='reception_move_id'
string='RMA receivers'
unlink(self)
rma_count
Integer
compute='_compute_rma_count'
string='RMA count'
action_view_rma(self)
copy(self, default=None)
create_rma
Boolean
string='Create RMAs'
picking_type_code
Selection
readonly=True
related='picking_id.picking_type_id.code'
selection=[('incoming', 'Vendors'), ('outgoing', 'Customers'), ('internal', 'Internal')]
store=True
create_returns(self)
No new fields.
Public methods (0)No public methods.
rma
Boolean
default=True
help='RMA related products can be stored in this warehouse.'
args: 'RMA'
rma_in_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA In Type'
rma_loc_id
Many2one → stock.location
comodel_name='stock.location'
string='RMA Location'
rma_out_type_id
Many2one → stock.picking.type
comodel_name='stock.picking.type'
string='RMA Out Type'
create(self, vals_list)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/rma |
| GIT | |
| GIT | https://github.com/OCA/rma.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/rma/tree/8.0/rma |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Generic Modules/CRM & SRM |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Vauxoo |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Vauxoo |
| COMMITTERS | |
| COMMITTERS | oca-travis, OCA-git-bot, Nhomar Hernández [Vauxoo] |
| WEBSITE | |
| WEBSITE | http://www.vauxoo.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:26 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/crm: - crm_claim_type - crm_claim_code OCA/rma: - crm_rma_location - crm_rma_prodlot_invoice - crm_rma_prodlot_supplier - crm_rma_lot_mass_return - crm_claim_rma - crm_claim_rma_code - product_warranty - crm_rma_stock_location - crm_claim_product_supplier - crm_rma_claim_make_claim - crm_rma_advance_warranty OCA/stock-logistics-workflow: - product_unique_serial - stock_no_negative odoo/odoo: - stock - product - base - decimal_precision - base_setup - web_kanban - web - report - procurement - board - web_kanban_gauge - web_kanban_sparkline - crm_claim - crm - base_action_rule - resource - sales_team - email_template - calendar - web_calendar - fetchmail - sale - account_voucher - account - analytic - edi - sale_stock - stock_account - purchase |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
No views found for this module.
No models found for this module.