Stock Return Request

stock_return_request
REPOSITORY
REPOSITORYOCA/stock-logistics-request
GIT
GIThttps://github.com/OCA/stock-logistics-request.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-request/tree/18.0/stock_return_request
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSCarlos Lopez, Weblate, OCA-git-bot, oca-ci, Carlos Roca, Joan Sisquella
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-request
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows to return stock from a location to either suppliers,
customers or internal locations reverting the corresponding pickings.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request list New
Models touched (6)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits='Product Unit of Measure' string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner'
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' required=True string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')]
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' required=True string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')]
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)'
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] tracking=True
  • to_refund Boolean
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Get moves and then try to reserve quantities. Fail if the quantites can't be assigned
  • action_validate(self)
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals_list)
    @api.model_create_multi
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.lot
    comodel_name='stock.lot' domain="[('product_id', '=', product_id)]" string='Lot / Serial'
  • max_quantity Float
    compute='_compute_max_quantity' digits='Product Unit of Measure' string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('is_storable', '=', True)] required=True string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (2)
  • action_lot_suggestion(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (3)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' ondelete='cascade' readonly=True required=True
  • suggested_lot_id Many2one → suggest.return.request.lot.line
    args: 'suggest.return.request.lot.line'
Public methods (1)
  • action_confirm(self)

New fields (4)
  • lot_id Many2one → stock.lot
    comodel_name='stock.lot'
  • lot_suggestion_mode Selection
    selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • name Char
  • wizard_id Many2one → suggest.return.request.lot
    comodel_name='suggest.return.request.lot' ondelete='cascade'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/15.0/stock_return_request
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, sergio-teruel, Weblate, OCA-git-bot, oca-ci, Cesar Andres Sanchez
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:37
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request tree New
Models touched (5)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits='Product Unit of Measure' readonly=True string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' readonly=True states={'draft': [('readonly', False)]} string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]}
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' readonly=True required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')] states={'draft': [('readonly', False)]}
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' readonly=True required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')] states={'draft': [('readonly', False)]}
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' default=<expr> help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)' readonly=True
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] tracking=True
  • to_refund Boolean
    readonly=True states={'draft': [('readonly', False)]}
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Wrapper for multi. Avoid recompute as it delays the pickings creation
  • action_validate(self)
    Wrapper for multi
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals)
    @api.model
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot' string='Lot / Serial'
  • max_quantity Float
    digits='Product Unit of Measure' readonly=True string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('type', '=', 'product')] required=True string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (3)
  • action_lot_suggestion(self)
  • create(self, values)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id', 'lot_id')

New fields (4)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' default=<expr> ondelete='cascade' readonly=True required=True
  • suggested_lot Selection
    help='You can return these lots' selection='_get_suggested_lots_selection' string='Suggested Lots'
  • suggested_lot_detail Selection
    help='You can return these lots' selection='_get_suggested_lots_detail_selection' string='Suggested Lots Detailed'
Public methods (1)
  • action_confirm(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/14.0/stock_return_request
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSOCA Transbot, sergio-teruel, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, sergiocorato, oca-ci, Enrique Martín, Prapassorn Sornkaew
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request tree New
Models touched (5)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits='Product Unit of Measure' readonly=True store=True string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' readonly=True states={'draft': [('readonly', False)]} string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]}
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' readonly=True required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')] states={'draft': [('readonly', False)]} string='Return Order'
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' readonly=True required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')] states={'draft': [('readonly', False)]} string='Return type'
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' default=<expr> help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)' readonly=True
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] tracking=True
  • to_refund Boolean
    readonly=True states={'draft': [('readonly', False)]} string='To refund'
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Wrapper for multi. Avoid recompute as it delays the pickings creation
  • action_validate(self)
    Wrapper for multi
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals)
    @api.model
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot' string='Lot / Serial'
  • max_quantity Float
    digits='Product Unit of Measure' readonly=True string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('type', '=', 'product')] required=True string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (3)
  • action_lot_suggestion(self)
  • create(self, values)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id', 'lot_id')

