Skip to main content

Initial Configuration

After installing the Stock Request module, you need to configure several components to make it work effectively in your environment.

User Access Configuration

Assign Security Groups

The Stock Request framework provides two main security groups:
1

Navigate to Users & Companies

Settings → Users & Companies → Users
2

Select a user to configure

Click on the user you want to grant access to
3

Assign appropriate group

Scroll to the Access Rights tab and find the Stock Request section.Assign one of the following:
Group: Stock Request / UserPermissions:
  • Create and manage their own stock requests
  • View stock requests they created
  • View stock requests they’re following (as message partners)
  • Cannot modify others’ requests
  • Cannot access configuration settings
Use case: Regular employees requesting stock for their department or workstation
4

Save the user

Click Save to apply the changes
Users must also have appropriate stock/inventory permissions to view and manage transfers created by stock requests.

Company Settings

Configure company-level settings that affect how stock requests behave.
1

Navigate to Stock Request Settings

Go to SettingsInventory section, or navigate via:Stock Requests → Configuration → Settings
2

Configure available stock checking

Check Available Stock First

Enable this option to check if products are available in stock before running procurement rules.
# Field: stock_request_check_available_first
# Model: res.company
company.stock_request_check_available_first = True
When enabled:
  1. System checks if requested product is available in the destination location
  2. If free_qty >= requested_qty, creates an internal transfer immediately
  3. Marks the stock as reserved and moves it
  4. Skips procurement rules entirely
When disabled:
  • Always runs procurement rules regardless of available stock
  • Useful when you want to trigger specific routes even if stock exists
3

Configure virtual locations

Allow Virtual Locations

Enable this to allow stock requests to be made for virtual locations (e.g., customer locations, vendor locations).
# Field: stock_request_allow_virtual_loc
# Model: res.company
company.stock_request_allow_virtual_loc = True
Virtual locations are typically used for special use cases. Most implementations should keep this disabled and only use internal/transit locations.
4

Enable Stock Request Orders (Optional)

Stock Request Order

Enable this to activate the Stock Request Order functionality, allowing users to group multiple requests.
# Field: group_stock_request_order
# Model: res.config.settings
settings.group_stock_request_order = True
This is automatically enabled if you install the stock_request_kanban module.

Warehouse Configuration

Configure Stock Routes

Stock Requests use Odoo’s routing system to determine how to fulfill requests.
1

Access Routes configuration

Inventory → Configuration → Routes
2

Create or modify routes

Create a new route or modify existing ones to work with Stock Requests.Example: Internal Replenishment Route
route = env['stock.route'].create({
    'name': 'Replenishment from Central Warehouse',
    'warehouse_ids': [(4, warehouse.id)],
    'sequence': 10,
})
3

Configure route rules

Add rules to the route that define the source and destination.
rule = env['stock.rule'].create({
    'name': 'Transfer from Central to Production',
    'route_id': route.id,
    'location_src_id': central_location.id,  # Source: Central warehouse
    'location_dest_id': production_location.id,  # Destination: Production floor
    'action': 'pull',
    'picking_type_id': warehouse.int_type_id.id,  # Internal transfer type
    'procure_method': 'make_to_stock',
    'warehouse_id': warehouse.id,
    'company_id': company.id,
})
  • location_src_id: Where to pull stock from
  • location_dest_id: Where the stock request was made for
  • action: Use ‘pull’ for transfers, ‘buy’ for purchases, ‘manufacture’ for MRP
  • picking_type_id: The operation type to use (internal, incoming, outgoing)
  • procure_method: ‘make_to_stock’ or ‘make_to_order’
4

Assign routes to products (optional)

You can assign routes at the product level:Inventory → Products → [Select Product] → Inventory tab → Routes
product.route_ids = [(4, route.id)]

Procurement Rules Configuration

Understanding Rule Priority

When a stock request is confirmed, Odoo evaluates rules in this order:
  1. Product-specific routes (if defined on the product)
  2. Warehouse routes (if the request specifies a warehouse)
  3. Location-based routes (rules with matching destination locations)
