From 28ea275d1ab3b5125491fec603da71d645ea2696 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 28 Nov 2024 00:59:14 +1100 Subject: [PATCH] Consumed filter (#8574) * Add API filter for 'consumed' status * Add filter to table * Bump API vession --- src/backend/InvenTree/InvenTree/api_version.py | 5 ++++- src/backend/InvenTree/stock/api.py | 17 ++++++++++++++++- .../src/tables/stock/StockItemTable.tsx | 5 +++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index c90fe14e59..f60096525e 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,13 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 287 +INVENTREE_API_VERSION = 288 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v288 - 2024-11-27 : https://github.com/inventree/InvenTree/pull/8574 + - Adds "consumed" filter to StockItem API + v287 - 2024-11-27 : https://github.com/inventree/InvenTree/pull/8571 - Adds ability to set stock status when returning items from a customer diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index 42bc628d96..e0db540b15 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -524,6 +524,7 @@ class StockFilter(rest_filters.FilterSet): field_name='part__name', lookup_expr='iexact', ) + name_contains = rest_filters.CharFilter( label=_('Part name contains (case insensitive)'), field_name='part__name', @@ -540,11 +541,13 @@ class StockFilter(rest_filters.FilterSet): field_name='part__IPN', lookup_expr='iexact', ) + IPN_contains = rest_filters.CharFilter( label=_('Part IPN contains (case insensitive)'), field_name='part__IPN', lookup_expr='icontains', ) + IPN_regex = rest_filters.CharFilter( label=_('Part IPN (regex)'), field_name='part__IPN', lookup_expr='iregex' ) @@ -553,12 +556,14 @@ class StockFilter(rest_filters.FilterSet): assembly = rest_filters.BooleanFilter( label=_('Assembly'), field_name='part__assembly' ) + active = rest_filters.BooleanFilter(label=_('Active'), field_name='part__active') salable = rest_filters.BooleanFilter(label=_('Salable'), field_name='part__salable') min_stock = rest_filters.NumberFilter( label=_('Minimum stock'), field_name='quantity', lookup_expr='gte' ) + max_stock = rest_filters.NumberFilter( label=_('Maximum stock'), field_name='quantity', lookup_expr='lte' ) @@ -695,8 +700,18 @@ class StockFilter(rest_filters.FilterSet): return queryset.filter(q_batch).filter(q_serial).distinct() + consumed = rest_filters.BooleanFilter( + label=_('Consumed by Build Order'), method='filter_consumed' + ) + + def filter_consumed(self, queryset, name, value): + """Filter by whether the stock item has been consumed by a build order.""" + if str2bool(value): + return queryset.filter(consumed_by__isnull=False) + return queryset.filter(consumed_by__isnull=True) + installed = rest_filters.BooleanFilter( - label='Installed in other stock item', method='filter_installed' + label=_('Installed in other stock item'), method='filter_installed' ) def filter_installed(self, queryset, name, value): diff --git a/src/frontend/src/tables/stock/StockItemTable.tsx b/src/frontend/src/tables/stock/StockItemTable.tsx index de53c5d9fd..587ef88001 100644 --- a/src/frontend/src/tables/stock/StockItemTable.tsx +++ b/src/frontend/src/tables/stock/StockItemTable.tsx @@ -343,6 +343,11 @@ function stockItemTableFilters({ label: t`Include Variants`, description: t`Include stock items for variant parts` }, + { + name: 'consumed', + label: t`Consumed`, + description: t`Show items which have been consumed by a build order` + }, { name: 'installed', label: t`Installed`,