From 463192e0b98498872506cec84dd1ddc2d2772c71 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 7 Dec 2021 10:33:09 +1100 Subject: [PATCH] Improved table filtering for "purchase order" table (as seen from "part" view) --- InvenTree/order/api.py | 29 +++++++++++++++---- .../templates/js/translated/table_filters.js | 12 ++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index 98b9bbe934..96b886e15c 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -277,13 +277,31 @@ class POLineItemFilter(rest_filters.FilterSet): 'part' ] - completed = rest_filters.BooleanFilter(label='completed', method='filter_completed') + pending = rest_filters.BooleanFilter(label='pending', method='filter_pending') - def filter_completed(self, queryset, name, value): + def filter_pending(self, queryset, name, value): + """ + Filter by "pending" status (order status = pending) """ - Filter by lines which are "completed" (or "not" completed) - A line is completed when received >= quantity + value = str2bool(value) + + if value: + queryset = queryset.filter(order__status__in=PurchaseOrderStatus.OPEN) + else: + queryset = queryset.exclude(order__status__in=PurchaseOrderStatus.OPEN) + + return queryset + + order_status = rest_filters.NumberFilter(label='order_status', field_name='order__status') + + received = rest_filters.BooleanFilter(label='received', method='filter_received') + + def filter_received(self, queryset, name, value): + """ + Filter by lines which are "received" (or "not" received) + + A line is considered "received" when received >= quantity """ value = str2bool(value) @@ -293,7 +311,8 @@ class POLineItemFilter(rest_filters.FilterSet): if value: queryset = queryset.filter(q) else: - queryset = queryset.exclude(q) + # Only count "pending" orders + queryset = queryset.exclude(q).filter(order__status__in=PurchaseOrderStatus.OPEN) return queryset diff --git a/InvenTree/templates/js/translated/table_filters.js b/InvenTree/templates/js/translated/table_filters.js index b7ba79e498..76c129abdc 100644 --- a/InvenTree/templates/js/translated/table_filters.js +++ b/InvenTree/templates/js/translated/table_filters.js @@ -308,9 +308,17 @@ function getAvailableTableFilters(tableKey) { // Filters for PurchaseOrderLineItem table if (tableKey == 'purchaseorderlineitem') { return { - completed: { + pending: { type: 'bool', - title: '{% trans "Completed" %}', + title: '{% trans "Pending" %}', + }, + received: { + type: 'bool', + title: '{% trans "Received" %}', + }, + order_status: { + title: '{% trans "Order status" %}', + options: purchaseOrderCodes, }, }; }