Sale Order Line Multi Warehouse

sale_order_line_multi_warehouse
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/16.0/sale_order_line_multi_warehouse
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Sygel
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Sygel
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Manuel Regidor
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

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 xpath Inherits stock.res_config_settings_view_form
so_line_multi_warehouse_view_order_form so.line.multi.warehouse.view.order.form sale.order xpath Inherits sale.view_order_form
so_line_multi_warehouse_view_warehouse so.line.multi.warehouse.view.warehouse stock.warehouse field Inherits stock.view_warehouse
so_multi_warehouse_change_wizard_view so.multi.warehouse.change.wizard.view so.multi.warehouse.change.wizard form New
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)
  • 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 (4)
  • create(self, vals_list)
  • name_get(self)
  • 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 Selection
    copy=False readonly=True selection=[('yes', 'Yes'), ('no', 'No')]
  • 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.

STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/sale-workflow
PULL REQUEST
PULL REQUEST[17.0][MIG] sale_order_line_multi_warehouse (#3759)