From 4dc22697b03428c55a9f8b692516fd949b629c6d Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 15 Mar 2023 08:41:32 +1100 Subject: [PATCH] Support filtering ReturnOrder by 'status' - Refactors existing filter into the OrderFilter class --- InvenTree/order/api.py | 26 +++++++------------ .../templates/js/translated/table_filters.js | 21 +++++++++++++++ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index fbe117cab9..9359fe175a 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -89,6 +89,14 @@ class GeneralExtraLineList(APIDownloadMixin): class OrderFilter(rest_filters.FilterSet): """Base class for custom API filters for the OrderList endpoint.""" + # Filter against order status + status = rest_filters.NumberFilter(label="Order Status", method='filter_status') + + def filter_status(self, queryset, name, value): + """Filter by integer status code""" + + return queryset.filter(status=value) + # Exact match for reference reference = rest_filters.CharFilter( label='Filter by exact reference', @@ -261,13 +269,6 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): else: queryset = queryset.exclude(models.PurchaseOrder.OVERDUE_FILTER) - # Special filtering for 'status' field - status = params.get('status', None) - - if status is not None: - # First attempt to filter by integer value - queryset = queryset.filter(status=status) - # Attempt to filter by part part = params.get('part', None) @@ -736,11 +737,6 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): else: queryset = queryset.exclude(models.SalesOrder.OVERDUE_FILTER) - status = params.get('status', None) - - if status is not None: - queryset = queryset.filter(status=status) - # Filter by "Part" # Only return SalesOrder which have LineItem referencing the part part = params.get('part', None) @@ -1258,6 +1254,8 @@ class ReturnOrderList(APIDownloadMixin, ListCreateAPI): def filter_queryset(self, queryset): """Custom queryset filtering not supported by the ReturnOrderFilter class""" + queryset = super().filter_queryset(queryset) + return queryset filter_backends = [ @@ -1270,10 +1268,6 @@ class ReturnOrderList(APIDownloadMixin, ListCreateAPI): 'reference': ['reference_int', 'reference'], } - filterset_fields = [ - 'customer', - ] - ordering_fields = [ 'creation_date', 'reference', diff --git a/InvenTree/templates/js/translated/table_filters.js b/InvenTree/templates/js/translated/table_filters.js index d6a1c13879..de42d80c98 100644 --- a/InvenTree/templates/js/translated/table_filters.js +++ b/InvenTree/templates/js/translated/table_filters.js @@ -4,6 +4,9 @@ /* globals global_settings + purchaseOrderCodes, + returnOrderCodes, + salesOrderCodes, */ /* exported @@ -15,6 +18,20 @@ function getAvailableTableFilters(tableKey) { tableKey = tableKey.toLowerCase(); + // Filters for "returnorder" table + if (tableKey == 'returnorder') { + return { + status: { + title: '{% trans "Order status" %}', + options: returnOrderCodes + }, + assigned_to_me: { + type: 'bool', + title: '{% trans "Assigned to me" %}', + }, + }; + } + // Filters for "variant" table if (tableKey == 'variants') { return { @@ -434,6 +451,10 @@ function getAvailableTableFilters(tableKey) { type: 'bool', title: '{% trans "Overdue" %}', }, + assigned_to_me: { + type: 'bool', + title: '{% trans "Assigned to me" %}', + }, }; }