New fields (4)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' default=<expr> ondelete='cascade' readonly=True required=True
  • suggested_lot Selection
    help='You can return these lots' selection='_get_suggested_lots_selection' string='Suggested Lots'
  • suggested_lot_detail Selection
    help='You can return these lots' selection='_get_suggested_lots_detail_selection' string='Suggested Lots Detailed'
Public methods (1)
  • action_confirm(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/13.0/stock_return_request
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, sergio-teruel, oca-travis, OCA-git-bot, David, ps-tubtim
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request tree New
Models touched (5)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits='Product Unit of Measure' readonly=True store=True string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' readonly=True states={'draft': [('readonly', False)]} string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]}
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' readonly=True required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')] states={'draft': [('readonly', False)]} string='Return Order'
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' readonly=True required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')] states={'draft': [('readonly', False)]} string='Return type'
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' default=<expr> help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)' readonly=True
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] tracking=True
  • to_refund Boolean
    readonly=True states={'draft': [('readonly', False)]} string='To refund'
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Wrapper for multi. Avoid recompute as it delays the pickings creation
  • action_validate(self)
    Wrapper for multi
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals)
    @api.model
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot' string='Lot / Serial'
  • max_quantity Float
    digits='Product Unit of Measure' readonly=True string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('type', '=', 'product')] required=True string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits='Product Unit of Measure' required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (3)
  • action_lot_suggestion(self)
  • create(self, values)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id', 'lot_id')

New fields (4)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' default=<expr> ondelete='cascade' readonly=True required=True
  • suggested_lot Selection
    help='You can return these lots' selection='_get_suggested_lots_selection' string='Suggested Lots'
  • suggested_lot_detail Selection
    help='You can return these lots' selection='_get_suggested_lots_detail_selection' string='Suggested Lots Detailed'
Public methods (1)
  • action_confirm(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/12.0/stock_return_request
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSdavid, OCA Transbot, Sergio Teruel, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request tree New
Models touched (5)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits=dp.get_precision('Product Unit of Measure') readonly=True store=True string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' readonly=True states={'draft': [('readonly', False)]} string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]}
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' readonly=True required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')] states={'draft': [('readonly', False)]} string='Return Order'
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' readonly=True required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')] states={'draft': [('readonly', False)]} string='Return type'
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' default=<expr> help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)' readonly=True
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] track_visibility='onchange'
  • to_refund Boolean
    readonly=True states={'draft': [('readonly', False)]} string='To refund'
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Wrapper for multi. Avoid recompute as it delays the pickings creation
  • action_validate(self)
    Wrapper for multi
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals)
    @api.model
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot' string='Lot / Serial'
  • max_quantity Float
    digits=dp.get_precision('Product Unit of Measure') readonly=True string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('type', '=', 'product')] required=True string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (3)
  • action_lot_suggestion(self)
  • create(self, values)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id', 'lot_id')

New fields (4)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' default=<expr> ondelete='cascade' readonly=True required=True
  • suggested_lot Selection
    help='You can return these lots' selection='_get_suggested_lots_selection' string='Suggested Lots'
  • suggested_lot_detail Selection
    help='You can return these lots' selection='_get_suggested_lots_detail_selection' string='Suggested Lots Detailed'
