[FIX] sale_stock: user default on warehouse

Use case:
- Create a user default value to set the warehouse as empty
- Create a SO

The SO warehouse is filled. It happens because there is an
extra check to add the warehouse based on the user preference
or first company's warehouse.

However the user default could be use to prevent that behavior
and force the user to choose a warehouse (15.0 behavior)

This commit always respect the user default if it's set.
Also remove a strange condition that could set warehouse of
wrong company

closes odoo/odoo#111033

X-original-commit: 3afb0bae0b48dc152908a2a39b0de7e2f966b54c
Signed-off-by: Adrien Widart <awt@odoo.com>
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
This commit is contained in:
Arnold Moyaux
2023-01-26 12:19:17 +01:00
parent 4b6ae93133
commit eaf45ab9ca
+6 -9
View File
@@ -162,15 +162,12 @@ class SaleOrder(models.Model):
for order in self:
default_warehouse_id = self.env['ir.default'].with_company(
order.company_id.id).get_model_defaults('sale.order').get('warehouse_id')
if order.company_id and order.company_id != order._origin.company_id:
warehouse = default_warehouse_id
else:
warehouse = self.env['stock.warehouse']
if order.state in ['draft', 'sent']:
order.warehouse_id = warehouse or order.user_id.with_company(order.company_id.id)._get_default_warehouse_id()
# In case we create a record in another state (eg: demo data, or business code)
if not order.warehouse_id:
order.warehouse_id = self.env.user._get_default_warehouse_id()
if order.state in ['draft', 'sent'] or not order.ids:
# Should expect empty
if default_warehouse_id is not None:
order.warehouse_id = default_warehouse_id
else:
order.warehouse_id = order.user_id.with_company(order.company_id.id)._get_default_warehouse_id()
@api.onchange('partner_shipping_id')
def _onchange_partner_shipping_id(self):