Repository
OCA/wms · module folder · Try on Runboat
Module version
1.0.0
Category
Warehouse Management
Folder size
0.21 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/wms
Last tracking update
2026-08-07 08:23:04
Authors
Camptocamp, Odoo Community Association (OCA), BCIM
Maintainers
Camptocamp, Odoo Community Association (OCA), BCIM
Committers
Weblate, OCA-git-bot, oca-ci, Antoni Marroig Campomar
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
This module introduces the concept of routing flows in order to manage
different delivery routes for a warehouse.

The default behavior of Odoo allows you to have only one delivery route
per warehouse (with one, two or three steps). With this module, you are
now able to manage multiple delivery routes (having their own rules and
operation types), the right one being selected automatically based on
some criterias, like the carrier and any attribute of the stock move to
process.

This allows you to define a delivery route based on the type of goods to
ship, for instance:

- whole pallet (pick + ship)
- cold chain goods
- dangerous goods

![image_description](https://raw.githubusercontent.com/OCA/wms/14.0/stock_warehouse_flow/static/description/flow.png)

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
stock_location_route_tree stock.location.route.tree.inherit stock.route tree Inherits stock.stock_location_route_tree
stock_warehouse_flow_view_form stock.warehouse.flow.form stock.warehouse.flow form New
stock_warehouse_flow_view_search stock.warehouse.flow.search stock.warehouse.flow search New
stock_warehouse_flow_view_tree stock.warehouse.flow.tree stock.warehouse.flow tree New
view_delivery_carrier_form delivery.carrier.form.inherit delivery.carrier form Inherits delivery.view_delivery_carrier_form
view_warehouse stock.warehouse.form.inherit stock.warehouse form Inherits stock.view_warehouse
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (5)

New fields (1)
  • flow_ids Many2many → stock.warehouse.flow
    column1='delivery_carrier_id' column2='stock_warehouse_flow_id' comodel_name='stock.warehouse.flow' copy=False relation='delivery_carrier_stock_warehouse_flow_rel' string='Routing flows'
Public methods (1)
  • action_view_flows(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • applicable_flow_ids One2many → stock.warehouse.flow
    comodel_name='stock.warehouse.flow' compute='_compute_applicable_flow_ids' string='Applicable Flows'
  • flow_id Many2one → stock.warehouse.flow
    comodel_name='stock.warehouse.flow' ondelete='set null' string='Routing Flow'
Public methods (0)

No public methods.

New fields (1)
  • flow_ids One2many → stock.warehouse.flow
    comodel_name='stock.warehouse.flow' inverse_name='warehouse_id' string='Flows'
Public methods (1)
  • action_view_all_flows(self)

New fields (26)
  • active Boolean
    default=True
  • carrier_ids Many2many → delivery.carrier
    column1='stock_warehouse_flow_id' column2='delivery_carrier_id' comodel_name='delivery.carrier' copy=False relation='delivery_carrier_stock_warehouse_flow_rel' string='With carriers'
  • company_id Many2one
    related='warehouse_id.company_id'
  • delivery_route_id Many2one → stock.route
    comodel_name='stock.route' copy=False index=True ondelete='set null' readonly=True string='Delivery Route'
  • delivery_steps Selection
    default='ship_only' help='Outgoing route to follow' required=True selection=[('ship_only', 'Deliver goods directly (1 step)'), ('pick_ship', 'Send goods in output and then deliver (2 steps)'), ('pick_pack_ship', 'Pack goods, send goods in output and then deliver (3 steps)')] string='Outgoing Shipments'
  • from_location_dest_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_from_location_dest_id'
  • from_location_src_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_from_location_src_id'
  • from_picking_type_id Many2one → stock.picking.type
    comodel_name='stock.picking.type' domain="[('code', '=', 'outgoing')]" index=True ondelete='restrict' required=True string='From operation type'
  • impacted_route_ids One2many → stock.route
    comodel_name='stock.route' compute='_compute_impacted_route_ids' string='Impacted Routes'
  • move_domain Char
    copy=False default=[] help='Domain based on Stock Moves, to define if the routing flow is applicable or not.' string='Source Routing Domain'
  • name Char
    required=True
  • out_type_id Many2one
    help="Same than 'To operation type' field, displayed here to get a global overview of the flow configuration." readonly=True related='to_picking_type_id' string='Out Type'
  • output_stock_loc_id Many2one
    help="Same than 'To output location' field, displayed here to get a global overview of the flow configuration." readonly=True related='to_output_stock_loc_id' string='Output Location'
  • pack_stock_loc_id Many2one → stock.location
    check_company=True args: 'stock.location', 'Packing Location'
  • pack_type_id Many2one → stock.picking.type
    check_company=True args: 'stock.picking.type', 'Pack Type'
  • pick_type_id Many2one → stock.picking.type
    check_company=True args: 'stock.picking.type', 'Pick Type'
  • qty Float
    default=0 help="If a qty is set the flow can be applied on moves where the move's qty >= the qty set on the flow\n"
  • rule_ids One2many
    related='delivery_route_id.rule_ids' string='Rules'
  • sequence Integer
    default=10
  • sequence_prefix Char
    help="Used to generate the default prefix of new operation types. (e.g. 'DG' => 'WH/OUT/DG/')"
  • split_method Selection
    help='Simple => move will be split by the qty of the flow or a multiple of it' args: [('simple', 'Simple')], 'Split method'
  • to_output_stock_loc_id Many2one → stock.location
    check_company=True comodel_name='stock.location' ondelete='restrict' string='To output location'
  • to_picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('default_location_dest_id', '=', from_location_dest_id)]" ondelete='restrict' readonly=True string='To operation type'
  • uom_id Many2one → uom.uom
    default=<expr> args: 'uom.uom', 'Uom'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' default=<expr> ondelete='restrict' required=True string='Warehouse'
  • warning Html
    compute='_compute_warning'
Public methods (6)
  • action_generate_route(self)
  • apply_on_move(self, move, assign_picking=True)
  • onchange_name(self)
    @api.onchange('name')
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • split_move(self, move)
  • write(self, vals)

Loading…

Loading…