RMA Claim (Product Return Management)

crm_claim_rma
REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/10.0/crm_claim_rma
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYGeneric Modules/CRM & SRM
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it, Techspawn Solutions
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it, Techspawn Solutions
COMMITTERS
COMMITTERSMaxime Chambreuil, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA-git-bot, Pierrick Brun
WEBSITE
WEBSITEhttps://github.com/OCA/rma
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/crm:
    - crm_claim_type
    - crm_claim
    - crm_claim_code
OCA/rma:
    - crm_claim_rma_code
    - crm_rma_location
    - product_warranty
odoo/odoo:
    - purchase
    - stock_account
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
    - procurement
    - barcodes
    - web_planner
    - account
    - analytic
    - sale
    - sales_team
    - crm
    - base_action_rule
    - resource
    - calendar
    - web_calendar
    - fetchmail
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
crm_case_claims_tree_view CRM - Claims Tree crm.claim field Inherits crm_claim.crm_case_claims_tree_view
crm_claim_line_form_view CRM - Claim product return line Form claim.line form New
crm_claim_line_tree_view CRM - Claims Tree claim.line tree New
crm_claim_rma_form CRM Claim RMA crm.claim xpath Inherits crm_claim.crm_case_claims_form_view
crm_claim_rma_form_view CRM - Claim product return Form crm.claim xpath Inherits crm_claim.crm_case_claims_form_view
invoice_form crm_claim_rma.invoice_form account.invoice data Inherits account.invoice_form
picking_in_form crm_claim_rma.picking_in_form stock.picking xpath Inherits stock.view_picking_form
search_crm_claim_rma_number CRM - Claims Search crm.claim xpath Inherits crm_claim.view_crm_case_claims_filter
stock_move_mail_thread stock_move_mail_thread stock.move xpath Inherits stock.view_move_form
tree_crm_claim_rma_number CRM - Claims Tree crm.claim xpath Inherits crm_claim.crm_case_claims_tree_view
view_claim_picking claim_picking claim_make_picking.wizard form New
view_crm_case_claims_filter CRM - Claims Search crm.claim xpath Inherits crm_claim.view_crm_case_claims_filter
view_crm_claim_lines_filter CRM - Claims Search claim.line search New
view_partner_contact_tree res.partner.contact.tree res.partner tree New
view_picking_internal_search_claim_id stock.picking.internal.search stock.picking xpath Inherits stock.view_picking_internal_search
Models touched (10)

New fields (1)
  • claim_id Many2one → crm.claim
    string='Claim' args: 'crm.claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • description Char
    default=_default_description
Public methods (1)
  • compute_refund(self, mode='refund')
    @api.multi

New fields (29)
  • applicable_guarantee Selection
    args: [('us', 'Company'), ('supplier', 'Supplier'), ('brand', 'Brand manufacturer')], 'Warranty type'
  • claim_diagnosis Selection
    help='To describe the line product diagnosis' args: [('damaged', 'Product Damaged'), ('repaired', 'Product Repaired'), ('good', 'Product in good condition'), ('hidden', 'Product with hidden physical damage')]
  • claim_id Many2one → crm.claim
    help='To link to the case.claim object' ondelete='cascade' string='Related claim' args: 'crm.claim'
  • claim_origin Selection
    help='To describe the line product problem' required=False args: SUBJECT_LIST, 'Claim Subject'
  • claim_type Many2one
    help='Claim classification' related='claim_id.claim_type' store=True string='Claim Line Type'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False string='Company' args: 'res.company'
  • date Date
    default=fields.date.today() index=True args: 'Claim Line Date'
  • display_name Char
    compute='_compute_display_name' args: 'Name'
  • guarantee_limit Date
    help='The warranty limit is computed as: invoice date + warranty defined on selected product.' readonly=True args: 'Warranty limit'
  • invoice_date Datetime
    help='Date of Claim Invoice' related='invoice_line_id.invoice_id.create_date'
  • invoice_line_id Many2one → account.invoice.line
    help='The invoice line related to the returned product' string='Invoice Line' args: 'account.invoice.line'
  • last_state_change Date
    help='To set thelast state / substate change' string='Last change'
  • location_dest_id Many2one → stock.location
    help='The return stock location of the returned product' string='Return Stock Location' args: 'stock.location'
  • move_in_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking in' args: 'stock.move'
  • move_out_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking out' args: 'stock.move'
  • name Char
    default='none' help='More precise description of the problem' required=False args: 'Description'
  • number Char
    default='/' help='Claim Line Identification Number' readonly=True
  • priority Selection
    default='0_not_define' help='Priority attention of claim line' readonly=False store=True args: [('0_not_define', 'Not Define'), ('1_normal', 'Normal'), ('2_high', 'High'), ('3_very_high', 'Very High')], 'Priority'
  • prodlot_id Many2one → stock.production.lot
    help='The serial/lot of the returned product' string='Serial/Lot number' args: 'stock.production.lot'
  • product_id Many2one → product.product
    help='Returned product' string='Product' args: 'product.product'
  • product_returned_quantity Float
    digits=(12, 2) help='Quantity of product returned' args: 'Quantity'
  • refund_line_id Many2one → account.invoice.line
    help='The refund line related to the returned product' string='Refund Line' args: 'account.invoice.line'
  • return_value Float
    compute='_compute_line_total_amount' help='Quantity returned * Unit sold price' string='Total return'
  • state Selection
    default='draft' string='State' args: [('draft', 'Draft'), ('refused', 'Refused'), ('confirmed', 'Confirmed, waiting for product'), ('in_to_control', 'Received, to control'), ('in_to_treate', 'Controlled, to treate'), ('treated', 'Treated')]
  • substate_id Many2one → substate.substate
    help='Select a sub state to precise the standard state. Example 1: state = refused; substate could be warranty over, not in warranty, no problem,... . Example 2: state = to treate; substate could be to refund, to exchange, to repair,...' string='Sub state' args: 'substate.substate'
  • unit_sale_price Float
    digits=(12, 2) help="Unit sale price of the product. Auto filled if retrun done by invoice selection. Be careful and check the automatic value as don't take into account previous refunds, invoice discount, can be for 0 if product for free,..."
  • warning Selection
    help='If warranty has expired' readonly=True args: WARRANT_COMMENT, 'Warranty'
  • warranty_return_partner Many2one → res.partner
    help='Where the customer has to send back the product(s)' string='Warranty Address' args: 'res.partner'
  • warranty_type Selection
    help='Who is in charge of the warranty return treatment towards the end customer. Company will use the current company delivery or default address and so on for supplier and brand manufacturer. Does not necessarily mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty' args: get_warranty_return_partner
