forked from erp-dev/erp
feat: red flush and cost
This commit is contained in:
@@ -303,7 +303,7 @@ class PrintingOrderCreateUpdateSerializer(serializers.ModelSerializer):
|
||||
'fabric_source', 'is_fabric_received', 'craft', 'description',
|
||||
'outgoing_date', 'curve', 'new_curve', 'position',
|
||||
'printing_warn', 'rolling_warn', 'production_warn', 'is_invalid',
|
||||
'process'
|
||||
'process', 'external_order_id',
|
||||
]
|
||||
read_only_fields = ['id']
|
||||
|
||||
@@ -651,6 +651,58 @@ class PlateOrderDesignCodeMixin:
|
||||
return data
|
||||
|
||||
|
||||
class PlateOrderKanbanListSerializer(serializers.ModelSerializer):
|
||||
"""开版订单看板列表序列化器(精简版,仅包含看板实际使用的字段,消除 N+1 查询)"""
|
||||
customer_name = serializers.CharField(source="customer.name", read_only=True)
|
||||
salesperson_name = serializers.CharField(source="salesperson.name", read_only=True)
|
||||
merchandiser_name = serializers.CharField(source="merchandiser.name", read_only=True)
|
||||
created_by_name = serializers.CharField(source="created_by.employee.name", read_only=True, default=None)
|
||||
process_name = serializers.CharField(source="annotated_process_name", read_only=True, default=None)
|
||||
plate_image = serializers.SerializerMethodField()
|
||||
plate_image_url = serializers.SerializerMethodField()
|
||||
last_completed_state = serializers.CharField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = models.PlateOrder
|
||||
fields = [
|
||||
'id', 'design_code', 'customer_name', 'area',
|
||||
'salesperson_name', 'merchandiser_name', 'fabric_source', 'fabric',
|
||||
'width', 'plate_type', 'plate_date', 'plate_method',
|
||||
'plate_image', 'plate_image_url', 'plate_notes', 'reprint_reason',
|
||||
'urgency_level', 'production_method', 'is_mark_frame',
|
||||
'drawing_rating', 'color_matching_rating', 'sample_rating',
|
||||
'difficulty_rating', 'style_name', 'required_sample_meters',
|
||||
'required_completion_date', 'completion_date', 'approval_result',
|
||||
'customer_feedback', 'last_completed_state', 'business_object_id',
|
||||
'original_id', 'process_name', 'print_count', 'created_at',
|
||||
'created_by_name',
|
||||
]
|
||||
|
||||
def _get_cached_plate_images(self, obj):
|
||||
cache_attr = '_cached_plate_images'
|
||||
images = getattr(obj, cache_attr, None)
|
||||
if images is None:
|
||||
images = _serialize_plate_images(
|
||||
getattr(obj, 'plate_image', None),
|
||||
self.context.get('request'),
|
||||
)
|
||||
setattr(obj, cache_attr, images)
|
||||
return images
|
||||
|
||||
def get_plate_image(self, obj):
|
||||
return self._get_cached_plate_images(obj)
|
||||
|
||||
def get_plate_image_url(self, obj):
|
||||
images = self._get_cached_plate_images(obj)
|
||||
return [entry.get('url') for entry in images if entry.get('url')]
|
||||
|
||||
def to_representation(self, instance):
|
||||
data = super().to_representation(instance)
|
||||
if not data.get('design_code') and instance.id:
|
||||
data['design_code'] = str(instance.id)
|
||||
return data
|
||||
|
||||
|
||||
class PlateOrderListSerializer(PlateOrderDesignCodeMixin, serializers.ModelSerializer):
|
||||
"""开版订单列表序列化器"""
|
||||
customer_name = serializers.CharField(source="customer.name", read_only=True)
|
||||
|
||||
Reference in New Issue
Block a user