Stock Request

stock_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/19.0/stock_request
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSKiril Vangelovski, Weblate, OCA-git-bot, oca-ci, LauraCForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-request
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
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
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module was written to allow users to request products that are
frequently stocked by the company, to be transferred to their chosen
location.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order list New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move field Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation list New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request list New
Models touched (13)

New fields (2)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
Public methods (0)

No public methods.

New fields (8)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • product_id Many2one
  • product_uom_id Many2one
  • product_uom_qty Float
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True
  • reference_ids Many2many
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_reference_ids(self)
    @api.constrains('order_id', 'reference_ids')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_ids Many2many → uom.uom
    comodel_name='uom.uom' compute='_compute_allowed_uom_ids'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('id', 'in', allowed_uom_ids)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • reference_ids Many2many → stock.reference
    help='Moves created through this stock request will be grouped using these references. If none are given, the moves generated by procurement rules will be grouped into one big picking.' args: 'stock.reference', 'References'
  • route_id Many2one → stock.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (17)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • reference_ids Many2many → stock.reference
    column1='stock_request_order_id' column2='stock_reference_id' comodel_name='stock.reference' help='Moves created through this stock request will be grouped using these references. If none are given, the moves generated by procurement rules will be grouped into one big picking.' relation='stock_request_order_stock_reference_rel' string='References'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one → stock.route
    compute='_compute_route_id' help='The route related to a stock request order' inverse='_inverse_route_id' readonly=True store=True args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True store=True string='Routes' args: 'stock.route'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (18)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_reference_ids(self)
    @api.onchange('reference_ids')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

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_request
VERSION
VERSION 1.1.4
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Saran440, Joan Sisquella, ThiagoMForgeFlow, LauraCForgeFlow, Celina Devigili
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 was written to allow users to request products that are
frequently stocked by the company, to be transferred to their chosen
location.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order list New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move field Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation list New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request list New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (2)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
Public methods (0)

No public methods.

New fields (8)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
  • product_id Many2one
  • product_uom_id Many2one
  • product_uom_qty Float
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_categ_id Many2one
    related='product_id.uom_id.category_id'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('category_id', '=?', allowed_uom_categ_id)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (17)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one → stock.route
    compute='_compute_route_id' help='The route related to a stock request order' inverse='_inverse_route_id' readonly=True store=True args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True store=True string='Routes' args: 'stock.route'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (18)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-request
GIT
GIThttps://github.com/OCA/stock-logistics-request.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-request/tree/17.0/stock_request
VERSION
VERSION 1.1.6
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Lois Rilo, Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Joan Sisquella, bobrador, andrea, Celina Devigili
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-request
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - 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 was written to allow users to request products that are
frequently stocked by the company, to be transferred to their chosen
location.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (3)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
  • stock_request_check_order_requested_by Boolean
    default=True string='Only allow edit stock request orders if requested by the same user'
Public methods (0)

No public methods.

New fields (9)
  • check_order_requested_by Boolean
    readonly=False related='company_id.stock_request_check_order_requested_by'
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
  • product_id Many2one
  • product_uom_id Many2one
  • product_uom_qty Float
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_categ_id Many2one
    related='product_id.uom_id.category_id'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('category_id', '=?', allowed_uom_categ_id)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (17)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True required=True
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' required=True string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one → stock.route
    compute='_compute_route_id' help='The route related to a stock request order' inverse='_inverse_route_id' readonly=True store=True args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True store=True string='Routes' args: 'stock.route'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (18)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-request
GIT
GIThttps://github.com/OCA/stock-logistics-request.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-request/tree/16.0/stock_request
VERSION
VERSION 1.1.3
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSLois Rilo, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Joan Sisquella
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-request
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - 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

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (2)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
Public methods (0)

No public methods.

New fields (8)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]}
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_categ_id Many2one
    related='product_id.uom_id.category_id'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('category_id', '=?', allowed_uom_categ_id)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (17)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]}
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]}
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one → stock.route
    compute='_compute_route_id' help='The route related to a stock request order' inverse='_inverse_route_id' readonly=True states={'draft': [('readonly', False)]} store=True args: 'stock.route'
  • route_ids Many2many → stock.route
    compute='_compute_route_ids' readonly=True store=True string='Routes' args: 'stock.route'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Warehouse'