Public methods (9)
  • auto_set_warranty(self)
    @api.model
    Set warranty automatically if the user has not himself pressed on 'Calculate warranty state' button, it sets warranty for him
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
    Return write the identify number once the claim line is create.
  • get_destination_location(self, product_id, warehouse_id)
    @api.returns('stock.location')
    Compute and return the destination location to take for a return. Always take 'Supplier' one when return type different from company.
  • get_warranty_return_partner(self)
    @api.model
  • set_warranty(self)
    @api.multi
    Calculate warranty limit and address
  • set_warranty_limit(self)
  • set_warranty_return_address(self)
  • warranty_limit(start, warranty_duration)
    @staticmethod
    Take a duration in float, return the duration in relativedelta ``relative_delta(months=...)`` only accepts integers. We have to extract the decimal part, and then, extend the delta with days.

New fields (4)
  • claim_line_dest_location_id Many2one → stock.location
    default=_default_claim_line_dest_location_id help='Location where the system will stock the returned products.' required=True string='Dest. Location' args: 'stock.location'
  • claim_line_ids Many2many → claim.line
    default=_default_claim_line_ids string='Claim lines' args: 'claim.line', 'claim_line_picking', 'claim_picking_id', 'claim_line_id'
  • claim_line_source_location_id Many2one → stock.location
    default=_default_claim_line_source_location_id help='Location where the returned products are from.' string='Source Location' args: 'stock.location'
  • delivery_warehouse_id Many2one → stock.warehouse
    default=<expr> help='Warehouse where to take the replacement products for customers.' string='Source Warehouse' args: 'stock.warehouse'
Public methods (2)
  • action_cancel(self)
    @api.multi
  • action_create_picking(self)
    @api.multi

New fields (15)
  • claim_line_ids One2many → claim.line
    string='Return lines' args: 'claim.line', 'claim_id'
  • claim_type Many2one
    default=_get_claim_type_default help='Claim classification' required=True
  • company_id Many2one
    change_default=True default=<expr>
  • delivery_address_id Many2one → res.partner
    help='This address will be used to deliver repaired or replacement products.' string='Partner delivery address' args: 'res.partner'
  • invoice_id Many2one → account.invoice
    help='Related original Cusotmer invoice' string='Invoice' args: 'account.invoice'
  • invoice_ids One2many → account.invoice
    copy=False args: 'account.invoice', 'claim_id', 'Refunds'
  • pick Boolean
    args: 'Pick the product in the store'
  • picking_ids One2many → stock.picking
    compute=_get_picking_ids copy=False string='RMA' args: 'stock.picking'
  • planned_cost Float
    args: 'Expected cost'
  • planned_revenue Float
    args: 'Expected revenue'
  • real_cost Float
  • real_revenue Float
  • rma_number Char
    help='RMA Number provided by supplier' size=128
  • sequence Integer
    default=<expr>
  • warehouse_id Many2one → stock.warehouse
    default=_get_default_warehouse required=True string='Warehouse' args: 'stock.warehouse'
Public methods (5)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • message_get_reply_to(self, res_ids, default=None)
    @api.model
    Override to get the reply_to of the parent project.
  • message_get_suggested_recipients(self)
    @api.multi
  • name_get(self)
    @api.multi

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model
    In case of a wrong picking out, We need to create a new stock_move in a picking already open. To avoid having to confirm the stock_move, we override the create and confirm it at the creation only for this case.

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True args: 'Sub state'
  • substate_descr Text
    help='To give more information about the sub state' args: 'Description'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/9.0/crm_claim_rma
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYGeneric Modules/CRM & SRM
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it
COMMITTERS
COMMITTERSYannick Vaucher, Matthieu Dietrich, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, OCA-git-bot, Cyril Gaudin
WEBSITE
WEBSITEhttps://odoo-community.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:23
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/crm:
    - crm_claim_type
    - crm_claim_code
