[FIX] sale_stock: batch quantities computation correctly.
Available quantities computation is grouped by warehouse,date but using datetime.now as fallback during the for loop ensures no batch computation is done at all if order is not confirmed and has no commitment_date. X-original-commit: 563d0f73a8cea1933e57ae2b914f161ffeb5b7e4
This commit is contained in:
@@ -262,6 +262,7 @@ class SaleOrderLine(models.Model):
|
||||
grouped_lines = defaultdict(lambda: self.env['sale.order.line'])
|
||||
# We first loop over the SO lines to group them by warehouse and schedule
|
||||
# date in order to batch the read of the quantities computed field.
|
||||
now = fields.Datetime.now()
|
||||
for line in self:
|
||||
if not line.display_qty_widget:
|
||||
continue
|
||||
@@ -269,7 +270,7 @@ class SaleOrderLine(models.Model):
|
||||
if line.order_id.commitment_date:
|
||||
date = line.order_id.commitment_date
|
||||
else:
|
||||
confirm_date = line.order_id.date_order if line.order_id.state in ['sale', 'done'] else datetime.now()
|
||||
confirm_date = line.order_id.date_order if line.order_id.state in ['sale', 'done'] else now
|
||||
date = confirm_date + timedelta(days=line.customer_lead or 0.0)
|
||||
grouped_lines[(line.warehouse_id.id, date)] |= line
|
||||
|
||||
|
||||
@@ -653,6 +653,9 @@ class TestSaleStock(TestSaleCommon):
|
||||
self.assertEqual(line.warehouse_id, warehouse1)
|
||||
self.assertEqual(line.qty_to_deliver, 1)
|
||||
so.warehouse_id = warehouse2
|
||||
# invalidate product cache to ensure qty_available is recomputed
|
||||
# bc warehouse isn't in the depends_context of qty_available
|
||||
line.product_id.invalidate_cache()
|
||||
self.assertEqual(line.virtual_available_at_date, 5)
|
||||
self.assertEqual(line.free_qty_today, 5)
|
||||
self.assertEqual(line.qty_available_today, 5)
|
||||
|
||||
Reference in New Issue
Block a user