mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-15 11:35:41 +00:00
Separate API views into api.py
- Web views are still in views.py - Files were getting too cluttered and hard to grok
This commit is contained in:
132
InvenTree/stock/api.py
Normal file
132
InvenTree/stock/api.py
Normal file
@ -0,0 +1,132 @@
|
||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||
from django_filters import NumberFilter
|
||||
|
||||
from rest_framework import generics, permissions, response
|
||||
|
||||
|
||||
|
||||
|
||||
# from InvenTree.models import FilterChildren
|
||||
from .models import StockLocation, StockItem
|
||||
from .serializers import StockItemSerializer, StockQuantitySerializer
|
||||
from .serializers import LocationSerializer
|
||||
|
||||
|
||||
class StockDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single StockItem object
|
||||
|
||||
post:
|
||||
Update a StockItem
|
||||
|
||||
delete:
|
||||
Remove a StockItem
|
||||
"""
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockItemSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class StockFilter(FilterSet):
|
||||
min_stock = NumberFilter(name='quantity', lookup_expr='gte')
|
||||
max_stock = NumberFilter(name='quantity', lookup_expr='lte')
|
||||
|
||||
class Meta:
|
||||
model = StockItem
|
||||
fields = ['quantity', 'part', 'location']
|
||||
|
||||
|
||||
class StockList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all StockItem objects
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new StockItem
|
||||
"""
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockItemSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = StockFilter
|
||||
|
||||
|
||||
class StockStocktakeEndpoint(generics.UpdateAPIView):
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockQuantitySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
object = self.get_object()
|
||||
object.stocktake(request.data['quantity'], request.user)
|
||||
|
||||
serializer = self.get_serializer(object)
|
||||
|
||||
return response.Response(serializer.data)
|
||||
|
||||
|
||||
class AddStockEndpoint(generics.UpdateAPIView):
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockQuantitySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
object = self.get_object()
|
||||
object.add_stock(request.data['quantity'])
|
||||
|
||||
serializer = self.get_serializer(object)
|
||||
|
||||
return response.Response(serializer.data)
|
||||
|
||||
|
||||
class LocationDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single StockLocation object
|
||||
|
||||
post:
|
||||
Update a StockLocation object
|
||||
|
||||
delete:
|
||||
Remove a StockLocation object
|
||||
|
||||
"""
|
||||
|
||||
queryset = StockLocation.objects.all()
|
||||
serializer_class = LocationSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class StockLocationFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = StockLocation
|
||||
fields = ['parent']
|
||||
|
||||
|
||||
class LocationList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all StockLocation objects
|
||||
(with optional query filter)
|
||||
|
||||
post:
|
||||
Create a new StockLocation
|
||||
|
||||
"""
|
||||
|
||||
queryset = StockLocation.objects.all()
|
||||
serializer_class = LocationSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = StockLocationFilter
|
@ -1,13 +1,14 @@
|
||||
from django.conf.urls import url, include
|
||||
|
||||
from . import views
|
||||
from . import api
|
||||
|
||||
stock_endpoints = [
|
||||
url(r'^$', views.StockDetail.as_view(), name='stockitem-detail'),
|
||||
url(r'^$', api.StockDetail.as_view(), name='stockitem-detail'),
|
||||
|
||||
url(r'^stocktake/?$', views.StockStocktakeEndpoint.as_view(), name='stockitem-stocktake'),
|
||||
url(r'^stocktake/?$', api.StockStocktakeEndpoint.as_view(), name='stockitem-stocktake'),
|
||||
|
||||
url(r'^add-stock/?$', views.AddStockEndpoint.as_view(), name='stockitem-add-stock'),
|
||||
url(r'^add-stock/?$', api.AddStockEndpoint.as_view(), name='stockitem-add-stock'),
|
||||
]
|
||||
|
||||
stock_urls = [
|
||||
@ -15,14 +16,14 @@ stock_urls = [
|
||||
url(r'^(?P<pk>[0-9]+)/', include(stock_endpoints)),
|
||||
|
||||
# List all stock items, with optional filters
|
||||
url(r'^\?.*/?$', views.StockList.as_view()),
|
||||
url(r'^$', views.StockList.as_view()),
|
||||
url(r'^\?.*/?$', api.StockList.as_view()),
|
||||
url(r'^$', api.StockList.as_view()),
|
||||
]
|
||||
|
||||
stock_loc_urls = [
|
||||
url(r'^(?P<pk>[0-9]+)/?$', views.LocationDetail.as_view(), name='stocklocation-detail'),
|
||||
url(r'^(?P<pk>[0-9]+)/?$', api.LocationDetail.as_view(), name='stocklocation-detail'),
|
||||
|
||||
url(r'^\?.*/?$', views.LocationList.as_view()),
|
||||
url(r'^\?.*/?$', api.LocationList.as_view()),
|
||||
|
||||
url(r'^$', views.LocationList.as_view())
|
||||
url(r'^$', api.LocationList.as_view())
|
||||
]
|
||||
|
@ -1,129 +0,0 @@
|
||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||
from django_filters import NumberFilter
|
||||
|
||||
from rest_framework import generics, permissions, response
|
||||
|
||||
# from InvenTree.models import FilterChildren
|
||||
from .models import StockLocation, StockItem
|
||||
from .serializers import StockItemSerializer, StockQuantitySerializer
|
||||
from .serializers import LocationSerializer
|
||||
|
||||
|
||||
class StockDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single StockItem object
|
||||
|
||||
post:
|
||||
Update a StockItem
|
||||
|
||||
delete:
|
||||
Remove a StockItem
|
||||
"""
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockItemSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class StockFilter(FilterSet):
|
||||
min_stock = NumberFilter(name='quantity', lookup_expr='gte')
|
||||
max_stock = NumberFilter(name='quantity', lookup_expr='lte')
|
||||
|
||||
class Meta:
|
||||
model = StockItem
|
||||
fields = ['quantity', 'part', 'location']
|
||||
|
||||
|
||||
class StockList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all StockItem objects
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new StockItem
|
||||
"""
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockItemSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = StockFilter
|
||||
|
||||
|
||||
class StockStocktakeEndpoint(generics.UpdateAPIView):
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockQuantitySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
object = self.get_object()
|
||||
object.stocktake(request.data['quantity'], request.user)
|
||||
|
||||
serializer = self.get_serializer(object)
|
||||
|
||||
return response.Response(serializer.data)
|
||||
|
||||
|
||||
class AddStockEndpoint(generics.UpdateAPIView):
|
||||
|
||||
queryset = StockItem.objects.all()
|
||||
serializer_class = StockQuantitySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
object = self.get_object()
|
||||
object.add_stock(request.data['quantity'])
|
||||
|
||||
serializer = self.get_serializer(object)
|
||||
|
||||
return response.Response(serializer.data)
|
||||
|
||||
|
||||
class LocationDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a single StockLocation object
|
||||
|
||||
post:
|
||||
Update a StockLocation object
|
||||
|
||||
delete:
|
||||
Remove a StockLocation object
|
||||
|
||||
"""
|
||||
|
||||
queryset = StockLocation.objects.all()
|
||||
serializer_class = LocationSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class StockLocationFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = StockLocation
|
||||
fields = ['parent']
|
||||
|
||||
|
||||
class LocationList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all StockLocation objects
|
||||
(with optional query filter)
|
||||
|
||||
post:
|
||||
Create a new StockLocation
|
||||
|
||||
"""
|
||||
|
||||
queryset = StockLocation.objects.all()
|
||||
serializer_class = LocationSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = StockLocationFilter
|
||||
|
Reference in New Issue
Block a user