OCA/rma:
    - crm_claim_rma_code
    - crm_rma_location
    - product_warranty
odoo/odoo:
    - purchase
    - stock_account
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - report
    - procurement
    - barcodes
    - web_planner
    - account
    - analytic
    - web_tip
    - sale
    - sales_team
    - crm_claim
    - crm
    - base_action_rule
    - resource
    - calendar
    - web_calendar
    - fetchmail
    - utm
    - marketing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
crm_case_claims_tree_view CRM - Claims Tree crm.claim field Inherits crm_claim.crm_case_claims_tree_view
crm_claim_line_form_view CRM - Claim product return line Form claim.line form New
crm_claim_line_tree_view CRM - Claims Tree claim.line tree New
crm_claim_line_view_form_embedded Claim line form view to be used inside claim tree claim.line field Inherits crm_claim_line_form_view
crm_claim_rma_form CRM Claim RMA crm.claim data Inherits crm_claim.crm_case_claims_form_view
crm_claim_rma_form_view CRM - Claim product return Form crm.claim xpath Inherits crm_claim.crm_case_claims_form_view
invoice_form crm_claim_rma.invoice_form account.invoice data Inherits account.invoice_form
picking_in_form crm_claim_rma.picking_in_form stock.picking xpath Inherits stock.view_picking_form
search_crm_claim_rma_number CRM - Claims Search crm.claim xpath Inherits crm_claim.view_crm_case_claims_filter
stock_move_mail_thread stock_move_mail_thread stock.move xpath Inherits stock.view_move_form
tree_crm_claim_rma_number CRM - Claims Tree crm.claim xpath Inherits crm_claim.crm_case_claims_tree_view
view_claim_picking claim_picking claim_make_picking.wizard form New
view_crm_case_claims_filter CRM - Claims Search crm.claim xpath Inherits crm_claim.view_crm_case_claims_filter
view_crm_claim_lines_filter CRM - Claims Search claim.line search New
view_partner_contact_tree res.partner.contact.tree res.partner tree New
view_picking_internal_search_claim_id stock.picking.internal.search stock.picking xpath Inherits stock.view_picking_internal_search
Models touched (10)

New fields (1)
  • claim_id Many2one → crm.claim
    string='Claim' args: 'crm.claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • description Char
    default=_default_description
Public methods (1)
  • compute_refund(self, mode='refund')
    @api.multi

New fields (29)
  • applicable_guarantee Selection
    args: [('us', 'Company'), ('supplier', 'Supplier'), ('brand', 'Brand manufacturer')], 'Warranty type'
  • claim_diagnosis Selection
    help='To describe the line product diagnosis' args: [('damaged', 'Product Damaged'), ('repaired', 'Product Repaired'), ('good', 'Product in good condition'), ('hidden', 'Product with hidden physical damage')]
  • claim_id Many2one → crm.claim
    help='To link to the case.claim object' ondelete='cascade' string='Related claim' args: 'crm.claim'
  • claim_origin Selection
    help='To describe the line product problem' required=True args: SUBJECT_LIST, 'Claim Subject'
  • claim_type Many2one
    help='Claim classification' related='claim_id.claim_type' store=True string='Claim Line Type'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False string='Company' args: 'res.company'
  • date Date
    default=fields.date.today() select=True args: 'Claim Line Date'
  • display_name Char
    compute='_get_display_name' args: 'Name'
  • guarantee_limit Date
    help='The warranty limit is computed as: invoice date + warranty defined on selected product.' readonly=True args: 'Warranty limit'
  • invoice_date Datetime
    help='Date of Claim Invoice' related='invoice_line_id.invoice_id.create_date'
  • invoice_line_id Many2one → account.invoice.line
    help='The invoice line related to the returned product' string='Invoice Line' args: 'account.invoice.line'
  • last_state_change Date
    help='To set thelast state / substate change' string='Last change'
  • location_dest_id Many2one → stock.location
    help='The return stock location of the returned product' string='Return Stock Location' args: 'stock.location'
  • move_in_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking in' args: 'stock.move'
  • move_out_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking out' args: 'stock.move'
  • name Char
    default='none' help='More precise description of the problem' required=True args: 'Description'
  • number Char
    default='/' help='Claim Line Identification Number' readonly=True
  • priority Selection
    compute='_compute_priority' default='0_not_define' help='Priority attention of claim line' readonly=False store=True args: [('0_not_define', 'Not Define'), ('1_normal', 'Normal'), ('2_high', 'High'), ('3_very_high', 'Very High')], 'Priority'
  • prodlot_id Many2one → stock.production.lot
    help='The serial/lot of the returned product' string='Serial/Lot number' args: 'stock.production.lot'
  • product_id Many2one → product.product
    help='Returned product' string='Product' args: 'product.product'
  • product_returned_quantity Float
    digits=(12, 2) help='Quantity of product returned' args: 'Quantity'
  • refund_line_id Many2one → account.invoice.line
    help='The refund line related to the returned product' string='Refund Line' args: 'account.invoice.line'
  • return_value Float
    compute='_compute_line_total_amount' help='Quantity returned * Unit sold price' string='Total return'
  • state Selection
    default='draft' string='State' args: [('draft', 'Draft'), ('refused', 'Refused'), ('confirmed', 'Confirmed, waiting for product'), ('in_to_control', 'Received, to control'), ('in_to_treate', 'Controlled, to treate'), ('treated', 'Treated')]
  • substate_id Many2one → substate.substate
    help='Select a sub state to precise the standard state. Example 1: state = refused; substate could be warranty over, not in warranty, no problem,... . Example 2: state = to treate; substate could be to refund, to exchange, to repair,...' string='Sub state' args: 'substate.substate'
  • unit_sale_price Float
    digits=(12, 2) help="Unit sale price of the product. Auto filled if retrun done by invoice selection. Be careful and check the automatic value as don't take into account previous refunds, invoice discount, can be for 0 if product for free,..."
  • warning Selection
    help='If warranty has expired' readonly=True args: WARRANT_COMMENT, 'Warranty'
  • warranty_return_partner Many2one → res.partner
    help='Where the customer has to send back the product(s)' string='Warranty Address' args: 'res.partner'
  • warranty_type Selection
    help='Who is in charge of the warranty return treatment towards the end customer. Company will use the current company delivery or default address and so on for supplier and brand manufacturer. Does not necessarily mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty' readonly=True args: get_warranty_return_partner