Public methods (18)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/15.0/stock_request
VERSION
VERSION 1.8.3
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Lois Rilo, Víctor Martínez, nicolas, Weblate, OCA-git-bot, oca-ci, Joan Sisquella, Bernat Puig Font, OriolMForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:33
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 (12)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (2)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
Public methods (0)

No public methods.

New fields (8)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
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.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]}
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_categ_id Many2one
    related='product_id.uom_id.category_id'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('category_id', '=?', allowed_uom_categ_id)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.location.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.location.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (17)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]}
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]}
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users'
  • route_id Many2one → stock.location.route
    compute='_compute_route_id' domain="[('id', 'in', route_ids)]" help='The route related to a stock request order' inverse='_inverse_route_id' readonly=True states={'draft': [('readonly', False)]} store=True args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.location.route'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Warehouse'
Public methods (18)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/14.0/stock_request
VERSION
VERSION 1.9.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Denis Roussel, Enric Tobella, Lois Rilo, Nils Hamerlinck, Florent Xicluna, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Jesús Alan Ramos Rodríguez, oca-ci, Kitti U, newtratip, OriolMForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:56
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 (12)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements, raise_user_error=True)
    @api.model

New fields (2)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
  • stock_request_check_available_first Boolean
    string='Check available stock first'
Public methods (0)

No public methods.

New fields (8)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
  • stock_request_check_available_first Boolean
    readonly=False related='company_id.stock_request_check_available_first'
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.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (23)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • lead_days_date Date
    compute='_compute_lead_days'
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True args: 'Qty Cancelled'
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True args: 'Qty Done'
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True args: 'Qty In Progress'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users', 'Requested by'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • rule_ids Many2many → stock.rule
    compute='_compute_rules' string='Rules used' args: 'stock.rule'
  • state Selection
    copy=False default='draft' index=True readonly=True selection=[('draft', 'Draft'), ('open', 'In progress'), ('done', 'Done'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (16)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_cancel(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (13)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • allowed_uom_categ_id Many2one
    related='product_id.uom_id.category_id'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' required=True string='Location'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Name'
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' default=<expr> domain="[('category_id', '=?', allowed_uom_categ_id)]" required=True string='Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.location.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.location.route'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' required=True string='Warehouse'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (15)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="not allow_virtual_location and [('usage', 'in', ['internal', 'transit'])] or []" ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]} args: 'Name'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True tracking=True args: 'res.users', 'Requested by'
  • state Selection
    compute='_compute_state' copy=False default='draft' index=True readonly=True selection=_get_request_order_states store=True string='Status' tracking=True
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} string='Warehouse'
Public methods (17)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_request
VERSION
VERSION 1.7.3
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, mreficent, Enric Tobella, Lois Rilo, Carlos Lopez, OCA Transbot, Adrien Peiffer, Nicolás Mac Rouillon, oca-travis, OCA-git-bot, Kitti U, hveficent, Alba Riera, HviorForgeFlow, Juan Carreras, OriolMForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
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 (14)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_pivot stock.request.pivot stock.request pivot New
stock_request_pivot_search stock.request.pivot.search stock.request filter Inherits stock_request.stock_request_search
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, procurements)
    @api.model

New fields (1)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
Public methods (0)

No public methods.

New fields (7)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_mrp Boolean
    string='Stock Request for Manufacturing'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
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.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    default=<expr> help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity cancelled' readonly=True store=True args: 'Qty Cancelled'
  • qty_done Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity completed' readonly=True store=True args: 'Qty Done'
  • qty_in_progress Float
    compute='_compute_qty' digits='Product Unit of Measure' help='Quantity in progress.' readonly=True store=True args: 'Qty In Progress'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • state Selection
    copy=False default='draft' index=True readonly=True selection=_get_request_states string='Status' track_visibility='onchange'
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (15)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals)
    @api.model
  • unlink(self)

