1
0
forked from erp-dev/erp

fix: added merchant_id in models of shipment module

This commit is contained in:
2026-01-14 19:43:29 +08:00
parent 8846446ecf
commit 9a367caab7
11 changed files with 558 additions and 10 deletions

View File

@@ -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):
"""