diff --git a/InvenTree/company/templates/company/assigned_stock.html b/InvenTree/company/templates/company/assigned_stock.html
index 53bc79b054..392dcaa999 100644
--- a/InvenTree/company/templates/company/assigned_stock.html
+++ b/InvenTree/company/templates/company/assigned_stock.html
@@ -9,6 +9,12 @@
{% trans "Assigned Stock" %}
+
+
{% endblock %}
@@ -18,12 +24,12 @@
loadStockTable($("#stock-table"), {
params: {
- test: 7,
customer: {{ company.id }},
part_detail: true,
location_detail: true,
},
url: "{% url 'api-stock-list' %}",
+ filterKey: "customerstock",
});
{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py
index 1b672d4c68..472ab1996e 100644
--- a/InvenTree/part/api.py
+++ b/InvenTree/part/api.py
@@ -190,7 +190,7 @@ class PartThumbs(generics.ListAPIView):
return Response(data)
-class PartDetail(generics.RetrieveUpdateAPIView):
+class PartDetail(generics.RetrieveUpdateDestroyAPIView):
""" API endpoint for detail view of a single Part object """
queryset = Part.objects.all()
@@ -229,6 +229,18 @@ class PartDetail(generics.RetrieveUpdateAPIView):
return self.serializer_class(*args, **kwargs)
+ def destroy(self, request, *args, **kwargs):
+ # Retrieve part
+ part = Part.objects.get(pk=int(kwargs['pk']))
+ # Check if inactive
+ if not part.active:
+ # Delete
+ return super(PartDetail, self).destroy(request, *args, **kwargs)
+ else:
+ # Return 405 error
+ message = f'Part \'{part.name}\' (pk = {part.pk}) is active: cannot delete'
+ return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED, data=message)
+
class PartList(generics.ListCreateAPIView):
""" API endpoint for accessing a list of Part objects
@@ -363,9 +375,10 @@ class PartList(generics.ListCreateAPIView):
queryset = super().filter_queryset(queryset)
# Filter by 'starred' parts?
- starred = str2bool(self.request.query_params.get('starred', None))
+ starred = self.request.query_params.get('starred', None)
if starred is not None:
+ starred = str2bool(starred)
starred_parts = [star.part.pk for star in self.request.user.starred_parts.all()]
if starred:
diff --git a/InvenTree/templates/js/stock.html b/InvenTree/templates/js/stock.html
index 2600a1635d..7a92d0df39 100644
--- a/InvenTree/templates/js/stock.html
+++ b/InvenTree/templates/js/stock.html
@@ -234,9 +234,11 @@ function loadStockTable(table, options) {
var filterListElement = options.filterList || "#filter-list-stock";
var filters = {};
-
+
+ var filterKey = options.filterKey || "stock";
+
if (!options.disableFilters) {
- filters = loadTableFilters("stock");
+ filters = loadTableFilters(filterKey);
}
var original = {};
@@ -245,7 +247,7 @@ function loadStockTable(table, options) {
original[key] = params[key];
}
- setupFilterList("stock", table, filterListElement);
+ setupFilterList(filterKey, table, filterListElement);
// Override the default values, or add new ones
for (var key in params) {
diff --git a/InvenTree/templates/js/table_filters.html b/InvenTree/templates/js/table_filters.html
index 3c9381331c..e2138ef6b3 100644
--- a/InvenTree/templates/js/table_filters.html
+++ b/InvenTree/templates/js/table_filters.html
@@ -11,6 +11,24 @@ function getAvailableTableFilters(tableKey) {
tableKey = tableKey.toLowerCase();
+ // Filters for the "customer stock" table (really a subset of "stock")
+ if (tableKey == "customerstock") {
+ return {
+ serialized: {
+ type: 'bool',
+ title: '{% trans "Is Serialized" %}',
+ },
+ serial_gte: {
+ title: "{% trans "Serial number GTE" %}",
+ description: "{% trans "Serial number greater than or equal to" %}"
+ },
+ serial_lte: {
+ title: "{% trans "Serial number LTE" %}",
+ description: "{% trans "Serial number less than or equal to" %}",
+ },
+ };
+ }
+
// Filters for the "Stock" table
if (tableKey == 'stock') {
return {
@@ -39,6 +57,10 @@ function getAvailableTableFilters(tableKey) {
title: '{% trans "Is allocated" %}',
description: '{% trans "Item has been alloacted" %}',
},
+ serialized: {
+ type: 'bool',
+ title: '{% trans "Is Serialized" %}',
+ },
serial_gte: {
title: "{% trans "Serial number GTE" %}",
description: "{% trans "Serial number greater than or equal to" %}"