forked from erp-dev/erp
feat: field pre_purchase_order_id for purchase_order (allow null)
This commit is contained in:
@@ -230,6 +230,22 @@ class PurchaseOrderAPITestCase(TestCase):
|
||||
self.assertEqual(response.data['human_id'], expected_human_id)
|
||||
mock_delay.assert_not_called()
|
||||
|
||||
def test_create_purchase_order_with_pre_purchase_binding(self):
|
||||
pre_order = business_models.PrePurchaseOrder.objects.create(
|
||||
merchant=self.merchant,
|
||||
supplier=self.supplier,
|
||||
warehouse=self.warehouse_strict,
|
||||
operator=self.employee,
|
||||
created_by=self.user,
|
||||
)
|
||||
payload = {**self.strict_payload, 'from_pre_purchase_order_id': pre_order.id}
|
||||
with patch('business.services.create_purchase_order_stock_entries.delay'):
|
||||
response = self.client.post('/api/v1/purchase-orders/', payload, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
order = business_models.PurchaseOrder.objects.get(id=response.data['id'])
|
||||
self.assertEqual(order.from_pre_purchase_order_id, pre_order.id)
|
||||
|
||||
def test_bind_purchase_order_stock_change_record(self):
|
||||
MerchantSetting.objects.filter(
|
||||
merchant=self.merchant,
|
||||
@@ -321,6 +337,13 @@ class PurchaseOrderAPITestCase(TestCase):
|
||||
|
||||
def test_update_purchase_order_success(self):
|
||||
order_id = self._create_purchase_order(self.strict_payload)
|
||||
pre_order = business_models.PrePurchaseOrder.objects.create(
|
||||
merchant=self.merchant,
|
||||
supplier=self.supplier,
|
||||
warehouse=self.warehouse_relaxed,
|
||||
operator=self.employee,
|
||||
created_by=self.user,
|
||||
)
|
||||
payload = {
|
||||
'supplier': self.supplier.id,
|
||||
'warehouse': self.warehouse_relaxed.id,
|
||||
@@ -334,10 +357,13 @@ class PurchaseOrderAPITestCase(TestCase):
|
||||
}
|
||||
],
|
||||
'remarks': '更新采购单',
|
||||
'from_pre_purchase_order_id': pre_order.id,
|
||||
}
|
||||
response = self.client.put(f'/api/v1/purchase-orders/{order_id}/', payload, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data['remarks'], '更新采购单')
|
||||
updated_order = business_models.PurchaseOrder.objects.get(id=order_id)
|
||||
self.assertEqual(updated_order.from_pre_purchase_order_id, pre_order.id)
|
||||
|
||||
def test_update_purchase_order_rejects_non_pending(self):
|
||||
order_id = self._create_purchase_order(self.relaxed_payload)
|
||||
|
||||
@@ -95,6 +95,7 @@ class PurchaseOrderView(StockChangeViewMixin, views.APIView):
|
||||
order_date = data.get('order_date')
|
||||
items = data.get('items', [])
|
||||
remarks = data.get('remarks', '')
|
||||
from_pre_purchase_order_id = data.get('from_pre_purchase_order_id')
|
||||
|
||||
if not supplier_id:
|
||||
return Response({'error': '缺少供应商 ID'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -126,6 +127,7 @@ class PurchaseOrderView(StockChangeViewMixin, views.APIView):
|
||||
operator=operator,
|
||||
items=items,
|
||||
remarks=remarks,
|
||||
from_pre_purchase_order_id=from_pre_purchase_order_id,
|
||||
created_by=request.user,
|
||||
)
|
||||
except ValueError as exc:
|
||||
@@ -192,6 +194,7 @@ class PurchaseOrderDetailView(StockChangeViewMixin, views.APIView):
|
||||
if not isinstance(items, list) or not items:
|
||||
return Response({'error': 'items 需要为非空数组'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
remarks = data.get('remarks', purchase_order.remarks)
|
||||
from_pre_purchase_order_id = data.get('from_pre_purchase_order_id')
|
||||
|
||||
try:
|
||||
updated_order = business_services.update_purchase_order(
|
||||
@@ -201,6 +204,7 @@ class PurchaseOrderDetailView(StockChangeViewMixin, views.APIView):
|
||||
warehouse=warehouse,
|
||||
items=items,
|
||||
remarks=remarks,
|
||||
from_pre_purchase_order_id=from_pre_purchase_order_id,
|
||||
)
|
||||
except ValueError as exc:
|
||||
return Response({'error': str(exc)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
Reference in New Issue
Block a user