OdooWiki OCA HUB

Stock Reservation Rules

stock_reserve_rule folder_open OCA/stock-logistics-reservation open_in_new
Stock Management License: AGPL-3

This module adds rules for advanced reservation / removal strategies.

Rules are applied on a location and its sub-locations.

A rule can exclude quants or locations based on configurable criteria, and based on the selected quants, apply advanced removal strategies.

The rules have a sequence, which will be respected for the reservation. So even without filter or advanced removal strategies, we can give a priority to reserve in a location before another.

The advanced removal strategies are applied on top of the default one (fifo, fefo, ...).

The included advanced removal strategies are:

  • Default Removal Strategy: apply the default configured one (fifo, fefo, ...)
  • Empty Bins: goods are removed from a bin only if the bin will be empty after the removal (favor largest bins first to minimize the number of operations, then apply the default removal strategy for equal quantities).
  • Full Packaging: tries to remove full packaging (configured on the products) first, by largest to smallest package or based on a pre-selected package (default removal strategy is then applied for equal quantities).

Examples of scenario:

rules:

  • location A: no filter, no advanced removal strategy
  • location B: no filter, Empty Bins
  • location C: no filter, no advanced removal strategy

result:

  • take what is available in location A
  • then take in location B if available, only if bin(s) are emptied
  • then take what is available in location C

The module is meant to be extensible, with a core mechanism on which new rules and advanced removal strategies can be added.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Lets warehouse managers define reservation rules per storage location so that stock is picked from the right bins first, with optional advanced strategies such as emptying a bin completely or only taking full packages.

This module adds a new configuration screen, Reservation Rules, under the warehouse configuration menu. Each rule targets a storage location and applies to that location and everything below it, and can be limited to certain operation types (for example only outgoing deliveries) or to moves matching a filter on stock moves. Rules are ordered by sequence, so you can decide which location is looked at first when Odoo reserves stock.

Inside a rule you list removal rules, one per sub-location, each with its own sequence and an optional filter on the stock quantities (quants) that may be used. Each removal rule chooses an advanced removal strategy: - Default Removal Strategy: keep the normal FIFO/FEFO behaviour. - Empty Bins: only take goods from a bin if the bin becomes empty afterwards, so you avoid half-empty bins. - Full Packaging: only take quantities that match a full packaging of the product, optionally restricted to certain packaging levels, so boxes are not opened.

A check prevents saving a removal rule whose location is not inside the rule's location. A rule option can also force existing partial reservations to be released and redone when availability is checked again.

When Odoo reserves stock for a move, it applies the matching rules in order, filters the candidate quantities and takes stock according to the chosen strategy before falling back to the standard behaviour. Users with stock user rights can view the rules; only stock managers can create or change them, and rules are separated by company.

Menus it adds

menu_stock_reserve_rule
Models and fields (5)
  • stock.move · extends an existing model
  • stock.quant · extends an existing model
  • stock.picking.type · extends an existing modelreserve_rule_ids
  • stock.reserve.rule · new modelname (Description), active, sequence, company_id, location_id, rule_domain, picking_type_ids (Operation Types), rule_removal_ids, force_reassign_partial
  • stock.reserve.rule.removal · new modelname (Description), rule_id, sequence, location_id, quant_domain (Quants Domain), removal_strategy (Advanced Removal Strategy), packaging_level_ids

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 6 confirmed, 3 with no information of 9 versions.

Sources · Odoo 16.0

Confirmed on 2026-11-03 in branch 16.0 of OCA/stock-logistics-warehouse.

terminal Installation and usage

OCA documentation · Odoo 18.0

The configuration of the rules is done in "Inventory \> Configuration \> Stock Reservation Rules".

Creation of a rule:

Properties that define where the rule will be applied:

  • Location: Define where the rule will look for goods (a parent of the move's source location).
  • Rule Domain: The rule is used only if the Stock Move matches the domain.

Removal rules for the locations:

  • Quants Domain: this domain includes/excludes quants based on a domain.
  • Advanced Removal Strategy: the strategy that will be used for this location and sub-location when the rule is used.

The sequences have to be sorted in the view list to define the reservation priorities.

If you are using a database with demo data, you can give a try to the following scenario to understand how it works.

The demo data created by the module contains:

A product: Funky Socks

3 Locations:

  • Stock / Zone A / Bin A1: 200 Funky socks
  • Stock / Zone B / Bin B1: 100 Funky socks
  • Stock / Zone C / Bin C1: 100 Funky socks

3 Reservation Rules, in the following order

  • Zone A must have full quantities
  • Zone B
  • Zone C

2 Delivery Orders:

  • Origin: Outgoing shipment (reservation rules demo 1)
  • Origin: Outgoing shipment (reservation rules demo 2)

Scenario:

  • Activate Storage Locations and Multi-Warehouses
  • You can open Inventory \> Configuration \> Stock Reservation Rules to activate and see the rules (by default in demo, the rules are created inactive)
  • Open Transfer: Outgoing shipment (reservation rules demo 1)
  • Check availability: it has 150 units, as it will not empty Zone A, it will not take products there, it should take 100 in B and 50 in C (following the rules order)
  • Unreserve this transfer (to test the second case)
  • Open Transfer: Outgoing shipment (reservation rules demo 2)
  • Check availability: it has 250 units, it can empty Zone A, it will take 200 in Bin A1 and 50 in Bin B1.
  • If you want to explore further, you can add a custom domain to exclude rules (for instance, a product category will not use Zone B).

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.