Skip to content

Commit 1e2c9ed

Browse files
Refactor part.on_order (#11496)
More intelligent DB querying for significant speed improvement
1 parent aafda4b commit 1e2c9ed

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/backend/InvenTree/part/models.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2582,21 +2582,22 @@ def on_order(self):
25822582
Note that some supplier parts may have a different pack_quantity attribute,
25832583
and this needs to be taken into account!
25842584
"""
2585+
from order.models import PurchaseOrderLineItem
2586+
25852587
quantity = 0
25862588

2587-
# Iterate through all supplier parts
2588-
for sp in self.supplier_parts.all():
2589-
# Look at any incomplete line item for open orders
2590-
lines = sp.purchase_order_line_items.filter(
2591-
order__status__in=PurchaseOrderStatusGroups.OPEN,
2592-
quantity__gt=F('received'),
2593-
)
2589+
# Find all outstanding PurchaseOrderLineItem objects which reference this part
2590+
lines = PurchaseOrderLineItem.objects.filter(
2591+
order__status__in=PurchaseOrderStatusGroups.OPEN,
2592+
part__part_id=self.pk,
2593+
quantity__gt=F('received'),
2594+
).prefetch_related('part')
25942595

2595-
for line in lines:
2596-
remaining = line.quantity - line.received
2596+
for line in lines:
2597+
remaining = line.quantity - line.received
25972598

2598-
if remaining > 0:
2599-
quantity += sp.base_quantity(remaining)
2599+
if remaining > 0:
2600+
quantity += line.part.base_quantity(remaining)
26002601

26012602
return quantity
26022603

0 commit comments

Comments
 (0)