Rules are evaluated from lowest to highest sequence number. The first matching rule is used.

Example: Multi-Stage Fulfillment

Create a multi-stage fulfillment process:
# Scenario: Production floor requests from warehouse, 
# warehouse pulls from supplier if needed

# Step 1: Create locations
central_wh = env.ref('stock.warehouse0').lot_stock_id
production_location = env['stock.location'].create({
    'name': 'Production Floor',
    'location_id': env.ref('stock.warehouse0').view_location_id.id,
    'usage': 'internal',
})

# Step 2: Create route for production requests
route = env['stock.route'].create({
    'name': 'Production Replenishment',
    'warehouse_ids': [(4, env.ref('stock.warehouse0').id)],
})

# Step 3: Create rule to transfer from warehouse to production
env['stock.rule'].create({
    'name': 'WH to Production',
    'route_id': route.id,
    'location_src_id': central_wh.id,
    'location_dest_id': production_location.id,
    'action': 'pull',
    'picking_type_id': env.ref('stock.warehouse0').int_type_id.id,
    'procure_method': 'make_to_stock',
    'warehouse_id': env.ref('stock.warehouse0').id,
})

# Step 4: Assign route to products that use this workflow
product = env['product.product'].search([('default_code', '=', 'RAW001')])
product.route_ids = [(4, route.id)]

Sequence Configuration

Customize the sequence format for stock request numbers.
1

Navigate to Sequences

Settings → Technical → Sequences & Identification → Sequences
You need Developer Mode enabled to access Technical menu.
2

Find Stock Request sequences

Search for:
  • stock.request - For individual requests
  • stock.request.order - For request orders
3

Customize the format

Edit the sequence and modify:
sequence = env['ir.sequence'].search([('code', '=', 'stock.request')])
sequence.write({
    'prefix': 'REQ/%(year)s/',  # e.g., REQ/2026/00001
    'padding': 5,  # Number of digits
    'number_increment': 1,
    'implementation': 'standard',
})
Available placeholders:
  • %(year)s - Four digit year
  • %(month)s - Two digit month
  • %(day)s - Two digit day
  • %(y)s - Two digit year

Integration Module Configuration

Stock Request Purchase

If you installed stock_request_purchase:
1

Configure product suppliers

Ensure products have suppliers defined:Inventory → Products → [Product] → Purchase tab → Vendors
env['product.supplierinfo'].create({
    'product_tmpl_id': product.product_tmpl_id.id,
    'partner_id': supplier.id,
    'price': 100.0,
    'min_qty': 1.0,
})
2

Set up buy routes

Create or verify the “Buy” route exists and is configured:
product.route_ids = [(4, env.ref('purchase_stock.route_warehouse0_buy').id)]
3

Configure purchase settings

Settings → Inventory → OperationsEnable relevant purchase options like:
  • Purchase Agreements
  • Vendor Bills
  • Purchase Order Approval

Stock Request MRP

If you installed stock_request_mrp:
1

Configure Bills of Materials

Ensure manufactured products have BOMs:Manufacturing → Products → Bills of Materials
bom = env['mrp.bom'].create({
    'product_tmpl_id': product.product_tmpl_id.id,
    'product_qty': 1.0,
    'type': 'normal',
    'bom_line_ids': [(0, 0, {
        'product_id': component.id,
        'product_qty': 2.0,
    })],
})
2

Set manufacture routes

Assign manufacture route to products:
product.route_ids = [(4, env.ref('mrp.route_warehouse0_manufacture').id)]
3

Configure manufacturing settings

Settings → ManufacturingEnable relevant options:
  • Work Orders
  • Quality Control
  • Maintenance

Stock Request Tier Validation

If you installed stock_request_tier_validation:
1

Install base_tier_validation

This module depends on base_tier_validation. Ensure it’s installed.
2

Create tier definitions

Settings → Technical → Tier Validations → Tier Definitions
# Example: Require manager approval for requests > 1000 units
env['tier.definition'].create({
    'model_id': env.ref('stock_request.model_stock_request').id,
    'name': 'Manager Approval for Large Orders',
    'review_type': 'individual',
    'reviewer_id': manager.id,
    'python_code': '''result = record.product_uom_qty > 1000''',
    'sequence': 10,
})
3

