1
0
forked from erp-dev/erp

feat: added migrate for set id init value into 8000 of plate_order

This commit is contained in:
2025-11-20 13:01:44 +08:00
parent ad0b6a84d2
commit 6091280fdc
12 changed files with 931 additions and 606 deletions

View File

@@ -200,7 +200,24 @@ class PrintingJobCreateUpdateSerializer(serializers.ModelSerializer):
return updated_instance
class PlateOrderListSerializer(serializers.ModelSerializer):
class PlateOrderDesignCodeMixin:
"""确保 design_code 为空时使用主键补全"""
@staticmethod
def _normalize_design_code(design_code: str | None, instance_id: int | None) -> str | None:
if design_code:
return design_code
if instance_id:
return str(instance_id)
return design_code
def to_representation(self, instance):
data = super().to_representation(instance)
data['design_code'] = self._normalize_design_code(data.get('design_code'), instance.id)
return data
class PlateOrderListSerializer(PlateOrderDesignCodeMixin, serializers.ModelSerializer):
"""开版订单列表序列化器"""
customer_name = serializers.CharField(source="customer.name", read_only=True)
salesperson_name = serializers.CharField(source="salesperson.name", read_only=True)
@@ -217,9 +234,9 @@ class PlateOrderListSerializer(serializers.ModelSerializer):
'customer', 'customer_name', 'area',
'salesperson', 'salesperson_name',
'merchandiser', 'merchandiser_name',
'style_name', 'fabric', 'width',
'style_name', 'fabric', 'fabric_source', 'width',
'required_completion_date', 'completion_date',
'is_ordered', 'process', 'process_name',
'is_ordered', 'process', 'process_name', 'business_object_id',
'status', 'progress_percentage',
'created_at', 'updated_at'
]
@@ -240,7 +257,7 @@ class PlateOrderListSerializer(serializers.ModelSerializer):
return None
class PlateOrderDetailSerializer(serializers.ModelSerializer):
class PlateOrderDetailSerializer(PlateOrderDesignCodeMixin, serializers.ModelSerializer):
"""开版订单详情序列化器"""
customer_name = serializers.CharField(source="customer.name", read_only=True)
customer_phone = serializers.CharField(source="customer.mobile", read_only=True)
@@ -264,7 +281,7 @@ class PlateOrderDetailSerializer(serializers.ModelSerializer):
'customer', 'customer_name', 'customer_phone', 'area', 'default_address',
'salesperson', 'salesperson_name',
'merchandiser', 'merchandiser_name',
'style_name', 'fabric', 'width', 'production_method',
'style_name', 'fabric', 'fabric_source', 'width', 'production_method',
'is_mark_frame', 'drawing_rating', 'color_matching_rating',
'sample_rating', 'difficulty_rating',
'sample_meter', 'required_sample_meters',
@@ -317,7 +334,7 @@ class PlateOrderCreateUpdateSerializer(serializers.ModelSerializer):
"urgency_level", "is_invalid",
"customer", "area", "default_address",
"salesperson", "merchandiser",
"style_name", "fabric", "width", "production_method",
"style_name", "fabric", "fabric_source", "width", "production_method",
"is_mark_frame", "drawing_rating", "color_matching_rating",
"sample_rating", "difficulty_rating",
"sample_meter", "required_sample_meters",

View File

@@ -188,6 +188,49 @@ class PlateOrderAPITestCase(TestCase):
self.assertIn('customer_name', response.data)
self.assertIn('salesperson_name', response.data)
def test_design_code_fallback_in_detail(self):
"""design_code 为空时返回补零后的主键"""
plate_order = printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='',
plate_type='圆网',
style_name='测试款式',
fabric='棉布',
)
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['design_code'], f'{plate_order.id:06d}')
def test_design_code_fallback_in_list(self):
"""列表接口也应返回补零后的设计编号"""
printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='',
plate_type='圆网',
style_name='款式1',
fabric='棉布',
)
response = self.client.get('/api/v1/plate-orders/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
results = response.data['results'] if isinstance(response.data, dict) else response.data
self.assertEqual(results[0]['design_code'], f"{results[0]['id']:06d}")
def test_fabric_source_field_in_detail(self):
"""验证布料来源字段在返回中存在"""
plate_order = printing_models.PlateOrder.objects.create(
customer=self.customer,
design_code='DESIGN010',
plate_type='圆网',
fabric='棉布',
fabric_source='客户提供',
)
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['fabric_source'], '客户提供')
def test_update_plate_order(self):
"""测试更新开版订单"""
plate_order = printing_models.PlateOrder.objects.create(