New fields (12)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' required=True args: 'stock.location', 'Location'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Name'
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits='Product Unit of Measure' help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    default=<expr> required=True args: 'uom.uom', 'Product Unit of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.location.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.location.route'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' required=True args: 'stock.warehouse', 'Warehouse'
Public methods (7)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed and limits the user selection of warehouses.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (15)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.location', 'Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]} args: 'Name'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • state Selection
    copy=False default='draft' index=True readonly=True selection=_get_request_order_states string='Status' track_visibility='onchange'
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.warehouse', 'Warehouse'
Public methods (19)
  • action_cancel(self)
  • action_confirm(self)
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
  • action_view_transfer(self)
  • change_childs(self)
  • check_done(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)

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/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_request
VERSION
VERSION 1.5.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSMaxime Chambreuil, GitHub, mreficent, david, Lois Rilo, OCA Transbot, ahenriquez, oca-travis, Weblate, OCA-git-bot, hveficent, Jaime Arroyo, Murtuza Saleh, Pascal GOUHIER
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:16
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 (13)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_move_picking_form stock.move.form stock.move group Inherits stock.view_move_picking_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • run(self, product_id, product_qty, product_uom, location_id, name, origin, values)
    @api.model

New fields (1)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
Public methods (0)

No public methods.

New fields (6)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • module_stock_request_submit Boolean
    string='Submitted state in Stock Requests'
  • stock_request_allow_virtual_loc Boolean
    readonly=False related='company_id.stock_request_allow_virtual_loc'
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.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    default=<expr> help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity cancelled' readonly=True store=True args: 'Qty Cancelled'
  • qty_done Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity completed' readonly=True store=True args: 'Qty Done'
  • qty_in_progress Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity in progress.' readonly=True store=True args: 'Qty In Progress'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • state Selection
    copy=False default='draft' index=True readonly=True selection=_get_request_states string='Status' track_visibility='onchange'
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (15)
  • action_cancel(self)
  • action_confirm(self)
    @api.multi
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
    @api.multi
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi

New fields (12)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' required=True args: 'stock.location', 'Location'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Name'
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits=dp.get_precision('Product Unit of Measure') help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → uom.uom
    default=<expr> required=True args: 'uom.uom', 'Product Unit of Measure'
  • product_uom_qty Float
    digits=dp.get_precision('Product Unit of Measure') help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.location.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Routes' args: 'stock.location.route'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' required=True args: 'stock.warehouse', 'Warehouse'
Public methods (7)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed and limits the user selection of warehouses.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (15)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.location', 'Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]} args: 'Name'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • state Selection
    copy=False default='draft' index=True readonly=True selection=_get_request_order_states string='Status' track_visibility='onchange'
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.warehouse', 'Warehouse'
Public methods (19)
  • action_cancel(self)
  • action_confirm(self)
    @api.multi
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
    @api.multi
  • action_view_transfer(self)
    @api.multi
  • change_childs(self)
  • check_done(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)
    @api.multi

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/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/11.0/stock_request
VERSION
VERSION 3.4.7
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSGitHub, mreficent, Denis Roussel, Enric Tobella, Lois Rilo, Jordi Ballester Alomar, OCA Transbot, AaronHForgeFlow, oca-travis, Weblate, OCA-git-bot, ernesto, oca-ci, hveficent, Atte Isopuro
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:57
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 (13)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.stock_request res.config.settings xpath Inherits base.res_config_settings_view_form
stock_request_order_form stock.request.order.form stock.request.order form New
stock_request_order_search stock.request.order.search stock.request.order search New
stock_request_order_tree stock.request.order.tree stock.request.order tree New
stock_request_search stock.request.search stock.request search New
view_move_form stock.move.form stock.move group Inherits stock.view_move_form
view_move_picking_form stock.move.form stock.move group Inherits stock.view_move_picking_form
view_picking_form stock.picking.form stock.picking div Inherits stock.view_picking_form
view_stock_move_operations stock.move.operations.form stock.move field Inherits stock.view_stock_move_operations
view_stock_request_allocation_form stock.request.allocation.form stock.request.allocation form New
view_stock_request_allocation_tree stock.request.allocation.tree stock.request.allocation tree New
view_stock_request_form stock.request.form stock.request form New
view_stock_request_tree stock.request.tree stock.request tree New
Models touched (13)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • stock_request_allow_virtual_loc Boolean
    string='Allow Virtual locations on Stock Requests'