Public methods (9)
  • auto_set_warranty(self)
    @api.model
    Set warranty automatically if the user has not himself pressed on 'Calculate warranty state' button, it sets warranty for him
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
    Return write the identify number once the claim line is create.
  • get_destination_location(self, product_id, warehouse_id)
    @api.returns('stock.location')
    Compute and return the destination location to take for a return. Always take 'Supplier' one when return type different from company.
  • get_warranty_return_partner(self)
    @api.model
  • set_warranty(self)
    @api.multi
    Calculate warranty limit and address
  • set_warranty_limit(self)
  • set_warranty_return_address(self)
  • warranty_limit(start, warranty_duration)
    @staticmethod
    Take a duration in float, return the duration in relativedelta ``relative_delta(months=...)`` only accepts integers. We have to extract the decimal part, and then, extend the delta with days.

New fields (4)
  • claim_line_dest_location_id Many2one → stock.location
    default=_default_claim_line_dest_location_id help='Location where the system will stock the returned products.' required=True string='Dest. Location' args: 'stock.location'
  • claim_line_ids Many2many → claim.line
    default=_default_claim_line_ids string='Claim lines' args: 'claim.line', 'claim_line_picking', 'claim_picking_id', 'claim_line_id'
  • claim_line_source_location_id Many2one → stock.location
    default=_default_claim_line_source_location_id help='Location where the returned products are from.' string='Source Location' args: 'stock.location'
  • delivery_warehouse_id Many2one → stock.warehouse
    default=<expr> help='Warehouse where to take the replacement products for customers.' string='Source Warehouse' args: 'stock.warehouse'
Public methods (2)
  • action_cancel(self)
    @api.multi
  • action_create_picking(self)
    @api.multi

New fields (15)
  • claim_line_ids One2many → claim.line
    string='Return lines' args: 'claim.line', 'claim_id'
  • claim_type Many2one
    default=_get_claim_type_default help='Claim classification' required=True
  • company_id Many2one
    change_default=True default=<expr>
  • delivery_address_id Many2one → res.partner
    help='This address will be used to deliver repaired or replacement products.' string='Partner delivery address' args: 'res.partner'
  • invoice_id Many2one → account.invoice
    help='Related original Cusotmer invoice' string='Invoice' args: 'account.invoice'
  • invoice_ids One2many → account.invoice
    copy=False args: 'account.invoice', 'claim_id', 'Refunds'
  • pick Boolean
    args: 'Pick the product in the store'
  • picking_ids One2many → stock.picking
    compute=_get_picking_ids copy=False string='RMA' args: 'stock.picking'
  • planned_cost Float
    args: 'Expected cost'
  • planned_revenue Float
    args: 'Expected revenue'
  • real_cost Float
  • real_revenue Float
  • rma_number Char
    help='RMA Number provided by supplier' size=128
  • sequence Integer
    default=<expr>
  • warehouse_id Many2one → stock.warehouse
    default=_get_default_warehouse required=True string='Warehouse' args: 'stock.warehouse'
Public methods (5)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • message_get_reply_to(self, res_ids, default=None)
    @api.model
    Override to get the reply_to of the parent project.
  • message_get_suggested_recipients(self)
    @api.multi
  • name_get(self)
    @api.multi

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model
    In case of a wrong picking out, We need to create a new stock_move in a picking already open. To avoid having to confirm the stock_move, we override the create and confirm it at the creation only for this case.

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True args: 'Sub state'
  • substate_descr Text
    help='To give more information about the sub state' args: 'Description'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/8.0/crm_claim_rma
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYGeneric Modules/CRM & SRM
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp, MONK Software, Vauxoo, Eezee-it
COMMITTERS
COMMITTERSStéphane Bidoul, Yannick Vaucher, Alexandre Fayolle, Holger Brunn, GitHub, Stéphane Bidoul (ACSONE), Alex Comba, OCA Transbot, Hugo Santos, Leonardo Donelli, Damien Crier, StefanRijnhart, oca-travis, Weblate, OCA-git-bot, Yanina Aular (Vauxoo), jesusVMayor, Osval Reyes, Kalantojus Karolis, Aristobulo Meneses
WEBSITE
WEBSITEhttps://odoo-community.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/crm:
    - crm_claim_type
    - crm_claim_code
