mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
Order creation fix (#8846)
* Bug fix for PurchaseOrder - Correctly record the user who created a PO - Code refactoring * Updated unit tests
This commit is contained in:
parent
94f7890a41
commit
dcf0bb103e
@ -75,6 +75,24 @@ class GeneralExtraLineList(DataExportViewMixin):
|
|||||||
filterset_fields = ['order']
|
filterset_fields = ['order']
|
||||||
|
|
||||||
|
|
||||||
|
class OrderCreateMixin:
|
||||||
|
"""Mixin class which handles order creation via API."""
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""Save user information on order creation."""
|
||||||
|
serializer = self.get_serializer(data=self.clean_data(request.data))
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
|
item = serializer.save()
|
||||||
|
item.created_by = request.user
|
||||||
|
item.save()
|
||||||
|
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(
|
||||||
|
serializer.data, status=status.HTTP_201_CREATED, headers=headers
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class OrderFilter(rest_filters.FilterSet):
|
class OrderFilter(rest_filters.FilterSet):
|
||||||
"""Base class for custom API filters for the OrderList endpoint."""
|
"""Base class for custom API filters for the OrderList endpoint."""
|
||||||
|
|
||||||
@ -266,7 +284,9 @@ class PurchaseOrderMixin:
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class PurchaseOrderList(PurchaseOrderMixin, DataExportViewMixin, ListCreateAPI):
|
class PurchaseOrderList(
|
||||||
|
PurchaseOrderMixin, OrderCreateMixin, DataExportViewMixin, ListCreateAPI
|
||||||
|
):
|
||||||
"""API endpoint for accessing a list of PurchaseOrder objects.
|
"""API endpoint for accessing a list of PurchaseOrder objects.
|
||||||
|
|
||||||
- GET: Return list of PurchaseOrder objects (with filters)
|
- GET: Return list of PurchaseOrder objects (with filters)
|
||||||
@ -728,7 +748,9 @@ class SalesOrderMixin:
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class SalesOrderList(SalesOrderMixin, DataExportViewMixin, ListCreateAPI):
|
class SalesOrderList(
|
||||||
|
SalesOrderMixin, OrderCreateMixin, DataExportViewMixin, ListCreateAPI
|
||||||
|
):
|
||||||
"""API endpoint for accessing a list of SalesOrder objects.
|
"""API endpoint for accessing a list of SalesOrder objects.
|
||||||
|
|
||||||
- GET: Return list of SalesOrder objects (with filters)
|
- GET: Return list of SalesOrder objects (with filters)
|
||||||
@ -737,20 +759,6 @@ class SalesOrderList(SalesOrderMixin, DataExportViewMixin, ListCreateAPI):
|
|||||||
|
|
||||||
filterset_class = SalesOrderFilter
|
filterset_class = SalesOrderFilter
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
|
||||||
"""Save user information on create."""
|
|
||||||
serializer = self.get_serializer(data=self.clean_data(request.data))
|
|
||||||
serializer.is_valid(raise_exception=True)
|
|
||||||
|
|
||||||
item = serializer.save()
|
|
||||||
item.created_by = request.user
|
|
||||||
item.save()
|
|
||||||
|
|
||||||
headers = self.get_success_headers(serializer.data)
|
|
||||||
return Response(
|
|
||||||
serializer.data, status=status.HTTP_201_CREATED, headers=headers
|
|
||||||
)
|
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
def filter_queryset(self, queryset):
|
||||||
"""Perform custom filtering operations on the SalesOrder queryset."""
|
"""Perform custom filtering operations on the SalesOrder queryset."""
|
||||||
queryset = super().filter_queryset(queryset)
|
queryset = super().filter_queryset(queryset)
|
||||||
@ -1345,25 +1353,13 @@ class ReturnOrderMixin:
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class ReturnOrderList(ReturnOrderMixin, DataExportViewMixin, ListCreateAPI):
|
class ReturnOrderList(
|
||||||
|
ReturnOrderMixin, OrderCreateMixin, DataExportViewMixin, ListCreateAPI
|
||||||
|
):
|
||||||
"""API endpoint for accessing a list of ReturnOrder objects."""
|
"""API endpoint for accessing a list of ReturnOrder objects."""
|
||||||
|
|
||||||
filterset_class = ReturnOrderFilter
|
filterset_class = ReturnOrderFilter
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
|
||||||
"""Save user information on create."""
|
|
||||||
serializer = self.get_serializer(data=self.clean_data(request.data))
|
|
||||||
serializer.is_valid(raise_exception=True)
|
|
||||||
|
|
||||||
item = serializer.save()
|
|
||||||
item.created_by = request.user
|
|
||||||
item.save()
|
|
||||||
|
|
||||||
headers = self.get_success_headers(serializer.data)
|
|
||||||
return Response(
|
|
||||||
serializer.data, status=status.HTTP_201_CREATED, headers=headers
|
|
||||||
)
|
|
||||||
|
|
||||||
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
|
@ -255,7 +255,10 @@ class PurchaseOrderTest(OrderTest):
|
|||||||
|
|
||||||
order = models.PurchaseOrder.objects.get(pk=response.data['pk'])
|
order = models.PurchaseOrder.objects.get(pk=response.data['pk'])
|
||||||
|
|
||||||
self.assertEqual(order.reference, 'PO-92233720368547758089999999999999999')
|
# Check that the created_by field is set correctly
|
||||||
|
self.assertEqual(order.created_by.username, 'testuser')
|
||||||
|
|
||||||
|
self.assertEqual(order.reference, huge_number)
|
||||||
self.assertEqual(order.reference_int, 0x7FFFFFFF)
|
self.assertEqual(order.reference_int, 0x7FFFFFFF)
|
||||||
|
|
||||||
def test_po_reference_wildcard_default(self):
|
def test_po_reference_wildcard_default(self):
|
||||||
@ -1407,6 +1410,11 @@ class SalesOrderTest(OrderTest):
|
|||||||
# Grab the PK for the newly created SalesOrder
|
# Grab the PK for the newly created SalesOrder
|
||||||
pk = response.data['pk']
|
pk = response.data['pk']
|
||||||
|
|
||||||
|
# Basic checks against the newly created SalesOrder
|
||||||
|
so = models.SalesOrder.objects.get(pk=pk)
|
||||||
|
self.assertEqual(so.reference, 'SO-12345')
|
||||||
|
self.assertEqual(so.created_by.username, 'testuser')
|
||||||
|
|
||||||
# Try to create a SO with identical reference (should fail)
|
# Try to create a SO with identical reference (should fail)
|
||||||
response = self.post(
|
response = self.post(
|
||||||
url,
|
url,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user