Repository
OCA/stock-logistics-reservation · module folder · Try on Runboat
Module version
1.2.2
Category
Stock Management
Folder size
0.12 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/stock-logistics-reservation
Last tracking update
2026-08-07 08:43:06
Authors
Camptocamp, Odoo Community Association (OCA), BCIM
Maintainers
Camptocamp, Odoo Community Association (OCA), BCIM
Committers
Jacques-Etienne Baudoux, Denis Roussel, Akim Juillerat, Weblate, Ruchir Shukla, OCA-git-bot, oca-ci
Odoo dependencies
Python dependencies
openupgradelib
System dependencies
None
Required by
None
Description
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.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_stock_reserve_rule_form stock.reserve.rule.form stock.reserve.rule form New
view_stock_reserve_rule_search stock.reserve.rule.search stock.reserve.rule search New
view_stock_reserve_rule_tree stock.reserve.rule stock.reserve.rule list New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • reserve_rule_ids Many2many → stock.reserve.rule
    comodel_name='stock.reserve.rule'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • force_reassign_partial Boolean
    help='Check this box if you want to remove existing reservation when checking availabilty of partially available moves.'
  • location_id Many2one → stock.location
    comodel_name='stock.location' help='Rule applied only in this location and sub-locations.' required=True
  • name Char
    required=True string='Description'
  • picking_type_ids Many2many → stock.picking.type
    comodel_name='stock.picking.type' help='Apply this rule only if the operation type of the move is the same.' string='Operation Types'
  • rule_domain Char
    default=[] help='Domain based on Stock Moves, to define if the rule is applicable or not.'
  • rule_removal_ids One2many → stock.reserve.rule.removal
    comodel_name='stock.reserve.rule.removal' inverse_name='rule_id'
  • sequence Integer
    default=<expr>
Public methods (0)

No public methods.

New fields (7)
  • location_id Many2one → stock.location
    comodel_name='stock.location' required=True
  • name Char
    string='Description'
  • packaging_level_ids Many2many → product.packaging.level
    comodel_name='product.packaging.level' help="Optional packaging level when using 'Full Packaging'.\n"
  • quant_domain Char
    default=[] help='Filter Quants allowed to be reserved for this location and sub-locations.' string='Quants Domain'
  • removal_strategy Selection
    default='default' help='Defines if and how goods are taken from locations.Default: take the first ones with the configured Removal Strategy(FIFO, FEFO, ...).\nEmpty Bins: take goods from a location only if the bin is empty afterwards.\nFull Packaging: take goods from a location only if the location quantity matches a packaging quantity (do not open boxes).' required=True selection=[('default', 'Default Removal Strategy'), ('empty_bin', 'Empty Bins'), ('packaging', 'Full Packaging')] string='Advanced Removal Strategy'
  • rule_id Many2one → stock.reserve.rule
    comodel_name='stock.reserve.rule' ondelete='cascade' required=True
  • sequence Integer
    default=<expr>
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…