TIP: You can type at any time to perform a new search.
Stock Dynamic Routing
stock_dynamic_routing · OCA/stock-logistics-workflow
Security findings
- Repository
- OCA/stock-logistics-workflow · module folder · Try on Runboat
- Module version
- 1.3.1
- Category
- Warehouse Management
- Folder size
- 0.25 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/stock-logistics-workflow
- Last tracking update
- 2026-10-03 23:56:57
- Authors
- Camptocamp, Odoo Community Association (OCA), BCIM
- Maintainers
- Camptocamp, Odoo Community Association (OCA), BCIM
- Committers
- Jacques-Etienne Baudoux, Sébastien Alix, Iván Todorovich, Weblate, Ruchir Shukla, OCA-git-bot, Adrián Cifuentes, oca-ci
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- stock_available_to_promise_release_dynamic_routing, stock_dynamic_routing_checkout_sync, stock_dynamic_routing_delivery, stock_dynamic_routing_reserve_rule, stock_move_source_relocate_dynamic_routing
- Description
Standard Stock Routes explain the steps you want to produce whereas the “Dynamic Routing” defines how operations are grouped according to their final source and destination location. This allows for example: - To parallelize transfers in two locations of a warehouse, splitting them in two different operation type - To define pre-picking (wave) in some sub-locations, then roundtrip picking of the sub-location waves Context for the use cases: In the warehouse, you have a High-Bay which requires to place goods in a handover when you move goods in or out of it. The High-Bay contains many sub-locations. A product can be stored either in the High-Bay, either in the Shelving zone. When picking: When there is enough stock in the Shelving, you expect the moves to have the usual Pick(Highbay)-Pack-Ship steps. If the good is picked from the High-Bay, you will need an extra operation: Pick(Highbay)-Handover-Pack-Ship. This is what this feature is doing: on the High-Bay location, you define a "routing rule". A routing rule selects a different operation type for the move. The extra transfer will have the selected operation type, and be added dynamically, on reservation, before the chain of moves. When putting away: A put-away rule targets the High-Bay location. An operation Input-Highbay is created. You expect Input-Handover-Highbay. You can configure a dynamic routing for the put-away on the High-Bay Location. The operation type of the new Handover move will the one of the matching routing rule, and its destination will be the destination of the operation type. **Notes about Odoo 18.0+** Compared to new Odoo dynamic push rules, here all steps are planned in advance. The move to the final destination always exists and the put-away has already been executed so that the final bin is already known. The intermediate step before reaching this final destination will also have it's put-away computed. As each step is planned in advance, you can also properly respect the operation shipping policy.
Code Analysis
Views touched (3)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_stock_routing_form |
stock.routing.form | stock.routing | form | New |
view_stock_routing_search |
stock.routing.search | stock.routing | search | New |
view_stock_routing_tree |
stock.routing | stock.routing | list | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (6)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (1)-
write(self, values)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
canceled_by_routingBooleandefault=Falsehelp='Technical field. Indicates the transfer is canceled because it was left empty after a dynamic routing.'
No public methods.
New fields (6)
-
activeBooleandefault=True -
location_idMany2one → stock.locationcomodel_name='stock.location'index=Trueondelete='cascade'required=True -
picking_type_idMany2one → stock.picking.typecomodel_name='stock.picking.type'help='Apply this routing only if the operation type of the move is the same.'required=Truestring='Operation Type' -
routing_messageHtmlcompute='_compute_routing_message' -
rule_idsOne2many → stock.routing.rulecomodel_name='stock.routing.rule'inverse_name='routing_id'string='Routing Rules' -
sequenceIntegerdefault=<expr>
No public methods.
New fields (9)
-
location_dest_idMany2one → stock.locationcomodel_name='stock.location'compute='_compute_location_dest_id' -
location_src_idMany2one → stock.locationcomodel_name='stock.location'compute='_compute_location_src_id' -
methodSelectionhelp='On pull, the routing is applied when the source location of a move line matches the source location of the rule. On push, the routing is applied when the destination location of a move line matches the destination location of the rule.'selection=[('pull', 'Pull'), ('push', 'Push')] -
picking_type_idMany2one → stock.picking.typecomodel_name='stock.picking.type'help='Operation type that will be applied on the move.'required=True -
routing_idMany2one → stock.routingcomodel_name='stock.routing'ondelete='cascade'required=True -
routing_location_idMany2oneindex=Truerelated='routing_id.location_id'store=True -
routing_picking_type_idMany2onehelp='Routing applied only on moves of this operation type.'index=Truerelated='routing_id.picking_type_id'store=True -
rule_domainChardefault=[]help='Domain based on Stock Moves, to define if the routing rule is applicable or not.'string='Source Routing Domain' -
sequenceIntegerdefault=<expr>
No public methods.
Loading…
Loading…
Loading…
Loading…