From 51da26d21dffeeed8e8f86e7ffc4388e28033e2a Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 15 Dec 2020 23:27:59 +1100 Subject: [PATCH] Filter builds by "overdue" status --- InvenTree/build/api.py | 11 +++++++++++ InvenTree/build/models.py | 4 +++- InvenTree/build/serializers.py | 6 +----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index bd8f379edc..ffc8d97a92 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -73,6 +73,17 @@ class BuildList(generics.ListCreateAPIView): else: queryset = queryset.exclude(status__in=BuildStatus.ACTIVE_CODES) + # Filter by "overdue" status? + overdue = params.get('overdue', None) + + if overdue is not None: + overdue = str2bool(overdue) + + if overdue: + queryset = queryset.filter(Build.OVERDUE_FILTER) + else: + queryset = queryset.exclude(Build.OVERDUE_FILTER) + # Filter by associated part? part = params.get('part', None) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 104b6e55c8..488a8b79e8 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -14,7 +14,7 @@ from django.core.exceptions import ValidationError from django.urls import reverse from django.db import models, transaction -from django.db.models import Sum +from django.db.models import Sum, Q from django.db.models.functions import Coalesce from django.core.validators import MinValueValidator @@ -53,6 +53,8 @@ class Build(MPTTModel): notes: Text notes """ + OVERDUE_FILTER = Q(status__in=BuildStatus.ACTIVE_CODES) & ~Q(target_date=None) & Q(target_date__lte=datetime.now().date()) + class Meta: verbose_name = _("Build Order") verbose_name_plural = _("Build Orders") diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index b1ef6405c3..dc28b7c82f 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -48,14 +48,10 @@ class BuildSerializer(InvenTreeModelSerializer): # Annotate a boolean 'overdue' flag - # Construct a filter for finding overdue builds - today = datetime.datetime.now().date() - overdue = Q(status__in=BuildStatus.ACTIVE_CODES) & ~Q(target_date=None) & Q(target_date__lte=today) - queryset = queryset.annotate( overdue=Case( When( - overdue, then=Value(True, output_field=BooleanField()), + Build.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()) )