diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 0510df69d2..2ae506ae94 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -5,13 +5,14 @@ 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 Part, PartCategory, BomItem from .models import SupplierPart from .serializers import PartSerializer, BomItemSerializer from .serializers import SupplierPartSerializer +from .serializers import CategorySerializer from InvenTree.views import TreeSerializer @@ -21,6 +22,36 @@ class PartCategoryTree(TreeSerializer): model = PartCategory +class CategoryList(generics.ListCreateAPIView): + queryset = PartCategory.objects.all() + serializer_class = CategorySerializer + + permission_classes = [ + permissions.IsAuthenticatedOrReadOnly, + ] + + filter_backends = [ + DjangoFilterBackend, + #filters.SearchFilter, + filters.OrderingFilter, + ] + + filter_fields = [ + 'parent', + ] + + ordering_fields = [ + 'name', + ] + + ordering = 'name' + + search_fields = [ + 'name', + 'description', + ] + + class PartList(generics.ListCreateAPIView): queryset = Part.objects.all() @@ -93,11 +124,17 @@ class SupplierPartList(generics.ListAPIView): 'supplier' ] +cat_api_urls = [ + + url(r'^$', CategoryList.as_view(), name='api-part-category-list'), +] part_api_urls = [ url(r'^tree/?', PartCategoryTree.as_view(), name='api-part-tree'), + url(r'^category/', include(cat_api_urls)), + url(r'^supplier/?', SupplierPartList.as_view(), name='api-part-supplier-list'), url(r'^bom/?', BomList.as_view(), name='api-bom-list'), url(r'^.*$', PartList.as_view(), name='api-part-list'), diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index c942d0a212..061bf06145 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -5,7 +5,7 @@ from .models import SupplierPart from company.serializers import CompanyBriefSerializer -class CategoryBriefSerializer(serializers.ModelSerializer): +class CategorySerializer(serializers.ModelSerializer): url = serializers.CharField(source='get_absolute_url', read_only=True) @@ -17,6 +17,7 @@ class CategoryBriefSerializer(serializers.ModelSerializer): 'description', 'pathstring', 'url', + 'parent', ] @@ -40,7 +41,7 @@ class PartSerializer(serializers.ModelSerializer): """ url = serializers.CharField(source='get_absolute_url', read_only=True) - category = CategoryBriefSerializer(many=False, read_only=True) + category = CategorySerializer(many=False, read_only=True) class Meta: model = Part diff --git a/InvenTree/static/script/inventree/api.js b/InvenTree/static/script/inventree/api.js index 87157bf674..6f85291403 100644 --- a/InvenTree/static/script/inventree/api.js +++ b/InvenTree/static/script/inventree/api.js @@ -16,6 +16,12 @@ function inventreeGet(url, filters={}) { }) } +// Return list of parts with optional filters function getParts(filters={}) { return inventreeGet('/api/part/', filters); +} + +// Return list of part categories with optional filters +function getPartCategories(filters={}) { + return inventreeGet('/api/part/category/', filters); } \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 971fe65f84..f777e070c0 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -210,4 +210,6 @@ getParts(); + getPartCategories({parent: 2}); + {% endblock %}