forked from erp-dev/erp
feat: app verion && some field modify (printing & shipment)
This commit is contained in:
@@ -111,6 +111,9 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
|
||||
customer_name = serializers.CharField(source="customer.name", read_only=True)
|
||||
address_id = serializers.IntegerField(
|
||||
source="customer_address.id", read_only=True, allow_null=True
|
||||
)
|
||||
created_by_id = serializers.IntegerField(
|
||||
source="created_by.id", read_only=True, allow_null=True
|
||||
)
|
||||
@@ -142,6 +145,7 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
"merchant_name",
|
||||
"customer",
|
||||
"customer_name",
|
||||
"address_id",
|
||||
"fabric",
|
||||
"order_description",
|
||||
"shipment_date",
|
||||
@@ -149,11 +153,13 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
"contact_name",
|
||||
"contact_phone",
|
||||
"area",
|
||||
"coordinates",
|
||||
"remark",
|
||||
"status",
|
||||
"status_display",
|
||||
"external_id",
|
||||
"geo_coordinates",
|
||||
"extra",
|
||||
"delivery_id",
|
||||
"status_modified_at",
|
||||
"cancelled_by_id",
|
||||
@@ -277,6 +283,12 @@ class ShipmentCreateNormalSerializer(serializers.Serializer):
|
||||
allow_blank=True,
|
||||
help_text="地址(可选)",
|
||||
)
|
||||
address_id = serializers.IntegerField(
|
||||
required=False,
|
||||
allow_null=True,
|
||||
min_value=1,
|
||||
help_text="客户地址ID(可选)",
|
||||
)
|
||||
contact_name = serializers.CharField(
|
||||
max_length=100,
|
||||
required=False,
|
||||
@@ -292,15 +304,35 @@ class ShipmentCreateNormalSerializer(serializers.Serializer):
|
||||
help_text="联系电话(可选)",
|
||||
)
|
||||
area = serializers.CharField(
|
||||
max_length=30,
|
||||
max_length=100,
|
||||
required=False,
|
||||
default="",
|
||||
allow_blank=True,
|
||||
help_text="出货地区(可选)",
|
||||
)
|
||||
coordinates = serializers.CharField(
|
||||
max_length=100,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
allow_null=True,
|
||||
default=None,
|
||||
help_text="经纬度字符串(可选)",
|
||||
)
|
||||
extra = serializers.JSONField(
|
||||
required=False,
|
||||
allow_null=True,
|
||||
default=None,
|
||||
help_text="扩展信息(可选)",
|
||||
)
|
||||
remark = serializers.CharField(
|
||||
required=False, default="", allow_blank=True, help_text="备注"
|
||||
)
|
||||
status = serializers.ChoiceField(
|
||||
choices=ShipmentStatus.choices,
|
||||
required=False,
|
||||
default=ShipmentStatus.DRAFT,
|
||||
help_text="出货单状态(可选,默认 1=草稿)",
|
||||
)
|
||||
sales_items = serializers.ListField(
|
||||
child=serializers.IntegerField(),
|
||||
required=False,
|
||||
@@ -357,12 +389,26 @@ class ShipmentCreateExternalSerializer(serializers.Serializer):
|
||||
help_text="联系电话(可选)",
|
||||
)
|
||||
area = serializers.CharField(
|
||||
max_length=30,
|
||||
max_length=100,
|
||||
required=False,
|
||||
default="",
|
||||
allow_blank=True,
|
||||
help_text="出货地区(可选)",
|
||||
)
|
||||
coordinates = serializers.CharField(
|
||||
max_length=100,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
allow_null=True,
|
||||
default=None,
|
||||
help_text="经纬度字符串(可选)",
|
||||
)
|
||||
extra = serializers.JSONField(
|
||||
required=False,
|
||||
allow_null=True,
|
||||
default=None,
|
||||
help_text="扩展信息(可选)",
|
||||
)
|
||||
remark = serializers.CharField(
|
||||
required=False, default="", allow_blank=True, help_text="备注"
|
||||
)
|
||||
@@ -404,7 +450,19 @@ class ShipmentUpdateSerializer(serializers.Serializer):
|
||||
max_length=50, required=False, allow_blank=True, help_text="联系电话(可选)"
|
||||
)
|
||||
area = serializers.CharField(
|
||||
max_length=30, required=False, allow_blank=True, help_text="出货地区(可选)"
|
||||
max_length=100, required=False, allow_blank=True, help_text="出货地区(可选)"
|
||||
)
|
||||
coordinates = serializers.CharField(
|
||||
max_length=100,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
allow_null=True,
|
||||
help_text="经纬度字符串(可选)",
|
||||
)
|
||||
extra = serializers.JSONField(
|
||||
required=False,
|
||||
allow_null=True,
|
||||
help_text="扩展信息(可选)",
|
||||
)
|
||||
remark = serializers.CharField(
|
||||
required=False, allow_blank=True, help_text="备注(可选)"
|
||||
@@ -650,6 +708,74 @@ class ShipmentDeliverySerializer(serializers.ModelSerializer):
|
||||
).data
|
||||
|
||||
|
||||
class ShipmentDeliveryByPrintingOrderSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
按生产订单查询送货单的专用 DTO。
|
||||
|
||||
当前字段基本对齐送货单列表,后续可按该查询场景独立调整。
|
||||
"""
|
||||
|
||||
status_display = serializers.CharField(source="get_status_display", read_only=True)
|
||||
merchant_id = serializers.IntegerField(source="merchant.id", read_only=True)
|
||||
merchant_name = serializers.CharField(source="merchant.name", read_only=True)
|
||||
created_by_id = serializers.IntegerField(
|
||||
source="created_by.id", read_only=True, allow_null=True
|
||||
)
|
||||
created_by_name = serializers.SerializerMethodField()
|
||||
operator_id = serializers.IntegerField(
|
||||
source="operator.id", read_only=True, allow_null=True
|
||||
)
|
||||
operator_name = serializers.CharField(source="operator.name", read_only=True, allow_null=True)
|
||||
shipments_count = serializers.SerializerMethodField()
|
||||
shipments = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = ShipmentDelivery
|
||||
fields = [
|
||||
"id",
|
||||
"merchant_id",
|
||||
"merchant_name",
|
||||
"driver_name",
|
||||
"vehicle_trip",
|
||||
"contact_phone",
|
||||
"vehicle_capacity",
|
||||
"remark",
|
||||
"internal_remark",
|
||||
"shipment_order_ids",
|
||||
"status",
|
||||
"status_display",
|
||||
"started_at",
|
||||
"delivered_at",
|
||||
"cancelled_at",
|
||||
"shipments_count",
|
||||
"shipments",
|
||||
"created_by_id",
|
||||
"created_by_name",
|
||||
"operator_id",
|
||||
"operator_name",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
def get_created_by_name(self, obj):
|
||||
if obj.created_by:
|
||||
employee = getattr(obj.created_by, "employee", None)
|
||||
if employee:
|
||||
return employee.name
|
||||
return obj.created_by.username
|
||||
return None
|
||||
|
||||
def get_shipments_count(self, obj):
|
||||
return obj.shipments.count()
|
||||
|
||||
def get_shipments(self, obj):
|
||||
return ShipmentDeliveryShipmentSummarySerializer(
|
||||
obj.shipments.order_by("id"),
|
||||
many=True,
|
||||
).data
|
||||
|
||||
|
||||
class ShipmentDeliveryCreateSerializer(serializers.Serializer):
|
||||
driver_name = serializers.CharField(max_length=100, help_text="司机名")
|
||||
vehicle_trip = serializers.CharField(max_length=100, help_text="车次")
|
||||
|
||||
Reference in New Issue
Block a user