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

1"""Custom query filters for the Company app.""" 

2 

3from decimal import Decimal 

4 

5from django.db.models import DecimalField, ExpressionWrapper, F, Q 

6from django.db.models.functions import Coalesce, Greatest 

7 

8from sql_util.utils import SubquerySum 

9 

10from order.status_codes import PurchaseOrderStatusGroups 

11 

12 

13def annotate_on_order_quantity(): 

14 """Annotate the 'on_order' quantity for each SupplierPart in a queryset. 

15 

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 ) 

24 

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 )