diff --git a/InvenTree/company/templates/company/detail_stock.html b/InvenTree/company/templates/company/detail_stock.html index 5bc7b9598a..b3682043dd 100644 --- a/InvenTree/company/templates/company/detail_stock.html +++ b/InvenTree/company/templates/company/detail_stock.html @@ -17,6 +17,8 @@ url: "{% url 'api-stock-list' %}", params: { supplier: {{ company.id }}, + part_detail: true, + location_detail: true, }, buttons: [ '#stock-options', diff --git a/InvenTree/part/templates/part/stock.html b/InvenTree/part/templates/part/stock.html index 93c3be29f8..3b2bdec166 100644 --- a/InvenTree/part/templates/part/stock.html +++ b/InvenTree/part/templates/part/stock.html @@ -37,6 +37,8 @@ loadStockTable($("#stock-table"), { params: { part: {{ part.id }}, + location_detail: true, + part_detail: true, }, buttons: [ '#stock-options', diff --git a/InvenTree/static/script/inventree/stock.js b/InvenTree/static/script/inventree/stock.js index 94eb7ce6df..0d18c064e9 100644 --- a/InvenTree/static/script/inventree/stock.js +++ b/InvenTree/static/script/inventree/stock.js @@ -392,25 +392,25 @@ function loadStockTable(table, options) { visible: false, }, { - field: 'part.full_name', + field: 'part_detail', title: 'Part', sortable: true, formatter: function(value, row, index, field) { - return imageHoverIcon(row.part.image_url) + renderLink(value, row.part.url + 'stock/'); + return imageHoverIcon(value.image_url) + renderLink(value.full_name, value.url + 'stock/'); } }, { - field: 'part.description', + field: 'part_detail.description', title: 'Description', sortable: true, }, { - field: 'location', + field: 'location_detail', title: 'Location', sortable: true, formatter: function(value, row, index, field) { - if (row.location) { - return renderLink(row.location.pathstring, row.location.url); + if (value) { + return renderLink(value.pathstring, value.url); } else { return 'No stock location set'; diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 2659d3702d..0bff4a3873 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -18,6 +18,7 @@ from .serializers import LocationSerializer from .serializers import StockTrackingSerializer from InvenTree.views import TreeSerializer +from InvenTree.helpers import str2bool from rest_framework.serializers import ValidationError from rest_framework.views import APIView @@ -245,6 +246,17 @@ class StockList(generics.ListCreateAPIView): - supplier: Filter by supplier """ + def get_serializer(self, *args, **kwargs): + + part_detail = str2bool(self.request.GET.get('part_detail', None)) + location_detail = str2bool(self.request.GET.get('location_detail', None)) + + kwargs['part_detail'] = part_detail + kwargs['location_detail'] = location_detail + + kwargs['context'] = self.get_serializer_context() + return self.serializer_class(*args, **kwargs) + def get_queryset(self): """ If the query includes a particular location, diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 40697a0aee..ddf06a3db7 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -55,11 +55,11 @@ class StockItemSerializer(serializers.ModelSerializer): """ url = serializers.CharField(source='get_absolute_url', read_only=True) - - part = PartBriefSerializer(many=False, read_only=True) - location = LocationBriefSerializer(many=False, read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + location_detail = LocationBriefSerializer(source='location', many=False, read_only=True) + @staticmethod def setup_eager_loading(queryset): queryset = queryset.prefetch_related('part') @@ -69,14 +69,29 @@ class StockItemSerializer(serializers.ModelSerializer): return queryset + def __init__(self, *args, **kwargs): + + part_detail = kwargs.pop('part_detail', False) + location_detail = kwargs.pop('location_detail', False) + + super(StockItemSerializer, self).__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + + if location_detail is not True: + self.fields.pop('location_detail') + class Meta: model = StockItem fields = [ 'pk', 'url', 'part', + 'part_detail', 'supplier_part', 'location', + 'location_detail', 'in_stock', 'quantity', 'serial', diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index ae36078ece..b165eaa72a 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -141,6 +141,8 @@ {% if location %} location: {{ location.id }}, {% endif %} + part_detail: true, + location_detail: true, }, url: "{% url 'api-stock-list' %}", });