diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index 4830ecd518..b5a0f328da 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -14,6 +14,7 @@ from build.urls import build_urls from part.api import part_api_urls from company.api import company_api_urls from stock.api import stock_api_urls +from build.api import build_api_urls from django.conf import settings from django.conf.urls.static import static @@ -31,6 +32,7 @@ apipatterns = [ url(r'^part/', include(part_api_urls)), url(r'^company/', include(company_api_urls)), url(r'^stock/', include(stock_api_urls)), + url(r'^build/', include(build_api_urls)), # User URLs url(r'^user/', include(user_urls)), diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py new file mode 100644 index 0000000000..c901e4d3de --- /dev/null +++ b/InvenTree/build/api.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import filters +from rest_framework import generics, permissions + +from django.conf.urls import url, include + +from .models import Build +from .serializers import BuildSerializer + + +class BuildList(generics.ListAPIView): + + queryset = Build.objects.all() + serializer_class = BuildSerializer + + permission_classes = [ + permissions.IsAuthenticatedOrReadOnly, + ] + + filter_backends = [ + DjangoFilterBackend, + filters.SearchFilter, + filters.OrderingFilter, + ] + + filter_fields = [ + 'part', + ] + +build_api_urls = [ + url(r'^.*$', BuildList.as_view(), name='api-build-list') +] \ No newline at end of file diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py new file mode 100644 index 0000000000..f28c9fcf89 --- /dev/null +++ b/InvenTree/build/serializers.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from rest_framework import serializers + +from .models import Build + + +class BuildSerializer(serializers.ModelSerializer): + + url = serializers.CharField(source='get_absolute_url', read_only=True) + + class Meta: + model = Build + fields = [ + 'pk', + 'url', + 'title', + 'creation_date', + 'completion_date', + 'part', + 'quantity', + 'notes'] diff --git a/InvenTree/part/templates/part/build.html b/InvenTree/part/templates/part/build.html index acaa70a60c..999fe7e231 100644 --- a/InvenTree/part/templates/part/build.html +++ b/InvenTree/part/templates/part/build.html @@ -6,34 +6,13 @@

Part Builds

- - - - - - - - -{% if part.active_builds|length > 0 %} - - - -{% include "part/build_list.html" with builds=part.active_builds %} -{% endif %} - -{% if part.inactive_builds|length > 0 %} - - - - -{% include "part/build_list.html" with builds=part.inactive_builds %} -{% endif %} +
+ +
+
TitleQuantityStatusCompletion Date
Active Builds
Inactive Builds
-
- -
{% endblock %} @@ -49,4 +28,43 @@ } }); }); + + $("#build-table").bootstrapTable({ + sortable: true, + search: true, + pagination: true, + queryParams: function(p) { + return { + part: {{ part.id }}, + } + }, + columns: [ + { + field: 'pk', + title: 'ID', + visible: false, + }, + { + field: 'title', + title: 'Title', + formatter: function(value, row, index, field) { + return renderLink(value, row.url); + } + }, + { + field: 'quantity', + title: 'Quantity', + }, + { + field: 'status', + title: 'Status', + }, + { + field: 'completion_date', + title: 'Completed' + } + ], + url: "{% url 'api-build-list' %}", + }); + {% endblock %} \ No newline at end of file