diff --git a/InvenTree/InvenTree/static/script/inventree/build.js b/InvenTree/InvenTree/static/script/inventree/build.js index 5ed035be86..03c33f7b57 100644 --- a/InvenTree/InvenTree/static/script/inventree/build.js +++ b/InvenTree/InvenTree/static/script/inventree/build.js @@ -8,6 +8,8 @@ function loadBuildTable(table, options) { filters[key] = params[key]; } + setupFilterList("build", table); + table.inventreeTable({ method: 'get', formatNoMatches: function() { @@ -26,14 +28,26 @@ function loadBuildTable(table, options) { { field: 'title', title: 'Build', + sortable: true, + formatter: function(value, row, index, field) { + return renderLink(value, '/build/' + row.pk + '/'); + } }, { field: 'part', title: 'Part', + sortable: true, + formatter: function(value, row, index, field) { + + var name = row.part_detail.full_name; + + return imageHoverIcon(row.part_detail.thumbnail) + renderLink(name, '/part/' + row.part + '/'); + } }, { field: 'quantity', title: 'Quantity', + sortable: true, }, { field: 'status_text', diff --git a/InvenTree/InvenTree/static/script/inventree/filters.js b/InvenTree/InvenTree/static/script/inventree/filters.js index b543df4730..de9f987911 100644 --- a/InvenTree/InvenTree/static/script/inventree/filters.js +++ b/InvenTree/InvenTree/static/script/inventree/filters.js @@ -238,8 +238,8 @@ function setupFilterList(tableKey, table, target) { var addClicked = false; - if (!target || target.length == 0) { - target = '#filter-list-" + tableKey'; + if (target == null || target.length == 0) { + target = `#filter-list-${tableKey}`; } var tag = `filter-tag-${tableKey}`; diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index dc6e484ec0..3be81f7b59 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -11,6 +11,8 @@ from rest_framework import generics, permissions from django.conf.urls import url, include +from InvenTree.helpers import str2bool + from .models import Build, BuildItem from .serializers import BuildSerializer, BuildItemSerializer @@ -39,6 +41,17 @@ class BuildList(generics.ListCreateAPIView): 'part', ] + def get_serializer(self, *args, **kwargs): + + try: + part_detail = str2bool(self.request.GET.get('part_detail', None)) + except AttributeError: + part_detail = None + + kwargs['part_detail'] = part_detail + + return self.serializer_class(*args, **kwargs) + class BuildDetail(generics.RetrieveUpdateAPIView): """ API endpoint for detail view of a Build object """ diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 3eb3aee5be..19073d1e2d 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -10,6 +10,7 @@ from InvenTree.serializers import InvenTreeModelSerializer from stock.serializers import StockItemSerializerBrief from .models import Build, BuildItem +from part.serializers import PartBriefSerializer class BuildSerializer(InvenTreeModelSerializer): @@ -18,6 +19,16 @@ class BuildSerializer(InvenTreeModelSerializer): url = serializers.CharField(source='get_absolute_url', read_only=True) status_text = serializers.CharField(source='get_status_display', read_only=True) + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + + def __init__(self, *args, **kwargs): + part_detail = kwargs.pop('part_detail', False) + + super().__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + class Meta: model = Build fields = [ @@ -27,6 +38,7 @@ class BuildSerializer(InvenTreeModelSerializer): 'creation_date', 'completion_date', 'part', + 'part_detail', 'quantity', 'status', 'status_text', diff --git a/InvenTree/build/templates/build/build_list.html b/InvenTree/build/templates/build/build_list.html deleted file mode 100644 index 6b04ee6c8e..0000000000 --- a/InvenTree/build/templates/build/build_list.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "collapse.html" %} - -{% block collapse_title %} -{{ title }} - {{ builds | length }} -{% endblock %} - -{% block collapse_content %} -
Build | -Part | -Quantity | -Status | - {% if completed %} -Completed | - {% else %} -Created | - {% endif %} -
---|---|---|---|---|---|
{{ build.title }} | -{{ build.part.full_name }} | -{{ build.quantity }} | -{% include "build_status.html" with build=build %} - {% if completed %} - | {{ build.completion_date }}{{ build.completed_by.username }} | - {% else %} -{{ build.creation_date }} | - {% endif %} -