Public methods (0)

No public methods.

New fields (5)
  • group_stock_request_order Boolean
    implied_group='stock_request.group_stock_request_order'
  • module_stock_request_analytic Boolean
    string='Stock Requests Analytic integration'
  • module_stock_request_kanban Boolean
    string='Stock Requests Kanban integration'
  • module_stock_request_purchase Boolean
    string='Stock Requests for Purchases'
  • stock_request_allow_virtual_loc Boolean
    related='company_id.stock_request_allow_virtual_loc'
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.

New fields (2)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_move_id' string='Stock Request Allocation'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • stock_request_count Integer
    compute='_compute_stock_request_ids' args: 'Stock Request #'
  • stock_request_ids One2many → stock.request
    comodel_name='stock.request' compute='_compute_stock_request_ids' string='Stock Requests'
Public methods (1)
  • action_view_stock_request(self)
    :return dict: dictionary value for created view

New fields (21)
  • allocation_ids One2many → stock.request.allocation
    comodel_name='stock.request.allocation' inverse_name='stock_request_id' string='Stock Request Allocation'
  • company_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    states={'draft': [('readonly', False)]}
  • order_id Many2one → stock.request.order
    readonly=True args: 'stock.request.order'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • product_uom_qty Float
    readonly=True states={'draft': [('readonly', False)]}
  • qty_cancelled Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity cancelled' readonly=True store=True args: 'Qty Cancelled'
  • qty_done Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity completed' readonly=True store=True args: 'Qty Done'
  • qty_in_progress Float
    compute='_compute_qty' digits=dp.get_precision('Product Unit of Measure') help='Quantity in progress.' readonly=True store=True args: 'Qty In Progress'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • route_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
  • state Selection
    copy=False default='draft' index=True readonly=True selection=REQUEST_STATES string='Status' track_visibility='onchange'
  • warehouse_id Many2one
    readonly=True states={'draft': [('readonly', False)]}
Public methods (15)
  • action_cancel(self)
  • action_confirm(self)
    @api.multi
  • action_done(self)
  • action_draft(self)
  • action_view_transfer(self)
    @api.multi
  • check_done(self)
  • check_order_company(self)
    @api.constrains('order_id', 'company_id')
  • check_order_expected_date(self)
    @api.constrains('order_id', 'expected_date')
  • check_order_location(self)
    @api.constrains('order_id', 'location_id')
  • check_order_picking_policy(self)
    @api.constrains('order_id', 'picking_policy')
  • check_order_procurement_group(self)
    @api.constrains('order_id', 'procurement_group_id')
  • check_order_requested_by(self)
    @api.constrains('order_id', 'requested_by')
  • check_order_warehouse_id(self)
    @api.constrains('order_id', 'warehouse_id')
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi

New fields (12)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' required=True args: 'stock.location', 'Location'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Name'
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' args: 'procurement.group', 'Procurement Group'
  • product_id Many2one → product.product
    domain=[('type', 'in', ['product', 'consu'])] ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_qty Float
    compute='_compute_product_qty' copy=False digits=dp.get_precision('Product Unit of Measure') help='Quantity in the default UoM of the product' store=True args: 'Real Quantity'
  • product_uom_id Many2one → product.uom
    default=<expr> required=True args: 'product.uom', 'Product Unit of Measure'
  • product_uom_qty Float
    digits=dp.get_precision('Product Unit of Measure') help='Quantity, specified in the unit of measure indicated in the request.' required=True args: 'Quantity'
  • route_id Many2one → stock.location.route
    domain="[('id', 'in', route_ids)]" ondelete='restrict' string='Route' args: 'stock.location.route'
  • route_ids Many2many → stock.location.route
    compute='_compute_route_ids' readonly=True string='Route' args: 'stock.location.route'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' required=True args: 'stock.warehouse', 'Warehouse'
