mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Adds skeleton for new API endpoint for completing a build order
This commit is contained in:
parent
8597ae89b6
commit
960784644f
@ -18,8 +18,7 @@ from InvenTree.filters import InvenTreeOrderingFilter
|
|||||||
from InvenTree.status_codes import BuildStatus
|
from InvenTree.status_codes import BuildStatus
|
||||||
|
|
||||||
from .models import Build, BuildItem, BuildOrderAttachment
|
from .models import Build, BuildItem, BuildOrderAttachment
|
||||||
from .serializers import BuildAttachmentSerializer, BuildCompleteSerializer, BuildSerializer, BuildItemSerializer
|
import build.serializers
|
||||||
from .serializers import BuildAllocationSerializer, BuildUnallocationSerializer
|
|
||||||
from users.models import Owner
|
from users.models import Owner
|
||||||
|
|
||||||
|
|
||||||
@ -80,7 +79,7 @@ class BuildList(generics.ListCreateAPIView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = Build.objects.all()
|
queryset = Build.objects.all()
|
||||||
serializer_class = BuildSerializer
|
serializer_class = build.serializers.BuildSerializer
|
||||||
filterset_class = BuildFilter
|
filterset_class = BuildFilter
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
@ -119,7 +118,7 @@ class BuildList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
queryset = super().get_queryset().select_related('part')
|
queryset = super().get_queryset().select_related('part')
|
||||||
|
|
||||||
queryset = BuildSerializer.annotate_queryset(queryset)
|
queryset = build.serializers.BuildSerializer.annotate_queryset(queryset)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
@ -203,7 +202,7 @@ class BuildDetail(generics.RetrieveUpdateAPIView):
|
|||||||
""" API endpoint for detail view of a Build object """
|
""" API endpoint for detail view of a Build object """
|
||||||
|
|
||||||
queryset = Build.objects.all()
|
queryset = Build.objects.all()
|
||||||
serializer_class = BuildSerializer
|
serializer_class = build.serializers.BuildSerializer
|
||||||
|
|
||||||
|
|
||||||
class BuildUnallocate(generics.CreateAPIView):
|
class BuildUnallocate(generics.CreateAPIView):
|
||||||
@ -217,7 +216,7 @@ class BuildUnallocate(generics.CreateAPIView):
|
|||||||
|
|
||||||
queryset = Build.objects.none()
|
queryset = Build.objects.none()
|
||||||
|
|
||||||
serializer_class = BuildUnallocationSerializer
|
serializer_class = build.serializers.BuildUnallocationSerializer
|
||||||
|
|
||||||
def get_serializer_context(self):
|
def get_serializer_context(self):
|
||||||
|
|
||||||
@ -233,14 +232,14 @@ class BuildUnallocate(generics.CreateAPIView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
class BuildComplete(generics.CreateAPIView):
|
class BuildOutputComplete(generics.CreateAPIView):
|
||||||
"""
|
"""
|
||||||
API endpoint for completing build outputs
|
API endpoint for completing build outputs
|
||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = Build.objects.none()
|
queryset = Build.objects.none()
|
||||||
|
|
||||||
serializer_class = BuildCompleteSerializer
|
serializer_class = build.serializers.BuildOutputCompleteSerializer
|
||||||
|
|
||||||
def get_serializer_context(self):
|
def get_serializer_context(self):
|
||||||
ctx = super().get_serializer_context()
|
ctx = super().get_serializer_context()
|
||||||
@ -255,6 +254,27 @@ class BuildComplete(generics.CreateAPIView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
|
class BuildFinish(generics.CreateAPIView):
|
||||||
|
"""
|
||||||
|
API endpoint for marking a build as finished (completed)
|
||||||
|
"""
|
||||||
|
|
||||||
|
queryset = Build.objects.none()
|
||||||
|
|
||||||
|
serializer_class = build.serializers.BuildCompleteSerializer
|
||||||
|
|
||||||
|
def get_serializer_context(self):
|
||||||
|
ctx = super().get_serializer_context()
|
||||||
|
|
||||||
|
ctx['request'] = self.request
|
||||||
|
|
||||||
|
try:
|
||||||
|
ctx['build'] = Build.objects.get(pk=self.kwargs.get('pk', None))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return ctx
|
||||||
|
|
||||||
class BuildAllocate(generics.CreateAPIView):
|
class BuildAllocate(generics.CreateAPIView):
|
||||||
"""
|
"""
|
||||||
API endpoint to allocate stock items to a build order
|
API endpoint to allocate stock items to a build order
|
||||||
@ -269,7 +289,7 @@ class BuildAllocate(generics.CreateAPIView):
|
|||||||
|
|
||||||
queryset = Build.objects.none()
|
queryset = Build.objects.none()
|
||||||
|
|
||||||
serializer_class = BuildAllocationSerializer
|
serializer_class = build.serializers.BuildAllocationSerializer
|
||||||
|
|
||||||
def get_serializer_context(self):
|
def get_serializer_context(self):
|
||||||
"""
|
"""
|
||||||
@ -294,7 +314,7 @@ class BuildItemDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = BuildItem.objects.all()
|
queryset = BuildItem.objects.all()
|
||||||
serializer_class = BuildItemSerializer
|
serializer_class = build.serializers.BuildItemSerializer
|
||||||
|
|
||||||
|
|
||||||
class BuildItemList(generics.ListCreateAPIView):
|
class BuildItemList(generics.ListCreateAPIView):
|
||||||
@ -304,7 +324,7 @@ class BuildItemList(generics.ListCreateAPIView):
|
|||||||
- POST: Create a new BuildItem object
|
- POST: Create a new BuildItem object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
serializer_class = BuildItemSerializer
|
serializer_class = build.serializers.BuildItemSerializer
|
||||||
|
|
||||||
def get_serializer(self, *args, **kwargs):
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|
||||||
@ -373,7 +393,7 @@ class BuildAttachmentList(generics.ListCreateAPIView, AttachmentMixin):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = BuildOrderAttachment.objects.all()
|
queryset = BuildOrderAttachment.objects.all()
|
||||||
serializer_class = BuildAttachmentSerializer
|
serializer_class = build.serializers.BuildAttachmentSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
DjangoFilterBackend,
|
DjangoFilterBackend,
|
||||||
@ -390,7 +410,7 @@ class BuildAttachmentDetail(generics.RetrieveUpdateDestroyAPIView, AttachmentMix
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
queryset = BuildOrderAttachment.objects.all()
|
queryset = BuildOrderAttachment.objects.all()
|
||||||
serializer_class = BuildAttachmentSerializer
|
serializer_class = build.serializers.BuildAttachmentSerializer
|
||||||
|
|
||||||
|
|
||||||
build_api_urls = [
|
build_api_urls = [
|
||||||
@ -410,7 +430,8 @@ build_api_urls = [
|
|||||||
# Build Detail
|
# Build Detail
|
||||||
url(r'^(?P<pk>\d+)/', include([
|
url(r'^(?P<pk>\d+)/', include([
|
||||||
url(r'^allocate/', BuildAllocate.as_view(), name='api-build-allocate'),
|
url(r'^allocate/', BuildAllocate.as_view(), name='api-build-allocate'),
|
||||||
url(r'^complete/', BuildComplete.as_view(), name='api-build-complete'),
|
url(r'^complete/', BuildOutputComplete.as_view(), name='api-build-output-complete'),
|
||||||
|
url(r'^finish/', BuildFinish.as_view(), name='api-build-finish'),
|
||||||
url(r'^unallocate/', BuildUnallocate.as_view(), name='api-build-unallocate'),
|
url(r'^unallocate/', BuildUnallocate.as_view(), name='api-build-unallocate'),
|
||||||
url(r'^.*$', BuildDetail.as_view(), name='api-build-detail'),
|
url(r'^.*$', BuildDetail.as_view(), name='api-build-detail'),
|
||||||
])),
|
])),
|
||||||
|
@ -165,7 +165,7 @@ class BuildOutputSerializer(serializers.Serializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class BuildCompleteSerializer(serializers.Serializer):
|
class BuildOutputCompleteSerializer(serializers.Serializer):
|
||||||
"""
|
"""
|
||||||
DRF serializer for completing one or more build outputs
|
DRF serializer for completing one or more build outputs
|
||||||
"""
|
"""
|
||||||
@ -240,6 +240,25 @@ class BuildCompleteSerializer(serializers.Serializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class BuildCompleteSerializer(serializers.Serializer):
|
||||||
|
"""
|
||||||
|
DRF serializer for marking a BuildOrder as complete
|
||||||
|
"""
|
||||||
|
|
||||||
|
accept_unallocated = serializers.BooleanField(
|
||||||
|
label=_('Accept Unallocated'),
|
||||||
|
help_text=_('Accept that stock items have not been fully allocated to this build order'),
|
||||||
|
)
|
||||||
|
|
||||||
|
accept_incomplete = serializers.BooleanField(
|
||||||
|
label=_('Accept Incomplete'),
|
||||||
|
help_text=_('Accept that the required number of build outputs have not been completed'),
|
||||||
|
)
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class BuildUnallocationSerializer(serializers.Serializer):
|
class BuildUnallocationSerializer(serializers.Serializer):
|
||||||
"""
|
"""
|
||||||
DRF serializer for unallocating stock from a BuildOrder
|
DRF serializer for unallocating stock from a BuildOrder
|
||||||
|
@ -49,7 +49,7 @@ class BuildCompleteTest(BuildAPITest):
|
|||||||
|
|
||||||
self.build = Build.objects.get(pk=1)
|
self.build = Build.objects.get(pk=1)
|
||||||
|
|
||||||
self.url = reverse('api-build-complete', kwargs={'pk': self.build.pk})
|
self.url = reverse('api-build-output-complete', kwargs={'pk': self.build.pk})
|
||||||
|
|
||||||
def test_invalid(self):
|
def test_invalid(self):
|
||||||
"""
|
"""
|
||||||
@ -58,7 +58,7 @@ class BuildCompleteTest(BuildAPITest):
|
|||||||
|
|
||||||
# Test with an invalid build ID
|
# Test with an invalid build ID
|
||||||
self.post(
|
self.post(
|
||||||
reverse('api-build-complete', kwargs={'pk': 99999}),
|
reverse('api-build-output-complete', kwargs={'pk': 99999}),
|
||||||
{},
|
{},
|
||||||
expected_code=400
|
expected_code=400
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user