OCA/rma:
    - crm_claim_rma_code
    - crm_rma_location
    - product_warranty
odoo/odoo:
    - purchase
    - stock_account
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - report
    - procurement
    - board
    - web_kanban_gauge
    - web_kanban_sparkline
    - account
    - analytic
    - edi
    - email_template
    - sale
    - sales_team
    - account_voucher
    - crm_claim
    - crm
    - base_action_rule
    - resource
    - calendar
    - web_calendar
    - fetchmail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
crm_case_claims_form_view CRM - Claims Form crm.claim xpath Inherits crm_claim_type.crm_case_claims_form_view
crm_case_claims_tree_view CRM - Claims Tree crm.claim field Inherits crm_claim.crm_case_claims_tree_view
crm_claim_line_form_view CRM - Claim product return line Form claim.line form New
crm_claim_line_tree_view CRM - Claims Tree claim.line tree New
crm_claim_line_view_form_embedded Claim line form view to be used inside claim tree claim.line field Inherits crm_claim_line_form_view
crm_claim_rma_form CRM Claim RMA crm.claim data Inherits crm_claim.crm_case_claims_form_view
crm_claim_rma_form_view CRM - Claim product return Form crm.claim xpath Inherits crm_claim.crm_case_claims_form_view
invoice_form crm_claim_rma.invoice_form account.invoice data Inherits account.invoice_form
picking_in_form crm_claim_rma.picking_in_form stock.picking xpath Inherits stock.view_picking_form
search_crm_claim_rma_number CRM - Claims Search crm.claim xpath Inherits crm_claim.view_crm_case_claims_filter
stock_move_mail_thread stock_move_mail_thread stock.move xpath Inherits stock.view_move_form
tree_crm_claim_rma_number CRM - Claims Tree crm.claim xpath Inherits crm_claim.crm_case_claims_tree_view
view_claim_picking claim_picking claim_make_picking.wizard form New
view_crm_case_claims_filter CRM - Claims Search crm.claim filter Inherits crm_claim.view_crm_case_claims_filter
view_crm_claim_lines_filter CRM - Claims Search claim.line search New
view_partner_contact_tree res.partner.contact.tree res.partner tree New
view_picking_internal_search_claim_id stock.picking.internal.search stock.picking xpath Inherits stock.view_picking_internal_search
Models touched (10)

New fields (1)
  • claim_id Many2one → crm.claim
    string='Claim' args: 'crm.claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • description Char
    default=_default_description
Public methods (1)
  • compute_refund(self, mode='refund')
    @api.multi

New fields (29)
  • applicable_guarantee Selection
    args: [('us', 'Company'), ('supplier', 'Supplier'), ('brand', 'Brand manufacturer')], 'Warranty type'
  • claim_diagnosis Selection
    help='To describe the line product diagnosis' args: [('damaged', 'Product Damaged'), ('repaired', 'Product Repaired'), ('good', 'Product in good condition'), ('hidden', 'Product with hidden physical damage')]
  • claim_id Many2one → crm.claim
    help='To link to the case.claim object' ondelete='cascade' string='Related claim' args: 'crm.claim'
  • claim_origin Selection
    help='To describe the line product problem' required=True args: SUBJECT_LIST, 'Claim Subject'
  • claim_type Many2one
    help='Claim classification' related='claim_id.claim_type' store=True string='Claim Line Type'
  • company_id Many2one → res.company
    change_default=True default=_get_company_default readonly=False string='Company' args: 'res.company'
  • date Date
    default=fields.date.today() select=True args: 'Claim Line Date'
  • display_name Char
    compute='_compute_get_display_name' args: 'Name'
  • guarantee_limit Date
    help='The warranty limit is computed as: invoice date + warranty defined on selected product.' readonly=True args: 'Warranty limit'
  • invoice_date Datetime
    help='Date of Claim Invoice' related='invoice_line_id.invoice_id.create_date'
  • invoice_line_id Many2one → account.invoice.line
    help='The invoice line related to the returned product' string='Invoice Line' args: 'account.invoice.line'
  • last_state_change Date
    help='To set thelast state / substate change' string='Last change'
  • location_dest_id Many2one → stock.location
    help='The return stock location of the returned product' string='Return Stock Location' args: 'stock.location'
  • move_in_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking in' args: 'stock.move'
  • move_out_id Many2one → stock.move
    help='The move line related to the returned product' string='Move Line from picking out' args: 'stock.move'
  • name Char
    default='none' help='More precise description of the problem' required=True args: 'Description'
  • number Char
    default='/' help='Claim Line Identification Number' readonly=True
  • priority Selection
    compute='_compute_set_priority' default='0_not_define' help='Priority attention of claim line' readonly=False store=True args: [('0_not_define', 'Not Define'), ('1_normal', 'Normal'), ('2_high', 'High'), ('3_very_high', 'Very High')], 'Priority'
  • prodlot_id Many2one → stock.production.lot
    help='The serial/lot of the returned product' string='Serial/Lot number' args: 'stock.production.lot'
  • product_id Many2one → product.product
    help='Returned product' string='Product' args: 'product.product'
  • product_returned_quantity Float
    digits=(12, 2) help='Quantity of product returned' args: 'Quantity'
  • refund_line_id Many2one → account.invoice.line
    help='The refund line related to the returned product' string='Refund Line' args: 'account.invoice.line'
  • return_value Float
    compute='_compute_line_total_amount' help='Quantity returned * Unit sold price' string='Total return'
  • state Selection
    default='draft' string='State' args: [('draft', 'Draft'), ('refused', 'Refused'), ('confirmed', 'Confirmed, waiting for product'), ('in_to_control', 'Received, to control'), ('in_to_treate', 'Controlled, to treate'), ('treated', 'Treated')]
  • substate_id Many2one → substate.substate
    help='Select a sub state to precise the standard state. Example 1: state = refused; substate could be warranty over, not in warranty, no problem,... . Example 2: state = to treate; substate could be to refund, to exchange, to repair,...' string='Sub state' args: 'substate.substate'
  • unit_sale_price Float
    digits=(12, 2) help="Unit sale price of the product. Auto filled if retrun done by invoice selection. Be careful and check the automatic value as don't take into account previous refunds, invoice discount, can be for 0 if product for free,..."
  • warning Selection
    help='If warranty has expired' readonly=True args: WARRANT_COMMENT, 'Warranty'
  • warranty_return_partner Many2one → res.partner
    help='Where the customer has to send back the product(s)' string='Warranty Address' args: 'res.partner'
  • warranty_type Selection
    help='Who is in charge of the warranty return treatment towards the end customer. Company will use the current company delivery or default address and so on for supplier and brand manufacturer. Does not necessarily mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty' readonly=True args: get_warranty_return_partner