Configure notification settings

Set up email templates for tier validation notifications:Settings → Technical → Email → Templates

Location Configuration

Create Destination Locations

Set up locations where stock can be requested to:
1

Navigate to Locations

Inventory → Configuration → Locations
2

Create new location

location = env['stock.location'].create({
    'name': 'Production Line A',
    'location_id': warehouse.view_location_id.id,  # Parent location
    'usage': 'internal',
    'company_id': company.id,
})
  • internal: Standard warehouse locations (use this for stock requests)
  • transit: Temporary locations during transfers
  • view: Organizational folders (cannot contain stock)
  • customer: Virtual customer locations (requires special config)
  • supplier: Virtual supplier locations (requires special config)
  • production: Manufacturing consumption locations
  • inventory: For inventory adjustments
3

Configure location settings

Set additional properties:
  • Removal Strategy: FIFO, LIFO, or FEFO
  • Storage Categories: For specific storage requirements
  • Cyclic Counting: For regular inventory counts

Procurement Group Configuration

Configure how stock requests group related movements:
# Create a procurement group for a project
proc_group = env['procurement.group'].create({
    'name': 'Project Alpha Materials',
})

# Use it in stock requests
stock_request = env['stock.request'].create({
    'product_id': product.id,
    'product_uom_qty': 10.0,
    'location_id': location.id,
    'procurement_group_id': proc_group.id,
    # ... other fields
})
Procurement groups help organize all transfers, purchases, and manufacturing orders related to a specific project or purpose.

Advanced Configuration

Custom Procurement Values

Extend the _prepare_procurement_values method to add custom data:
from odoo import models

class StockRequestCustom(models.Model):
    _inherit = 'stock.request'
    
    def _prepare_procurement_values(self, group_id=False):
        values = super()._prepare_procurement_values(group_id)
        # Add custom values
        values.update({
            'priority': '1',  # Urgent
            'partner_id': self.requested_by.partner_id.id,
            # Add any custom fields your routes need
        })
        return values

Multi-Company Configuration

1

Enable multi-company

Settings → Users & Companies → CompaniesEnsure multiple companies are configured
2

Configure per-company settings

Each company can have different settings:
for company in env['res.company'].search([]):
    company.write({
        'stock_request_check_available_first': True,
        'stock_request_allow_virtual_loc': False,
    })
3

Set up inter-company routes

Configure routes between company warehouses if needed

Record Rules and Security

The module includes these security rules by default:
<record model="ir.rule" id="stock_picking_rule">
    <field name="name">stock_request multi-company</field>
    <field name="model_id" search="[('model','=','stock.request')]"/>
    <field name="global" eval="True"/>
    <field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>

Testing Your Configuration

1

Create a test product

Inventory → Products → CreateSet:
  • Product Type: Storable Product
  • Routes: Your configured route
  • On hand quantity: 0 (to test procurement)
2

Create a test request

Stock Requests → Stock Requests → CreateFill in:
  • Product: Your test product
  • Quantity: 10.0
  • Location: Your destination location
3

Confirm and verify

  1. Click Confirm
  2. Check that procurement triggered correctly
  3. Click Transfers to see created picking/PO/MO
  4. Verify the route and rules were applied as expected

Configuration Checklist

  • User groups assigned to all relevant users
  • Company settings configured (check available first, virtual locations)
  • Warehouse locations created and organized
  • Routes and rules configured for all procurement scenarios
  • Product routes assigned where needed
  • Sequences customized to match numbering convention
  • Integration modules configured (purchase, MRP, tier validation)
  • Security rules reviewed and tested
  • Test requests created and confirmed successfully
  • Email notifications tested (if using tier validation)
  • Training completed for end users
  • Documentation prepared for your specific workflows

Next Steps

Quick Start Guide

Learn how to create and manage stock requests

API Reference

Explore the programmatic API for automation

Build docs developers (and LLMs) love