From 134a688e4a5fbe56898e06239e989c09d94fbc27 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 28 Jun 2020 19:08:13 +1000 Subject: [PATCH 1/3] Fix filter logic for 'starred' parts --- InvenTree/part/api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 1b672d4c68..ed29ccbab6 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -363,9 +363,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: From 9b7977a2176b79afea7ff64086238a8788cfea0b Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 8 Jul 2020 09:43:09 -0500 Subject: [PATCH 2/3] API: Allow part deletion if inactive --- InvenTree/part/api.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index ed29ccbab6..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 From 0152ae79ef6a0622d3c63afa71401fbeda1aaa74 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 14 Jul 2020 15:54:03 +1000 Subject: [PATCH 3/3] Adds table filters for stock assigned to a particular customer --- .../templates/company/assigned_stock.html | 8 ++++++- InvenTree/templates/js/stock.html | 8 ++++--- InvenTree/templates/js/table_filters.html | 22 +++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) 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/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" %}"