Repository
OCA/sale-workflow · module folder · Try on Runboat
Module version
1.0.0
Category
Sales
Folder size
0.13 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/sale-workflow
Last tracking update
2026-08-07 08:22:54
Authors
Odoo Community Association (OCA), Sygel
Maintainers
Odoo Community Association (OCA), Sygel
Committers
Weblate, OCA-git-bot, oca-ci, Edilio Escalona Almira
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
This module allows to select multiple warehouses in sale order lines so
the sale order is split into multiple pickings depending on the
warehouses selected in the lines.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
sale_order_line_warehouse_view sale.order.line.warehouse.view sale.order.line form New
so_line_multi_warehouse_res_config_settings_view_form so.line.multi.warehouse.res.config.settings.view.form res.config.settings form Inherits stock.res_config_settings_view_form
so_line_multi_warehouse_view_order_form so.line.multi.warehouse.view.order.form sale.order form Inherits sale.view_order_form
so_line_multi_warehouse_view_warehouse so.line.multi.warehouse.view.warehouse stock.warehouse Inherits stock.view_warehouse
so_multi_warehouse_change_wizard_view so.multi.warehouse.change.wizard.view so.multi.warehouse.change.wizard form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (10)

New fields (1)
  • allow_sale_multi_warehouse Boolean
Public methods (0)

No public methods.

New fields (1)
  • allow_sale_multi_warehouse Boolean
    readonly=False related='company_id.allow_sale_multi_warehouse' string='Multi Warehouse in Sale Orders'
Public methods (0)

No public methods.

New fields (2)
  • allow_sale_multi_warehouse Boolean
    related='company_id.allow_sale_multi_warehouse' store=True
  • suitable_warehouse_ids Many2many → stock.warehouse
    comodel_name='stock.warehouse' compute='_compute_suitable_warehouse_ids' string='Suitable Warehouses'
Public methods (2)
  • action_open_so_multi_warehouse_change(self)
  • get_incompatible_multi_warehouse_lines(self, warehouse)

New fields (4)
  • allow_sale_multi_warehouse Boolean
    related='order_id.allow_sale_multi_warehouse'
  • qty_assigned_to_warehouse Float
    compute='_compute_qty_assigned_to_warehouse' digits='Product Unit of Measure' store=True string='Qty. Assigned to Warehouses'
  • sale_order_line_warehouse_ids One2many → sale.order.line.warehouse
    comodel_name='sale.order.line.warehouse' inverse_name='order_line_id' string='SO Line Warehouses'
  • suitable_warehouse_ids Many2many → stock.warehouse
    comodel_name='stock.warehouse' related='order_id.suitable_warehouse_ids' string='Suitable Warehouses'
Public methods (6)
  • action_show_warehouse_lines(self)
  • adjust_qty_assigned_to_warehouse(self, qty)
  • adjust_qty_assigned_to_warehouse_decrease(self, qty)
  • adjust_qty_assigned_to_warehouse_increase(self, qty)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (10)
  • move_ids One2many → stock.move
    comodel_name='stock.move' inverse_name='sale_order_line_warehouse_id' string='Moves'
  • order_line_id Many2one → sale.order.line
    comodel_name='sale.order.line' ondelete='cascade' required=True string='Sale Order Line'
  • product_id Many2one → product.product
    comodel_name='product.product' related='order_line_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' related='order_line_id.product_uom' string='UoM'
  • product_uom_qty Float
    digits='Product Unit of Measure' string='Quantity'
  • qty_delivered Float
    compute='_compute_qty_delivered' digits='Product Unit of Measure' string='Qty. Delivered'
  • qty_forecast Float
    compute='_compute_qty_forecast' digits='Product Unit of Measure' string='Forecast Qty.'
  • qty_forecast_uom_id Many2one → uom.uom
    comodel_name='uom.uom' related='product_id.uom_id' string='Forecast Qty. UoM'
  • suitable_warehouse_ids Many2many → stock.warehouse
    comodel_name='stock.warehouse' related='order_line_id.order_id.suitable_warehouse_ids'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' domain="[('id', 'in', suitable_warehouse_ids)]" required=True string='Warehouse'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, values)

New fields (6)
  • product_id Many2one → product.product
    comodel_name='product.product' related='sale_order_line_warehouse_id.product_id' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' related='sale_order_line_warehouse_id.product_uom_id' string='Unit Of Measure'
  • product_uom_qty Float
    digits='Product Unit of Measure' related='sale_order_line_warehouse_id.product_uom_qty' string='Quantity'
  • sale_order_line_warehouse_id Many2one → sale.order.line.warehouse
    comodel_name='sale.order.line.warehouse' readonly=True required=True string='Current Warehouse'
  • so_multi_warehouse_change_wizard_id Many2one → so.multi.warehouse.change.wizard
    comodel_name='so.multi.warehouse.change.wizard' ondelete='cascade' required=True string='SO Multi Warehouse Change Wizard'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' related='sale_order_line_warehouse_id.warehouse_id' string='Warehouse'
Public methods (0)

No public methods.

New fields (5)
  • current_warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' related='sale_order_id.warehouse_id' string='Current Warehouse'
  • has_incompatibilities Boolean
    copy=False default=False
  • new_warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='New Warehouse'
  • sale_order_id Many2one → sale.order
    comodel_name='sale.order' string='Sale Order'
  • so_multi_warehouse_change_line_ids One2many → so.multi.warehouse.change.line.wizard
    comodel_name='so.multi.warehouse.change.line.wizard' inverse_name='so_multi_warehouse_change_wizard_id'
Public methods (2)
  • change_warehouse(self)
  • check_incompatible(self)

New fields (1)
  • sale_order_line_warehouse_id Many2one → sale.order.line.warehouse
    comodel_name='sale.order.line.warehouse' string='Sale Order Line Warehouse'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • alternative_warehouse_ids Many2many → stock.warehouse
    column1='warehouse_id' column2='alternative_warehouse_id' comodel_name='stock.warehouse' domain="[('id', '!=', id)]" relation='alternative_warehouse' string='Alternative Warehouses'
Public methods (0)

No public methods.

Loading…