Public methods (9)
  • auto_set_warranty(self)
    @api.model
    Set warranty automatically if the user has not himself pressed on 'Calculate warranty state' button, it sets warranty for him
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
    @return write the identify number once the claim line is create.
  • get_destination_location(self, product_id, warehouse_id)
    @api.returns('stock.location')
    Compute and return the destination location to take for a return. Always take 'Supplier' one when return type different from company.
  • get_warranty_return_partner(self)
    @api.model
  • set_warranty(self)
    @api.multi
    Calculate warranty limit and address
  • set_warranty_limit(self)
  • set_warranty_return_address(self)
  • warranty_limit(start, warranty_duration)
    @staticmethod
    Take a duration in float, return the duration in relativedelta ``relative_delta(months=...)`` only accepts integers. We have to extract the decimal part, and then, extend the delta with days.

New fields (4)
  • claim_line_dest_location_id Many2one → stock.location
    default=_default_claim_line_dest_location_id help='Location where the system will stock the returned products.' required=True string='Dest. Location' args: 'stock.location'
  • claim_line_ids Many2many → claim.line
    default=_default_claim_line_ids string='Claim lines' args: 'claim.line', 'claim_line_picking', 'claim_picking_id', 'claim_line_id'
  • claim_line_source_location_id Many2one → stock.location
    default=_default_claim_line_source_location_id help='Location where the returned products are from.' string='Source Location' args: 'stock.location'
  • delivery_warehouse_id Many2one → stock.warehouse
    default=<expr> help='Warehouse where to take the replacement products for customers.' string='Source Warehouse' args: 'stock.warehouse'
Public methods (2)
  • action_cancel(self)
    @api.multi
  • action_create_picking(self)
    @api.multi

New fields (15)
  • claim_line_ids One2many → claim.line
    string='Return lines' args: 'claim.line', 'claim_id'
  • claim_type Many2one
    default=_get_claim_type_default help='Claim classification' required=True
  • company_id Many2one
    change_default=True default=_get_company_default
  • delivery_address_id Many2one → res.partner
    help='This address will be used to deliver repaired or replacement products.' string='Partner delivery address' args: 'res.partner'
  • invoice_id Many2one → account.invoice
    help='Related original Cusotmer invoice' string='Invoice' args: 'account.invoice'
  • invoice_ids One2many → account.invoice
    copy=False args: 'account.invoice', 'claim_id', 'Refunds'
  • pick Boolean
    args: 'Pick the product in the store'
  • picking_ids One2many → stock.picking
    compute=_get_picking_ids copy=False string='RMA' args: 'stock.picking'
  • planned_cost Float
    args: 'Expected cost'
  • planned_revenue Float
    args: 'Expected revenue'
  • real_cost Float
  • real_revenue Float
  • rma_number Char
    help='RMA Number provided by supplier' size=128
  • sequence Integer
    default=<expr>
  • warehouse_id Many2one → stock.warehouse
    default=_get_default_warehouse required=True string='Warehouse' args: 'stock.warehouse'
Public methods (5)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • message_get_reply_to(self)
    @api.model
    Override to get the reply_to of the parent project.
  • message_get_suggested_recipients(self)
    @api.multi
  • name_get(self)
    @api.multi

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals)
    @api.model
    In case of a wrong picking out, We need to create a new stock_move in a picking already open. To avoid having to confirm the stock_move, we override the create and confirm it at the creation only for this case.

