From f74e17657969491b2e2cce7f2ca0b61d744682ae Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 29 Apr 2018 21:02:40 +1000 Subject: [PATCH] JSON api for stock items --- InvenTree/InvenTree/settings.py | 6 ++--- InvenTree/stock/api.py | 42 +++++++++++++++++++++++++++++---- InvenTree/stock/serializers.py | 42 ++++++++++++++++++++------------- InvenTree/stock/urls.py | 27 --------------------- 4 files changed, 64 insertions(+), 53 deletions(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index 49f81d453d..deb47901bf 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -89,12 +89,10 @@ TEMPLATES = [ }, ] -print(os.path.join(BASE_DIR, 'templates')) - REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'InvenTree.utils.api_exception_handler', - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', - 'PAGE_SIZE': 50, + # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + # 'PAGE_SIZE': 50, } WSGI_APPLICATION = 'InvenTree.wsgi.application' diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index a01366debf..f92b64fa13 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -1,9 +1,9 @@ from django_filters.rest_framework import FilterSet, DjangoFilterBackend from django_filters import NumberFilter -from rest_framework import generics, permissions, response +from rest_framework import generics, permissions, response, filters -from django.conf.urls import url +from django.conf.urls import url, include # from InvenTree.models import FilterChildren from .models import StockLocation, StockItem @@ -57,10 +57,26 @@ class StockList(generics.ListCreateAPIView): """ queryset = StockItem.objects.all() + serializer_class = StockItemSerializer - permission_classes = (permissions.IsAuthenticatedOrReadOnly,) - filter_backends = (DjangoFilterBackend,) - filter_class = StockFilter + + permission_classes = [ + permissions.IsAuthenticatedOrReadOnly, + ] + + filter_backends = [ + DjangoFilterBackend, + filters.SearchFilter, + filters.OrderingFilter, + ] + + filter_fields = [ + 'part', + 'location', + 'supplier_part', + 'customer', + 'status', + ] class StockStocktakeEndpoint(generics.UpdateAPIView): @@ -138,6 +154,22 @@ class LocationList(generics.ListCreateAPIView): filter_class = StockLocationFilter +stock_endpoints = [ + url(r'^$', StockDetail.as_view(), name='stockitem-detail'), +] + +location_endpoints = [ + url(r'^$', LocationDetail.as_view(), name='stocklocation-detail'), +] + + stock_api_urls = [ + # Detail for a single stock item + url(r'^(?P[0-9]+)/', include(stock_endpoints)), + + url(r'location/(?P\d+)/', include(location_endpoints)), + url(r'^tree/?', StockCategoryTree.as_view(), name='api-stock-tree'), + + url(r'^.*$', StockList.as_view(), name='api-stock-list'), ] \ No newline at end of file diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 423714eca2..db253d69c5 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -3,32 +3,40 @@ from rest_framework import serializers from .models import StockItem, StockLocation -class StockItemSerializer(serializers.HyperlinkedModelSerializer): +class StockItemSerializer(serializers.ModelSerializer): """ Serializer for a StockItem """ class Meta: model = StockItem - fields = ('url', - 'part', - 'supplier_part', - 'location', - 'quantity', - 'status', - 'notes', - 'updated', - 'stocktake_date', - 'stocktake_user', - 'review_needed', - 'expected_arrival') + fields = [ + 'pk', + 'url', + 'part', + 'supplier_part', + 'location', + 'belongs_to', + 'customer', + 'quantity', + 'serial', + 'batch', + 'status', + 'notes', + 'updated', + 'stocktake_date', + 'stocktake_user', + 'review_needed', + ] """ These fields are read-only in this context. They can be updated by accessing the appropriate API endpoints """ - read_only_fields = ('stocktake_date', - 'stocktake_user', - 'updated', - 'quantity',) + read_only_fields = [ + 'stocktake_date', + 'stocktake_user', + 'updated', + 'quantity', + ] class StockQuantitySerializer(serializers.ModelSerializer): diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index de398cc03d..6ca31ca967 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -1,33 +1,6 @@ from django.conf.urls import url, include from . import views -from . import api - -stock_endpoints = [ - url(r'^$', api.StockDetail.as_view(), name='stockitem-detail'), - - url(r'^stocktake/?$', api.StockStocktakeEndpoint.as_view(), name='stockitem-stocktake'), - - url(r'^add-stock/?$', api.AddStockEndpoint.as_view(), name='stockitem-add-stock'), -] - -stock_api_urls = [ - # Detail for a single stock item - url(r'^(?P[0-9]+)/', include(stock_endpoints)), - - # List all stock items, with optional filters - url(r'^\?.*/?$', api.StockList.as_view()), - url(r'^$', api.StockList.as_view()), -] - -stock_api_loc_urls = [ - url(r'^(?P[0-9]+)/?$', api.LocationDetail.as_view(), name='stocklocation-detail'), - - url(r'^\?.*/?$', api.LocationList.as_view()), - - url(r'^$', api.LocationList.as_view()) -] - # URL list for web interface stock_location_detail_urls = [