Coverage for src/backend/InvenTree/company/filters.py: 100%
8 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
1"""Custom query filters for the Company app."""
3from decimal import Decimal
5from django.db.models import DecimalField, ExpressionWrapper, F, Q
6from django.db.models.functions import Coalesce, Greatest
8from sql_util.utils import SubquerySum
10from order.status_codes import PurchaseOrderStatusGroups
13def annotate_on_order_quantity():
14 """Annotate the 'on_order' quantity for each SupplierPart in a queryset.
16 - This is the total quantity of parts on order from all open purchase orders
17 - Takes into account the 'received' quantity for each order line
18 """
19 # Filter only 'active' purhase orders
20 # Filter only line with outstanding quantity
21 order_filter = Q(
22 order__status__in=PurchaseOrderStatusGroups.OPEN, quantity__gt=F('received')
23 )
25 return Coalesce(
26 SubquerySum(
27 Greatest(
28 ExpressionWrapper(
29 F('purchase_order_line_items__quantity')
30 - F('purchase_order_line_items__received'),
31 output_field=DecimalField(),
32 ),
33 0,
34 output_field=DecimalField(),
35 ),
36 filter=order_filter,
37 ),
38 Decimal(0),
39 output_field=DecimalField(),
40 )