New fields (1)
  • claim_id Many2one → crm.claim
    args: 'crm.claim', 'Claim'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True args: 'Sub state'
  • substate_descr Text
    help='To give more information about the sub state' args: 'Description'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/7.0/crm_claim_rma
VERSION
VERSION 1.1
CATEGORY
CATEGORYGeneric Modules/CRM & SRM
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Camptocamp
COMMITTERS
COMMITTERSBenoit Guillot, Yannick Vaucher, Romain Deheele, Guewen Baconnier, Alexandre Fayolle, Matthieu Dietrich, Joël Grand-Guillaume, Joao Alfredo Gama Batista, Joel Grand-Guillaume, Leonardo Pistone, Maxime Chambreuil, Pedro M. Baeza, unknown, Florian da Costa, Launchpad Translations on behalf of openerprma
WEBSITE
WEBSITEhttp://www.akretion.com, http://www.camptocamp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - product_warranty
odoo/odoo:
    - sale
    - account_voucher
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
    - stock
    - crm_claim
    - crm
    - base_action_rule
    - base_status
    - base_calendar
    - resource
    - fetchmail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Management of Return Merchandise Authorization (RMA)
====================================================

This module aims to improve the Claims by adding a way to manage the
product returns. It allows you to create and manage picking from a
claim. It also introduces a new object: the claim lines to better
handle that problematic. One Claim can have several lines that
concern the return of differents products. It's for every of them
that you'll be able to check the warranty (still running or not).

It mainly contains the following features:

* product returns (one by one, mass return by invoice)
* warranty control & return address (based on invoice date and product form)
* product picking in / out
* product refund
* access to related customer data (orders, invoices, refunds, picking
  in/out) from a claim
* use the OpenERP chatter within team like in opportunity (reply to refer to
  the team, not a person)

Using this module makes the logistic flow of return this way:

* Returning product goes into Stock or Supplier location with a incoming
  shipment (depending on the settings of the supplier info in the
  product form)
* You can make a delivery from the RMA to send a new product to the Customer

.. warning:: Currently, the warranty duration used is the one configured on the
             products today, not the one which was configured when the product
             has been sold.

Contributors:
-------------

 * Emmanuel Samyn <esamyn@gmail.com>
 * Sébastien Beau <sebastien.beau@akretion.com.br>
 * Benoît Guillot <benoit.guillot@akretion.com.br>
 * Joel Grand-Guillaume <joel.grandguillaume@camptocamp.com>
 * Guewen Baconnier <guewen.baconnier@camptocamp.com>
 * Yannick Vaucher <yannick.vaucher@camptocamp.com>

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
crm_case_claims_form_view_replace CRM - Claims Form crm.claim field Inherits crm_claim.crm_case_claims_form_view
crm_case_claims_tree_view CRM - Claims Tree crm.claim field Inherits crm_claim.crm_case_claims_tree_view
crm_claim_line_form_view CRM - Claim product return line Form claim.line form New
crm_claim_line_tree_view CRM - Claims Tree claim.line tree New
crm_claim_rma_form_view CRM - Claim product return Form crm.claim page Inherits crm_claim.crm_case_claims_form_view
crm_claim_rma_form_view2 CRM - Claim product return Form crm.claim field Inherits crm_claim.crm_case_claims_form_view
invoice_form crm_claim_rma.invoice_form account.invoice data Inherits account.invoice_form
picking_in_form crm_claim_rma.picking_in_form stock.picking.in xpath Inherits stock.view_picking_in_form
picking_out_form crm_claim_rma.picking_out_form stock.picking.out xpath Inherits stock.view_picking_out_form
view_claim_picking claim_picking claim_make_picking.wizard form New
view_crm_case_claims_filter CRM - Claims Search crm.claim field Inherits crm_claim.view_crm_case_claims_filter
view_crm_claim_lines_filter CRM - Claims Search claim.line search New
view_partner_contact_tree res.partner.contact.tree res.partner tree New
view_picking_in_search crm_claim_rma.picking_in_search stock.picking.in filter Inherits stock.view_picking_in_search
view_picking_out_search crm_claim_rma.picking_out_search stock.picking.out filter Inherits stock.view_picking_out_search
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, vals, context=None)

New fields (0)

No new fields.

Public methods (1)
  • compute_refund(self, cr, uid, ids, mode='refund', context=None)

New fields (0)

No new fields.

Public methods (9)
  • auto_set_warranty(self, cr, uid, ids, context)
    Set warranty automatically if the user has not himself pressed on 'Calculate warranty state' button, it sets warranty for him
  • copy_data(self, cr, uid, id, default=None, context=None)
  • get_destination_location(self, cr, uid, product_id, warehouse_id, context=None)
    Compute and return the destination location ID to take for a return. Always take 'Supplier' one when return type different from company.
  • get_warranty_return_partner(self, cr, uid, context=None)
  • onchange_product_id(self, cr, uid, ids, product_id, invoice_line_id, claim_id, company_id, warehouse_id, claim_type, claim_date, context=None)
  • set_warranty(self, cr, uid, ids, context=None)
    Calculate warranty limit and address
  • set_warranty_limit(self, cr, uid, ids, claim_line, context=None)
  • set_warranty_return_address(self, cr, uid, ids, claim_line, context=None)
  • warranty_limit(start, warranty_duration)
    @staticmethod
    Take a duration in float, return the duration in relativedelta ``relative_delta(months=...)`` only accepts integers. We have to extract the decimal part, and then, extend the delta with days.