Public methods (7)
  • default_get(self, fields)
    @api.model
  • get_parents(self)
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
    Sets a default warehouse when the company is changed and limits the user selection of warehouses.
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_product_id(self)
    @api.onchange('product_id')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
    Finds location id for changed warehouse.

New fields (9)
  • allocated_product_qty Float
    copy=False help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Allocated Quantity'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='stock_request_id.company_id' store=True string='Company'
  • open_product_qty Float
    compute='_compute_open_product_qty' args: 'Open Quantity'
  • product_id Many2one → product.product
    comodel_name='product.product' readonly=True related='stock_request_id.product_id' string='Product'
  • product_uom_id Many2one → product.uom
    comodel_name='product.uom' readonly=True related='stock_request_id.product_uom_id' string='UoM'
  • requested_product_qty Float
    compute='_compute_requested_product_qty' help='Quantity of the stock request allocated to the stock move, in the default UoM of the product' args: 'Requested Quantity'
  • requested_product_uom_qty Float
    help='Quantity of the stock request allocated to the stock move, in the UoM of the Stock Request' args: 'Requested Quantity (UoM)'
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' ondelete='cascade' required=True string='Stock Move'
  • stock_request_id Many2one → stock.request
    comodel_name='stock.request' ondelete='cascade' required=True string='Stock Request'
Public methods (0)

No public methods.

New fields (15)
  • allow_virtual_location Boolean
    readonly=True related='company_id.stock_request_allow_virtual_loc'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} args: 'res.company', 'Company'
  • expected_date Datetime
    default=fields.Datetime.now help='Date when you expect to receive the goods.' index=True readonly=True required=True states={'draft': [('readonly', False)]} args: 'Expected Date'
  • location_id Many2one → stock.location
    domain=[('usage', 'in', ['internal', 'transit'])] ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.location', 'Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute='_compute_move_ids' readonly=True string='Stock Moves'
  • name Char
    copy=False default='/' readonly=True required=True states={'draft': [('readonly', False)]} args: 'Name'
  • picking_count Integer
    compute='_compute_picking_ids' readonly=True string='Delivery Orders'
  • picking_ids One2many → stock.picking
    compute='_compute_picking_ids' readonly=True string='Pickings' args: 'stock.picking'
  • picking_policy Selection
    default='direct' readonly=True required=True states={'draft': [('readonly', False)]} string='Shipping Policy' args: [('direct', 'Receive each product when available'), ('one', 'Receive all products at once')]
  • procurement_group_id Many2one → procurement.group
    help='Moves created through this stock request will be put in this procurement group. If none is given, the moves generated by procurement rules will be grouped into one big picking.' readonly=True states={'draft': [('readonly', False)]} args: 'procurement.group', 'Procurement Group'
  • requested_by Many2one → res.users
    default=<expr> required=True track_visibility='onchange' args: 'res.users', 'Requested by'
  • state Selection
    copy=False default='draft' index=True readonly=True selection=REQUEST_STATES string='Status' track_visibility='onchange'
  • stock_request_count Integer
    compute='_compute_stock_request_count' readonly=True string='Stock requests'
  • stock_request_ids One2many → stock.request
    copy=True inverse_name='order_id' args: 'stock.request'
  • warehouse_id Many2one → stock.warehouse
    ondelete='cascade' readonly=True required=True states={'draft': [('readonly', False)]} args: 'stock.warehouse', 'Warehouse'
Public methods (19)
  • action_cancel(self)
  • action_confirm(self)
    @api.multi
  • action_done(self)
  • action_draft(self)
  • action_view_stock_requests(self)
    @api.multi
  • action_view_transfer(self)
    @api.multi
  • change_childs(self)
  • check_done(self)
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • onchange_allow_virtual_location(self)
    @api.onchange('allow_virtual_location')
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_expected_date(self)
    @api.onchange('expected_date')
  • onchange_location_id(self)
    @api.onchange('location_id')
  • onchange_picking_policy(self)
    @api.onchange('picking_policy')
  • onchange_procurement_group_id(self)
    @api.onchange('procurement_group_id')
  • onchange_requested_by(self)
    @api.onchange('requested_by')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • unlink(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.