diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index 972ff16f9c..ce75a47697 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -80,6 +80,17 @@ class POList(generics.ListCreateAPIView): else: queryset = queryset.exclude(status__in=PurchaseOrderStatus.OPEN) + # Filter by 'overdue' status + overdue = params.get('overdue', None) + + if overdue is not None: + overdue = str2bool(overdue) + + if overdue: + queryset = queryset.filter(PurchaseOrder.OVERDUE_FILTER) + else: + queryset = queryset.exclude(PurchaseOrder.OVERDUE_FILTER) + # Special filtering for 'status' field status = params.get('status', None) diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index 5463feb26f..264523bb40 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -40,12 +40,24 @@ class POSerializer(InvenTreeModelSerializer): def annotate_queryset(queryset): """ Add extra information to the queryset + + - Number of liens in the PurchaseOrder + - Overdue status of the PurchaseOrder """ queryset = queryset.annotate( line_items=SubqueryCount('lines') ) + queryset = queryset.annotate( + overdue=Case( + When( + PurchaseOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), + ), + default=Value(False, output_field=BooleanField()) + ) + ) + return queryset supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) @@ -54,6 +66,8 @@ class POSerializer(InvenTreeModelSerializer): status_text = serializers.CharField(source='get_status_display', read_only=True) + overdue = serializers.BooleanField(required=False, read_only=True) + class Meta: model = PurchaseOrder @@ -65,6 +79,7 @@ class POSerializer(InvenTreeModelSerializer): 'description', 'line_items', 'link', + 'overdue', 'reference', 'supplier', 'supplier_detail',