1
0
forked from erp-dev/erp

feat: app verion && some field modify (printing & shipment)

This commit is contained in:
2026-07-08 20:36:51 +08:00
parent ddbf798665
commit 36e4bb6de6
32 changed files with 3465 additions and 26 deletions

View File

@@ -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="车次")