diff --git a/InvenTree/company/templates/company/detail_stock.html b/InvenTree/company/templates/company/detail_stock.html
index c33179d454..e994d5834b 100644
--- a/InvenTree/company/templates/company/detail_stock.html
+++ b/InvenTree/company/templates/company/detail_stock.html
@@ -26,7 +26,8 @@
},
buttons: [
'#stock-options',
- ]
+ ],
+ filterKey: "companystock",
});
$("#stock-export").click(function() {
diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py
index 018b588c1f..023b0c6c4e 100644
--- a/InvenTree/stock/api.py
+++ b/InvenTree/stock/api.py
@@ -539,10 +539,21 @@ class StockList(generics.ListCreateAPIView):
active = str2bool(active)
queryset = queryset.filter(part__active=active)
+ # Filter by 'depleted' status
+ depleted = params.get('depleted', None)
+
+ if depleted is not None:
+ depleted = str2bool(depleted)
+
+ if depleted:
+ queryset = queryset.filter(quantity__lte=0)
+ else:
+ queryset = queryset.exclude(quantity__lte=0)
+
# Filter by internal part number
IPN = params.get('IPN', None)
- if IPN:
+ if IPN is not None:
queryset = queryset.filter(part__IPN=IPN)
# Does the client wish to filter by the Part ID?
diff --git a/InvenTree/templates/js/stock.html b/InvenTree/templates/js/stock.html
index adaf07b4f6..f06615f2f5 100644
--- a/InvenTree/templates/js/stock.html
+++ b/InvenTree/templates/js/stock.html
@@ -468,6 +468,10 @@ function loadStockTable(table, options) {
html += ``;
}
+ if (row.quantity <= 0) {
+ html += `{% trans "Depleted" %}`;
+ }
+
return html;
}
},
diff --git a/InvenTree/templates/js/table_filters.html b/InvenTree/templates/js/table_filters.html
index e2138ef6b3..aef430bf36 100644
--- a/InvenTree/templates/js/table_filters.html
+++ b/InvenTree/templates/js/table_filters.html
@@ -32,30 +32,30 @@ function getAvailableTableFilters(tableKey) {
// Filters for the "Stock" table
if (tableKey == 'stock') {
return {
- in_stock: {
+ active: {
type: 'bool',
- title: '{% trans "In Stock" %}',
- description: '{% trans "Show items which are in stock" %}',
+ title: '{% trans "Active parts" %}',
+ description: '{% trans "Show stock for active parts" %}',
+ },
+ allocated: {
+ type: 'bool',
+ title: '{% trans "Is allocated" %}',
+ description: '{% trans "Item has been alloacted" %}',
},
cascade: {
type: 'bool',
title: '{% trans "Include sublocations" %}',
description: '{% trans "Include stock in sublocations" %}',
},
- active: {
+ depleted: {
type: 'bool',
- title: '{% trans "Active parts" %}',
- description: '{% trans "Show stock for active parts" %}',
+ title: '{% trans "Depleted" %}',
+ description: '{% trans "Show stock items which are depleted" %}',
},
- status: {
- options: stockCodes,
- title: '{% trans "Stock status" %}',
- description: '{% trans "Stock status" %}',
- },
- allocated: {
+ in_stock: {
type: 'bool',
- title: '{% trans "Is allocated" %}',
- description: '{% trans "Item has been alloacted" %}',
+ title: '{% trans "In Stock" %}',
+ description: '{% trans "Show items which are in stock" %}',
},
serialized: {
type: 'bool',
@@ -69,6 +69,11 @@ function getAvailableTableFilters(tableKey) {
title: "{% trans "Serial number LTE" %}",
description: "{% trans "Serial number less than or equal to" %}",
},
+ status: {
+ options: stockCodes,
+ title: '{% trans "Stock status" %}',
+ description: '{% trans "Stock status" %}',
+ },
};
}