[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:
Victor Feyens
2020-03-06 10:21:56 +00:00
parent 5131572dab
commit 20fec19fd0
2 changed files with 5 additions and 1 deletions
+2 -1
View File
@@ -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)