From 36ec5e41b0c4f2abd93a2f4d5503d63c1f076514 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 13 Sep 2019 20:52:25 +1000 Subject: [PATCH] Cleanup --- InvenTree/company/fixtures/supplier_part.yaml | 9 ++++++++- InvenTree/order/fixtures/order.yaml | 8 ++++++++ InvenTree/order/test_views.py | 17 ++++++++++++++++- InvenTree/order/tests.py | 4 ++-- InvenTree/order/views.py | 6 ++++++ 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/InvenTree/company/fixtures/supplier_part.yaml b/InvenTree/company/fixtures/supplier_part.yaml index b9649704e1..446339d58b 100644 --- a/InvenTree/company/fixtures/supplier_part.yaml +++ b/InvenTree/company/fixtures/supplier_part.yaml @@ -15,6 +15,13 @@ supplier: 1 SKU: 'ACME0002' +- model: company.supplierpart + pk: 3 + fields: + part: 1 + supplier: 1 + SKU: 'ACME0003' + # Widget purchaseable from ACME - model: company.supplierpart pk: 100 @@ -33,7 +40,7 @@ # M2x4 LPHS from Zerg Corp - model: company.supplierpart - pk: 3 + pk: 7 fields: part: 1 supplier: 3 diff --git a/InvenTree/order/fixtures/order.yaml b/InvenTree/order/fixtures/order.yaml index 6fab8a705d..0ba4bdbeb5 100644 --- a/InvenTree/order/fixtures/order.yaml +++ b/InvenTree/order/fixtures/order.yaml @@ -35,8 +35,16 @@ quantity: 250 received: 50 +# 1000 x ACME0003 +- model: order.purchaseorderlineitem + fields: + order: 1 + part: 3 + quantity: 1000 + # 100 x ZERGLPHS (M2x4 LPHS) - model: order.purchaseorderlineitem + pk: 22 fields: order: 2 part: 3 diff --git a/InvenTree/order/test_views.py b/InvenTree/order/test_views.py index 9b8eccae54..9ef3c80276 100644 --- a/InvenTree/order/test_views.py +++ b/InvenTree/order/test_views.py @@ -137,7 +137,7 @@ class POTests(OrderViewTestCase): # POST with a part that does not match the purchase order post_data['order'] = 1 - post_data['part'] = 3 + post_data['part'] = 7 response = self.client.post(url, post_data, HTTP_X_REQUESTED_WITH='XMLHttpRequest') data = json.loads(response.content) self.assertFalse(data['form_valid']) @@ -169,3 +169,18 @@ class POTests(OrderViewTestCase): response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 200) + + +class TestPOReceive(OrderViewTestCase): + """ Tests for receiving a purchase order """ + + def setUp(self): + super().setUp() + + self.po = PurchaseOrder.objects.get(pk=1) + self.url = reverse('purchase-order-receive', args=(1,)) + + def test_receive_lines(self): + + # TODO + pass diff --git a/InvenTree/order/tests.py b/InvenTree/order/tests.py index 3a773ad0e9..814cea2be9 100644 --- a/InvenTree/order/tests.py +++ b/InvenTree/order/tests.py @@ -101,7 +101,7 @@ class OrderTest(TestCase): loc = StockLocation.objects.get(id=1) # There should be two lines against this order - self.assertEqual(len(order.pending_line_items()), 2) + self.assertEqual(len(order.pending_line_items()), 3) # Should fail, as order is 'PENDING' not 'PLACED" self.assertEqual(order.status, OrderStatus.PENDING) @@ -117,7 +117,7 @@ class OrderTest(TestCase): self.assertEqual(line.remaining(), 50) - self.assertEqual(part.on_order, 350) + self.assertEqual(part.on_order, 1350) # Try to order some invalid things with self.assertRaises(django_exceptions.ValidationError): diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index 0328093cdd..fafd313022 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -243,6 +243,11 @@ class PurchaseOrderReceive(AjaxView): except (PurchaseOrderLineItem.DoesNotExist, ValueError): continue + # Check that line matches the order + if not line.order == self.order: + # TODO - Display a non-field error? + continue + # Ignore a part that doesn't map to a SupplierPart try: if line.part is None: @@ -277,6 +282,7 @@ class PurchaseOrderReceive(AjaxView): return self.renderJsonResponse(request, data=data) + @transaction.atomic def receive_parts(self): """ Called once the form has been validated. Create new stockitems against received parts.