forked from erp-dev/erp
feat: red flush and cost
This commit is contained in:
@@ -224,8 +224,10 @@ class PurchaseOrderAPITestCase(TestCase):
|
||||
self.assertIn('id', response.data)
|
||||
self.assertIn('human_id', response.data)
|
||||
self.assertEqual(response.data['status'], 1)
|
||||
self.assertEqual(response.data['balance_before_snapshot'], Decimal('0'))
|
||||
self.assertIn('等待审批', response.data['message'])
|
||||
order = business_models.PurchaseOrder.objects.get(id=response.data['id'])
|
||||
self.assertEqual(order.balance_before_snapshot, Decimal('0'))
|
||||
expected_human_id = f"CG{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
|
||||
self.assertEqual(response.data['human_id'], expected_human_id)
|
||||
mock_delay.assert_not_called()
|
||||
@@ -499,6 +501,8 @@ class SalesOrderAPITestCase(TestCase):
|
||||
expected_human_id = f"XS{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
|
||||
self.assertEqual(response.data['human_id'], expected_human_id)
|
||||
self.assertEqual(response.data['status'], business_models.SalesOrderStatusEnum.PENDING)
|
||||
self.assertEqual(response.data['balance_before_snapshot'], Decimal('0'))
|
||||
self.assertEqual(order.balance_before_snapshot, Decimal('0'))
|
||||
mock_delay.assert_not_called()
|
||||
|
||||
def test_create_sales_order_invalid_customer(self):
|
||||
@@ -726,7 +730,9 @@ class PurchaseReturnOrderAPITestCase(TestCase):
|
||||
self.assertIn('id', response.data)
|
||||
self.assertIn('human_id', response.data)
|
||||
self.assertEqual(response.data['status'], business_models.PurchaseReturnStatusEnum.PENDING)
|
||||
self.assertEqual(response.data['balance_before_snapshot'], Decimal('0'))
|
||||
order = business_models.PurchaseReturnOrder.objects.get(id=response.data['id'])
|
||||
self.assertEqual(order.balance_before_snapshot, Decimal('0'))
|
||||
expected_human_id = f"CT{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
|
||||
self.assertEqual(response.data['human_id'], expected_human_id)
|
||||
|
||||
@@ -880,7 +886,9 @@ class SalesReturnOrderAPITestCase(TestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
self.assertIn('human_id', response.data)
|
||||
self.assertEqual(response.data['status'], business_models.SalesReturnStatusEnum.PENDING)
|
||||
self.assertEqual(response.data['balance_before_snapshot'], Decimal('0'))
|
||||
order = business_models.SalesReturnOrder.objects.get(id=response.data['id'])
|
||||
self.assertEqual(order.balance_before_snapshot, Decimal('0'))
|
||||
expected_human_id = f"XT{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
|
||||
self.assertEqual(response.data['human_id'], expected_human_id)
|
||||
|
||||
@@ -1462,6 +1470,43 @@ class BusinessRedFlushAPITestCase(TestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertTrue(response.data['is_red_flushed'])
|
||||
|
||||
def test_sales_order_red_flush_without_stock_success(self):
|
||||
order = services.create_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer=self.customer,
|
||||
order_date=datetime.date(2025, 11, 26),
|
||||
warehouse=self.warehouse,
|
||||
operator=self.employee,
|
||||
items=self._items(quantity='8', price='7'),
|
||||
)
|
||||
services.review_sales_order(
|
||||
sales_order=order,
|
||||
target_status=business_models.SalesOrderStatusEnum.APPROVED,
|
||||
reviewed_by=self.user,
|
||||
)
|
||||
|
||||
response = self.client.post(
|
||||
f'/api/v1/sales-orders/{order.id}/red-flush/',
|
||||
{'reason': '销售无库存红冲'},
|
||||
format='json',
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertTrue(response.data['is_red_flushed'])
|
||||
order.refresh_from_db()
|
||||
self.assertTrue(order.is_red_flushed)
|
||||
self.assertEqual(
|
||||
business_models.BalanceChangeRecord.objects.filter(
|
||||
source_type=business_models.BalanceChangeSourceEnum.SALES_ORDER,
|
||||
source_id=order.id,
|
||||
red_flush_id=order.red_flush_id,
|
||||
).count(),
|
||||
2,
|
||||
)
|
||||
self.assertFalse(
|
||||
stock_models.StockChangeRecord.objects.filter(red_flush_id=order.red_flush_id).exists()
|
||||
)
|
||||
|
||||
def test_purchase_return_order_red_flush_success(self):
|
||||
order = self._create_approved_purchase_return_order()
|
||||
response = self.client.post(
|
||||
|
||||
Reference in New Issue
Block a user