2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 20:16:44 +00:00

JSON api for stock items

This commit is contained in:
Oliver 2018-04-29 21:02:40 +10:00
parent 9cc0780367
commit f74e176579
4 changed files with 64 additions and 53 deletions

View File

@ -89,12 +89,10 @@ TEMPLATES = [
}, },
] ]
print(os.path.join(BASE_DIR, 'templates'))
REST_FRAMEWORK = { REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'InvenTree.utils.api_exception_handler', 'EXCEPTION_HANDLER': 'InvenTree.utils.api_exception_handler',
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 50, # 'PAGE_SIZE': 50,
} }
WSGI_APPLICATION = 'InvenTree.wsgi.application' WSGI_APPLICATION = 'InvenTree.wsgi.application'

View File

@ -1,9 +1,9 @@
from django_filters.rest_framework import FilterSet, DjangoFilterBackend from django_filters.rest_framework import FilterSet, DjangoFilterBackend
from django_filters import NumberFilter 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 InvenTree.models import FilterChildren
from .models import StockLocation, StockItem from .models import StockLocation, StockItem
@ -57,10 +57,26 @@ class StockList(generics.ListCreateAPIView):
""" """
queryset = StockItem.objects.all() queryset = StockItem.objects.all()
serializer_class = StockItemSerializer serializer_class = StockItemSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
filter_backends = (DjangoFilterBackend,) permission_classes = [
filter_class = StockFilter permissions.IsAuthenticatedOrReadOnly,
]
filter_backends = [
DjangoFilterBackend,
filters.SearchFilter,
filters.OrderingFilter,
]
filter_fields = [
'part',
'location',
'supplier_part',
'customer',
'status',
]
class StockStocktakeEndpoint(generics.UpdateAPIView): class StockStocktakeEndpoint(generics.UpdateAPIView):
@ -138,6 +154,22 @@ class LocationList(generics.ListCreateAPIView):
filter_class = StockLocationFilter 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 = [ stock_api_urls = [
# Detail for a single stock item
url(r'^(?P<pk>[0-9]+)/', include(stock_endpoints)),
url(r'location/(?P<pk>\d+)/', include(location_endpoints)),
url(r'^tree/?', StockCategoryTree.as_view(), name='api-stock-tree'), url(r'^tree/?', StockCategoryTree.as_view(), name='api-stock-tree'),
url(r'^.*$', StockList.as_view(), name='api-stock-list'),
] ]

View File

@ -3,32 +3,40 @@ from rest_framework import serializers
from .models import StockItem, StockLocation from .models import StockItem, StockLocation
class StockItemSerializer(serializers.HyperlinkedModelSerializer): class StockItemSerializer(serializers.ModelSerializer):
""" Serializer for a StockItem """ Serializer for a StockItem
""" """
class Meta: class Meta:
model = StockItem model = StockItem
fields = ('url', fields = [
'part', 'pk',
'supplier_part', 'url',
'location', 'part',
'quantity', 'supplier_part',
'status', 'location',
'notes', 'belongs_to',
'updated', 'customer',
'stocktake_date', 'quantity',
'stocktake_user', 'serial',
'review_needed', 'batch',
'expected_arrival') 'status',
'notes',
'updated',
'stocktake_date',
'stocktake_user',
'review_needed',
]
""" These fields are read-only in this context. """ These fields are read-only in this context.
They can be updated by accessing the appropriate API endpoints They can be updated by accessing the appropriate API endpoints
""" """
read_only_fields = ('stocktake_date', read_only_fields = [
'stocktake_user', 'stocktake_date',
'updated', 'stocktake_user',
'quantity',) 'updated',
'quantity',
]
class StockQuantitySerializer(serializers.ModelSerializer): class StockQuantitySerializer(serializers.ModelSerializer):

View File

@ -1,33 +1,6 @@
from django.conf.urls import url, include from django.conf.urls import url, include
from . import views 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<pk>[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<pk>[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 # URL list for web interface
stock_location_detail_urls = [ stock_location_detail_urls = [