2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-15 19:45:46 +00:00

Support filtering ReturnOrder by 'status'

- Refactors existing filter into the OrderFilter class
This commit is contained in:
Oliver Walters
2023-03-15 08:41:32 +11:00
parent 2efcbefe03
commit 4dc22697b0
2 changed files with 31 additions and 16 deletions

View File

@ -89,6 +89,14 @@ class GeneralExtraLineList(APIDownloadMixin):
class OrderFilter(rest_filters.FilterSet): class OrderFilter(rest_filters.FilterSet):
"""Base class for custom API filters for the OrderList endpoint.""" """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 # Exact match for reference
reference = rest_filters.CharFilter( reference = rest_filters.CharFilter(
label='Filter by exact reference', label='Filter by exact reference',
@ -261,13 +269,6 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI):
else: else:
queryset = queryset.exclude(models.PurchaseOrder.OVERDUE_FILTER) 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 # Attempt to filter by part
part = params.get('part', None) part = params.get('part', None)
@ -736,11 +737,6 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI):
else: else:
queryset = queryset.exclude(models.SalesOrder.OVERDUE_FILTER) 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" # Filter by "Part"
# Only return SalesOrder which have LineItem referencing the part # Only return SalesOrder which have LineItem referencing the part
part = params.get('part', None) part = params.get('part', None)
@ -1258,6 +1254,8 @@ class ReturnOrderList(APIDownloadMixin, ListCreateAPI):
def filter_queryset(self, queryset): def filter_queryset(self, queryset):
"""Custom queryset filtering not supported by the ReturnOrderFilter class""" """Custom queryset filtering not supported by the ReturnOrderFilter class"""
queryset = super().filter_queryset(queryset)
return queryset return queryset
filter_backends = [ filter_backends = [
@ -1270,10 +1268,6 @@ class ReturnOrderList(APIDownloadMixin, ListCreateAPI):
'reference': ['reference_int', 'reference'], 'reference': ['reference_int', 'reference'],
} }
filterset_fields = [
'customer',
]
ordering_fields = [ ordering_fields = [
'creation_date', 'creation_date',
'reference', 'reference',

View File

@ -4,6 +4,9 @@
/* globals /* globals
global_settings global_settings
purchaseOrderCodes,
returnOrderCodes,
salesOrderCodes,
*/ */
/* exported /* exported
@ -15,6 +18,20 @@ function getAvailableTableFilters(tableKey) {
tableKey = tableKey.toLowerCase(); 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 // Filters for "variant" table
if (tableKey == 'variants') { if (tableKey == 'variants') {
return { return {
@ -434,6 +451,10 @@ function getAvailableTableFilters(tableKey) {
type: 'bool', type: 'bool',
title: '{% trans "Overdue" %}', title: '{% trans "Overdue" %}',
}, },
assigned_to_me: {
type: 'bool',
title: '{% trans "Assigned to me" %}',
},
}; };
} }