1
0
forked from erp-dev/erp

feat: all the business models supported human_id now but it wont change statements api. Added new field 'order_quantity' into sales_order model (integer, allow null).

This commit is contained in:
2026-01-30 19:31:02 +08:00
parent cebaf85f6f
commit b7178f72b2
9 changed files with 127 additions and 5 deletions

View File

@@ -220,8 +220,12 @@ class PurchaseOrderAPITestCase(TestCase):
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertIn('id', response.data)
self.assertIn('human_id', response.data)
self.assertEqual(response.data['status'], 1)
self.assertIn('等待审批', response.data['message'])
order = business_models.PurchaseOrder.objects.get(id=response.data['id'])
expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
self.assertEqual(response.data['human_id'], expected_human_id)
mock_delay.assert_not_called()
def test_create_purchase_order_invalid_supplier(self):
@@ -239,7 +243,11 @@ class PurchaseOrderAPITestCase(TestCase):
with patch('business.services.create_purchase_order_stock_entries.delay') as mock_delay:
response = self.client.post('/api/v1/purchase-orders/', self.relaxed_payload, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertIn('human_id', response.data)
self.assertEqual(response.data['status'], 1)
order = business_models.PurchaseOrder.objects.get(id=response.data['id'])
expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
self.assertEqual(response.data['human_id'], expected_human_id)
mock_delay.assert_not_called()
def test_mode_mismatch_raises(self):
@@ -652,7 +660,11 @@ class PurchaseReturnOrderAPITestCase(TestCase):
response = self.client.post('/api/v1/purchase-return-orders/', self.strict_payload, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertIn('id', response.data)
self.assertIn('human_id', response.data)
self.assertEqual(response.data['status'], business_models.PurchaseReturnStatusEnum.PENDING)
order = business_models.PurchaseReturnOrder.objects.get(id=response.data['id'])
expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
self.assertEqual(response.data['human_id'], expected_human_id)
def test_create_purchase_return_requires_consume_ids_in_strict_out(self):
payload = copy.deepcopy(self.strict_out_payload)
@@ -802,7 +814,11 @@ class SalesReturnOrderAPITestCase(TestCase):
def test_create_sales_return_order_success(self):
response = self.client.post('/api/v1/sales-return-orders/', self.strict_payload, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertIn('human_id', response.data)
self.assertEqual(response.data['status'], business_models.SalesReturnStatusEnum.PENDING)
order = business_models.SalesReturnOrder.objects.get(id=response.data['id'])
expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}"
self.assertEqual(response.data['human_id'], expected_human_id)
def test_create_sales_return_order_invalid_customer(self):
payload = {**self.strict_payload, 'customer': 999}

View File

@@ -28,6 +28,7 @@ class PurchaseOrderSerializer(serializers.ModelSerializer):
diff_quantity = serializers.SerializerMethodField(read_only=True)
total_quantity = serializers.SerializerMethodField(read_only=True)
quantity_of_rolls = serializers.SerializerMethodField(read_only=True)
human_id = serializers.CharField(read_only=True)
def get_total_amount(self, obj: business_models.PurchaseOrder):
return obj.get_total_amount()
@@ -49,7 +50,7 @@ class PurchaseOrderSerializer(serializers.ModelSerializer):
class Meta:
model = business_models.PurchaseOrder
fields = [
'id', 'supplier', 'supplier_name', 'purchase_date', 'kind',
'id', 'human_id', 'supplier', 'supplier_name', 'purchase_date', 'kind',
'total_amount', 'diff_quantity', 'total_quantity',
'operator', 'operator_name', 'warehouse', 'warehouse_name',
'status', 'remarks', 'created_at', 'updated_at', 'items',
@@ -133,6 +134,7 @@ class PurchaseOrderView(StockChangeViewMixin, views.APIView):
return Response(
{
'id': purchase_order.id,
'human_id': purchase_order.human_id,
'status': purchase_order.status,
'message': '采购单创建成功,等待审批',
},

View File

@@ -33,6 +33,7 @@ class PurchaseReturnOrderSerializer(serializers.ModelSerializer):
diff_quantity = serializers.SerializerMethodField(read_only=True)
total_quantity = serializers.SerializerMethodField(read_only=True)
quantity_of_rolls = serializers.SerializerMethodField(read_only=True)
human_id = serializers.CharField(read_only=True)
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
operator_name = serializers.CharField(source='operator.name', read_only=True)
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
@@ -53,7 +54,7 @@ class PurchaseReturnOrderSerializer(serializers.ModelSerializer):
class Meta:
model = business_models.PurchaseReturnOrder
fields = [
'id', 'supplier', 'supplier_name', 'purchase_order', 'return_date',
'id', 'human_id', 'supplier', 'supplier_name', 'purchase_order', 'return_date',
'total_amount', 'diff_quantity', 'total_quantity',
'operator', 'operator_name', 'warehouse', 'warehouse_name',
'status', 'remarks', 'created_at', 'updated_at', 'items',
@@ -140,6 +141,7 @@ class PurchaseReturnOrderView(StockChangeViewMixin, views.APIView):
return Response(
{
'id': purchase_return.id,
'human_id': purchase_return.human_id,
'status': purchase_return.status,
'message': '采购退货单创建成功,等待审批',
},

View File

@@ -53,7 +53,7 @@ class SalesOrderSerializer(serializers.ModelSerializer):
'id', 'human_id', 'customer', 'customer_name', 'sales_date', 'kind',
'total_amount', 'diff_quantity', 'total_quantity',
'operator', 'operator_name', 'warehouse', 'warehouse_name',
'status', 'remarks', 'created_at', 'updated_at', 'items',
'status', 'order_quantity', 'remarks', 'created_at', 'updated_at', 'items',
'quantity_of_rolls',
]
read_only_fields = ['id', 'created_at', 'updated_at', 'items', 'customer_name', 'operator_name', 'warehouse_name']

View File

@@ -32,6 +32,7 @@ class SalesReturnOrderSerializer(serializers.ModelSerializer):
diff_quantity = serializers.SerializerMethodField(read_only=True)
total_quantity = serializers.SerializerMethodField(read_only=True)
quantity_of_rolls = serializers.SerializerMethodField(read_only=True)
human_id = serializers.CharField(read_only=True)
customer_name = serializers.CharField(source='customer.name', read_only=True)
operator_name = serializers.CharField(source='operator.name', read_only=True)
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
@@ -52,7 +53,7 @@ class SalesReturnOrderSerializer(serializers.ModelSerializer):
class Meta:
model = business_models.SalesReturnOrder
fields = [
'id', 'customer', 'customer_name', 'sales_order', 'return_date',
'id', 'human_id', 'customer', 'customer_name', 'sales_order', 'return_date',
'total_amount', 'diff_quantity', 'total_quantity', 'quantity_of_rolls',
'operator', 'operator_name', 'warehouse', 'warehouse_name',
'status', 'remarks', 'created_at', 'updated_at', 'items',
@@ -138,6 +139,7 @@ class SalesReturnOrderView(StockChangeViewMixin, views.APIView):
return Response(
{
'id': sales_return.id,
'human_id': sales_return.human_id,
'status': sales_return.status,
'message': '销售退货单创建成功,等待审批',
},