diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 393bd1f073..b987328702 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -9,10 +9,10 @@ from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters from rest_framework import generics, permissions -from django.conf.urls import url +from django.conf.urls import url, include -from .models import Build -from .serializers import BuildSerializer +from .models import Build, BuildItem +from .serializers import BuildSerializer, BuildItemSerializer class BuildList(generics.ListCreateAPIView): @@ -36,10 +36,37 @@ class BuildList(generics.ListCreateAPIView): ] filter_fields = [ - 'part', + 'build', ] -build_api_urls = [ - url(r'^.*$', BuildList.as_view(), name='api-build-list') +class BuildItemList(generics.ListCreateAPIView): + """ API endpoint for accessing a list of BuildItem objects + + - GET: Return list of objects + - POST: Create a new BuildItem object + """ + + queryset = BuildItem.objects.all() + serializer_class = BuildItemSerializer + + permission_classes = [ + permissions.IsAuthenticatedOrReadOnly, + ] + + filter_fields = [ + 'build', + 'part', + 'stock_item' + ] + + +build_item_api_urls = [ + url('^.*$', BuildItemList.as_view(), name='api-build-item-list'), +] + +build_api_urls = [ + url(r'^item/?', include(build_item_api_urls)), + + url(r'^.*$', BuildList.as_view(), name='api-build-list'), ] diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 2d2ab0e099..cd4c71422f 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -28,6 +28,9 @@ class Build(models.Model): notes: Text notes """ + def __str__(self): + return "Build {q} x {part}".format(q=self.quantity, part=str(self.part)) + def get_absolute_url(self): return reverse('build-detail', kwargs={'pk': self.id}) diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index efe4ca6b69..65fafc12ab 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -34,10 +34,13 @@ class BuildSerializer(InvenTreeModelSerializer): class BuildItemSerializer(InvenTreeModelSerializer): """ Serializes a BuildItem object """ + part = serializers.CharField(source='stock_item.part', read_only=True) + class Meta: model = BuildItem fields = [ 'build', - 'stock', + 'part', + 'stock_item', 'quantity' ] diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index ad25b4307d..4f1c871a3f 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -73,6 +73,7 @@ {% endif %} +{% if build.is_active %}

Required Parts

@@ -93,6 +94,8 @@
+{% endif %} + {% include 'modals.html' %} {% endblock %} diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 8e503c88a0..635ad9fa97 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -307,6 +307,12 @@ class Part(models.Model): def used_in_count(self): return self.used_in.count() + def required_parts(self): + parts = [] + for bom in self.bom_items.all(): + parts.append(bom.sub_part) + return parts + @property def supplier_count(self): # Return the number of supplier parts available for this part