forked from erp-dev/erp
fix: added merchant_id in models of shipment module
This commit is contained in:
@@ -14,12 +14,23 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
created_by_id = serializers.IntegerField(source='created_by.id', read_only=True, allow_null=True)
|
||||
created_by_name = serializers.SerializerMethodField()
|
||||
items_count = serializers.SerializerMethodField()
|
||||
cancelled_by_id = serializers.IntegerField(source='cancelled_by.id', read_only=True, allow_null=True)
|
||||
cancelled_by_name = serializers.SerializerMethodField()
|
||||
status_display = serializers.CharField(source='get_status_display', read_only=True)
|
||||
external_finished_products_count = serializers.SerializerMethodField()
|
||||
merchant_id = serializers.IntegerField(source='merchant.id', read_only=True)
|
||||
merchant_name = serializers.CharField(source='merchant.name', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Shipment
|
||||
fields = [
|
||||
'id', 'customer', 'customer_name', 'shipment_date', 'remark',
|
||||
'id', 'merchant_id', 'merchant_name',
|
||||
'customer', 'customer_name', 'shipment_date', 'remark',
|
||||
'status', 'status_display',
|
||||
'external_id',
|
||||
'cancelled_at', 'cancelled_by_id', 'cancelled_by_name',
|
||||
'items_count', 'created_by_id', 'created_by_name',
|
||||
'external_finished_products_count',
|
||||
'created_at', 'updated_at'
|
||||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at']
|
||||
@@ -35,10 +46,21 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
def get_items_count(self, obj):
|
||||
return obj.items.count()
|
||||
|
||||
def get_cancelled_by_name(self, obj):
|
||||
if obj.cancelled_by:
|
||||
employee = getattr(obj.cancelled_by, 'employee', None)
|
||||
if employee:
|
||||
return employee.name
|
||||
return obj.cancelled_by.username
|
||||
return None
|
||||
|
||||
class ShipmentCreateSerializer(serializers.Serializer):
|
||||
def get_external_finished_products_count(self, obj):
|
||||
return obj.external_finished_products.count()
|
||||
|
||||
|
||||
class ShipmentCreateNormalSerializer(serializers.Serializer):
|
||||
"""
|
||||
出货单创建序列化器
|
||||
出货单创建序列化器(普通版)
|
||||
"""
|
||||
customer = serializers.IntegerField(help_text='客户ID')
|
||||
shipment_date = serializers.DateField(help_text='出货日期')
|
||||
@@ -54,6 +76,42 @@ class ShipmentCreateSerializer(serializers.Serializer):
|
||||
# 去重
|
||||
return list(set(value)) if value else []
|
||||
|
||||
class ExternalFinishedProductInputSerializer(serializers.Serializer):
|
||||
"""外部成品表写入结构(external create 专用)"""
|
||||
style_name = serializers.CharField(max_length=200)
|
||||
num_of_rolls = serializers.IntegerField(min_value=0)
|
||||
|
||||
|
||||
class ShipmentCreateExternalSerializer(serializers.Serializer):
|
||||
"""
|
||||
出货单创建序列化器(external 版)
|
||||
|
||||
特点:
|
||||
- 不绑定任何 SalesItem
|
||||
- 必须提供 external_id
|
||||
- 同时写入 ExternalFinishedProduct 列表并关联到 Shipment
|
||||
"""
|
||||
customer = serializers.IntegerField(help_text='客户ID')
|
||||
shipment_date = serializers.DateField(help_text='出货日期')
|
||||
remark = serializers.CharField(required=False, default='', allow_blank=True, help_text='备注')
|
||||
external_id = serializers.CharField(max_length=120, help_text='外部订单号(必填)')
|
||||
external_finished_products = serializers.ListField(
|
||||
child=ExternalFinishedProductInputSerializer(),
|
||||
required=True,
|
||||
help_text='外部成品表结构数组(必填)'
|
||||
)
|
||||
|
||||
def validate_external_id(self, value):
|
||||
value = (value or '').strip()
|
||||
if not value:
|
||||
raise serializers.ValidationError('external_id 不能为空')
|
||||
return value
|
||||
|
||||
def validate_external_finished_products(self, value):
|
||||
if not value:
|
||||
raise serializers.ValidationError('external_finished_products 不能为空')
|
||||
return value
|
||||
|
||||
|
||||
class SalesItemSerializer(serializers.Serializer):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user