New fields (0)

No new fields.

Public methods (2)
  • action_cancel(self, cr, uid, ids, context=None)
  • action_create_picking(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (8)
  • copy_data(self, cr, uid, id, default=None, context=None)
  • create(self, cr, uid, vals, context=None)
  • init(self, cr)
  • message_get_reply_to(self, cr, uid, ids, context=None)
    Override to get the reply_to of the parent project.
  • message_get_suggested_recipients(self, cr, uid, ids, context=None)
  • name_get(self, cr, uid, ids, context=None)
  • onchange_invoice_id(self, cr, uid, ids, invoice_id, warehouse_id, claim_type, claim_date, company_id, lines, create_lines=False, context=None)
  • onchange_partner_address_id(self, cr, uid, ids, add, email=False, context=None)

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, vals, context=None)

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/rma
GIT
GIThttps://github.com/OCA/rma.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/rma/tree/6.1/crm_claim_rma
VERSION
VERSION 1.0
CATEGORY
CATEGORYGeneric Modules/CRM & SRM
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), esamyn
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), esamyn
COMMITTERS
COMMITTERSBenoit Guillot, Alexandre Fayolle, sebastien beau, Angel Moya, manu, davidbeal
WEBSITE
WEBSITEhttp://www.erp-236.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/rma:
    - product_warranty
odoo/odoo:
    - sale
    - stock
    - product
    - base
    - process
    - decimal_precision
    - account
    - base_setup
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
    - procurement
    - crm_claim
    - crm
    - base_action_rule
    - base_calendar
    - resource
    - fetchmail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Akretion - Emmanuel Samyn
Management of Return Merchandise Authorization (RMA) in OpenERP.
Upgrade the standard crm_claim module to add :
* product returns (one by one, mass return by lot, mass return by invoice)
* warranty control & return address (based on invoice date and product form)
* product picking in / out
* product refund
* product exchange
* access to related customer data (orders, invoices, refunds, picking in/out)

THIS MODULE REPLACES Akretion stock_rma from V6.0
    
WARNING : To use the module in V6.1 you need a refactor of the function refund
in the module account from the addons. You can find the refactor at the revisions 6933 and 6934
on this branch : https://code.launchpad.net/~akretion-team/openobject-addons/openobject-addons-61-akretion
    
    

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
crm_claim_line_form_view CRM - Claim product return line Form claim.line form New
crm_claim_line_tree_view CRM - Claims Tree claim.line tree New
crm_claim_rma.company_form crm_claim_rma.company_form res.company data Inherits base.view_company_form
crm_claim_rma.invoice_form crm_claim_rma.invoice_form account.invoice data Inherits account.invoice_form
crm_claim_rma.picking_in_form crm_claim_rma.picking_in_form stock.picking data Inherits stock.view_picking_in_form
crm_claim_rma.picking_out_form crm_claim_rma.picking_out_form stock.picking data Inherits stock.view_picking_out_form
crm_claim_rma.warehouse_form crm_claim_rma.warehouse_form stock.warehouse data Inherits stock.view_warehouse
crm_claim_rma_form_view CRM - Claim product return Form crm.claim xpath Inherits crm_claim.crm_case_claims_form_view
crm_claim_rma_form_view2 CRM - Claim product return Form crm.claim field Inherits crm_claim.crm_case_claims_form_view
crm_picking_follow_form_view CRM - Picking follow Form picking.follow form New
crm_picking_follow_tree_view CRM - Picking follow Tree picking.follow tree New
view_claim_picking claim_picking claim_make_picking.wizard form New
view_claim_picking_from_picking claim_picking claim_make_picking_from_picking.wizard form New
view_create_return_serial_form returned_lines_from_serial_wiew returned_lines_from_serial.wizard form New
view_crm_claim_lines_filter CRM - Claims Search claim.line search New
view_get_empty_serial get_empty_serial get_empty_serial.wizard form New
view_picking_in_search crm_claim_rma.picking_in_search stock.picking filter Inherits stock.view_picking_in_search
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, vals, context=None)

New fields (0)

No new fields.

Public methods (3)
  • set_warranty(self, cr, uid, ids, context=None)
  • set_warranty_limit(self, cr, uid, ids, context, claim_line)
  • set_warranty_return_address(self, cr, uid, ids, context, claim_line)

New fields (0)

No new fields.

Public methods (2)
  • action_cancel(self, cr, uid, ids, conect=None)
  • action_create_picking(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (2)
  • action_cancel(self, cr, uid, ids, conect=None)
  • action_create_picking_from_picking(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (3)
  • onchange_invoice_id(self, cr, uid, ids, invoice_id, context=None)
  • onchange_partner_address_id(self, cr, uid, ids, add, email=False)
  • onchange_partner_id(self, cr, uid, ids, part, email=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create(self, cr, uid, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.