diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 061286367c..495ea2d333 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -418,9 +418,9 @@ class PurchaseOrder(Order): barcode = '' if not self.status == PurchaseOrderStatus.PLACED: - raise ValidationError({ - "status": _("Lines can only be received against an order marked as 'Placed'") - }) + raise ValidationError( + "Lines can only be received against an order marked as 'PLACED'" + ) try: if not (quantity % 1 == 0): diff --git a/InvenTree/order/test_api.py b/InvenTree/order/test_api.py index 8476a9c668..765c58cc3d 100644 --- a/InvenTree/order/test_api.py +++ b/InvenTree/order/test_api.py @@ -401,25 +401,45 @@ class PurchaseOrderReceiveTest(OrderTest): self.assertEqual(line_1.received, 0) self.assertEqual(line_2.received, 50) + valid_data = { + 'items': [ + { + 'line_item': 1, + 'quantity': 50, + 'barcode': 'MY-UNIQUE-BARCODE-123', + }, + { + 'line_item': 2, + 'quantity': 200, + 'location': 2, # Explicit location + 'barcode': 'MY-UNIQUE-BARCODE-456', + } + ], + 'location': 1, # Default location + } + + # Before posting "valid" data, we will mark the purchase order as "pending" + # In this case we do expect an error! + order = PurchaseOrder.objects.get(pk=1) + order.status = PurchaseOrderStatus.PENDING + order.save() + + response = self.post( + self.url, + valid_data, + expected_code=400 + ) + + self.assertIn('can only be received against', str(response.data)) + + # Now, set the PO back to "PLACED" so the items can be received + order.status = PurchaseOrderStatus.PLACED + order.save() + # Receive two separate line items against this order self.post( self.url, - { - 'items': [ - { - 'line_item': 1, - 'quantity': 50, - 'barcode': 'MY-UNIQUE-BARCODE-123', - }, - { - 'line_item': 2, - 'quantity': 200, - 'location': 2, # Explicit location - 'barcode': 'MY-UNIQUE-BARCODE-456', - } - ], - 'location': 1, # Default location - }, + valid_data, expected_code=201, )