Public methods (1)
  • action_confirm(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/11.0/stock_return_request
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSdavid, OCA Transbot, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - barcodes
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
report_stock_return_request report_stock_return_request ir.ui.view qweb New
report_stock_return_request_document report_stock_return_request_document ir.ui.view qweb New
stock_move_lines_to_return stock_move_lines_to_return ir.ui.view qweb New
stock_return_request_line_suggest_lot Suggested Lots for this Return Request Line suggest.return.request.lot form New
view_stock_return_request_form stock.return.request form New
view_stock_return_request_tree stock.return.request tree New
Models touched (5)

New fields (1)
  • qty_returnable Float
    compute='_compute_qty_returnable' digits=dp.get_precision('Product Unit of Measure') readonly=True store=True string='Returnable Quantity'
Public methods (0)

No public methods.

New fields (1)
  • stock_return_request_id Many2one → stock.return.request
    comodel_name='stock.return.request'
Public methods (0)

No public methods.

New fields (14)
  • from_date Date
    string='Search moves up to this date'
  • line_ids One2many → stock.return.request.line
    comodel_name='stock.return.request.line' copy=True inverse_name='request_id' readonly=True states={'draft': [('readonly', False)]} string='Stock Return'
  • name Char
    copy=False default=<expr> readonly=True required=True args: 'Reference'
  • note Text
    help='They will be visible on the report' string='Comments'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True states={'draft': [('readonly', False)]}
  • picking_types Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Restrict operation types to search for' string='Operation types'
  • return_from_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return from this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return from'
  • return_order Selection
    default='date desc, id desc' help='The returns will be performed searching moves in the given order.' readonly=True required=True selection=[('date desc, id desc', 'Newer first'), ('date asc, id desc', 'Older first')] states={'draft': [('readonly', False)]} string='Return Order'
  • return_to_location Many2one → stock.location
    comodel_name='stock.location' domain='[("usage", "=", "internal")]' help='Return to this location' readonly=True required=True states={'draft': [('readonly', False)]} string='Return to'
  • return_type Selection
    help='Supplier - Search for incoming moves from this supplier\nCustomer - Search for outgoing moves to this customer\nInternal - Search for outgoing moves to this location.' readonly=True required=True selection=[('supplier', 'Return to Supplier'), ('customer', 'Return from Customer'), ('internal', 'Return to Internal location')] states={'draft': [('readonly', False)]} string='Return type'
  • returned_picking_ids One2many → stock.picking
    comodel_name='stock.picking' copy=False inverse_name='stock_return_request_id' readonly=True string='Returned Pickings'
  • show_to_refund Boolean
    compute='_compute_show_to_refund' default=<expr> help='Whether to show it or not depending on the availability ofthe stock_account module (so a bridge module is not necessary)' readonly=True
  • state Selection
    copy=False default='draft' readonly=True selection=[('draft', 'Open'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')] track_visibility='onchange'
  • to_refund Boolean
    readonly=True states={'draft': [('readonly', False)]} string='To refund'
Public methods (8)
  • action_cancel(self)
    Cancel request and the associated pickings. We can set it to draft again.
  • action_cancel_to_draft(self)
    Set to draft again
  • action_confirm(self)
    Wrapper for multi. Avoid recompute as it delays the pickings creation
  • action_validate(self)
    Wrapper for multi
  • action_view_pickings(self)
    Display returned pickings
  • create(self, vals)
    @api.model
  • do_print_return_request(self)
  • onchange_locations(self)
    @api.onchange('return_type', 'partner_id')
    UI helpers to determine locations

New fields (8)
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot' string='Lot / Serial'
  • max_quantity Float
    digits=dp.get_precision('Product Unit of Measure') readonly=True string='Maximum available quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' domain=[('type', '=', 'product')] required=True string='Product'
  • product_uom_id Many2one → product.uom
    comodel_name='product.uom' readonly=True related='product_id.uom_id'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') required=True string='Quantiy to return'
  • request_id Many2one → stock.return.request
    comodel_name='stock.return.request' ondelete='cascade' readonly=True required=True string='Return Request'
  • returnable_move_ids Many2many → stock.move
    comodel_name='stock.move' copy=False readonly=True string='Returnable Move Lines'
  • tracking Selection
    readonly=True related='product_id.tracking'
Public methods (3)
  • action_lot_suggestion(self)
  • create(self, values)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id', 'lot_id')

New fields (4)
  • lot_suggestion_mode Selection
    default='sum' selection=[('sum', 'Total by lot'), ('detail', 'Total by move')]
  • request_line_id Many2one → stock.return.request.line
    comodel_name='stock.return.request.line' default=<expr> ondelete='cascade' readonly=True required=True
  • suggested_lot Selection
    help='You can return these lots' selection='_get_suggested_lots_selection' string='Suggested Lots'
  • suggested_lot_detail Selection
    help='You can return these lots' selection='_get_suggested_lots_detail_selection' string='Suggested Lots'
Public methods (1)
  • action_confirm(self)