From 7102ea4d6e10e6e3733160ef63245558099fb856 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 23 Jun 2026 04:43:15 +0000 Subject: [PATCH] Fix BuildLineFilter.filter_allocated - Required for mysql backend --- src/backend/InvenTree/build/api.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index 1e18727af1..056a3af403 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -494,9 +494,23 @@ class BuildLineFilter(FilterSet): def filter_allocated(self, queryset, name, value): """Filter by whether each BuildLine is fully allocated.""" + allocated_subquery = ( + BuildItem.objects + .filter(build_line=OuterRef('pk')) + .values('build_line') + .annotate(total=Sum('quantity')) + .values('total') + ) + + queryset = queryset.alias( + allocated_quantity=Coalesce(Subquery(allocated_subquery), 0) + ) + if str2bool(value): - return queryset.filter(allocated__gte=F('quantity') - F('consumed')) - return queryset.filter(allocated__lt=F('quantity') - F('consumed')) + return queryset.filter( + allocated_quantity__gte=F('quantity') - F('consumed') + ) + return queryset.filter(allocated_quantity__lt=F('quantity') - F('consumed')) consumed = rest_filters.BooleanFilter(label=_('Consumed'), method='filter_consumed')