forked from erp-dev/erp
feat: salesitem can change/soft delete
This commit is contained in:
@@ -8,6 +8,7 @@ from shipment.models import (
|
||||
ExternalFinishedProduct,
|
||||
SalesItem,
|
||||
Shipment,
|
||||
ShipmentStatus,
|
||||
ShipmentDelivery,
|
||||
ShipmentDeliveryStatus,
|
||||
)
|
||||
@@ -129,7 +130,7 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
return None
|
||||
|
||||
def get_items_count(self, obj):
|
||||
return obj.items.count()
|
||||
return obj.items.filter(delete_at__isnull=True).count()
|
||||
|
||||
def get_cancelled_by_name(self, obj):
|
||||
if obj.cancelled_by:
|
||||
@@ -156,7 +157,7 @@ class ShipmentSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
# 优先使用 prefetch 的 related manager;兜底为 none()
|
||||
rel = getattr(obj, "items", None)
|
||||
items = list(rel.all()) if rel is not None else []
|
||||
items = list(rel.filter(delete_at__isnull=True)) if rel is not None else []
|
||||
serializer_context = dict(self.context)
|
||||
serializer_context.update(_build_nested_sales_item_context(items))
|
||||
return SalesItemDetailSerializer(
|
||||
@@ -361,6 +362,13 @@ class ShipmentUpdateSerializer(serializers.Serializer):
|
||||
)
|
||||
|
||||
|
||||
class ShipmentStatusUpdateSerializer(serializers.Serializer):
|
||||
status = serializers.ChoiceField(
|
||||
choices=ShipmentStatus.choices,
|
||||
help_text="出货单状态(1=草稿(未发布), 2=已发布, 3=已取消, 4=已驳回, 5=已审核)",
|
||||
)
|
||||
|
||||
|
||||
class SalesItemSerializer(serializers.Serializer):
|
||||
"""
|
||||
销售品序列化器(只读)
|
||||
@@ -727,3 +735,34 @@ class SalesItemCreateSerializer(serializers.Serializer):
|
||||
remark=validated_data.get("remark", ""),
|
||||
position=validated_data.get("position", ""),
|
||||
)
|
||||
|
||||
|
||||
class SalesItemUpdateSerializer(serializers.Serializer):
|
||||
"""
|
||||
销售品更新序列化器。
|
||||
|
||||
当前仅开放数量、备注、货位的修改。
|
||||
"""
|
||||
|
||||
quantity = serializers.CharField(
|
||||
max_length=20,
|
||||
required=False,
|
||||
help_text="数量(可选,支持小数)",
|
||||
)
|
||||
remark = serializers.CharField(
|
||||
max_length=200,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
help_text="备注(可选)",
|
||||
)
|
||||
position = serializers.CharField(
|
||||
max_length=200,
|
||||
required=False,
|
||||
allow_blank=True,
|
||||
help_text="货位(可选)",
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
if not attrs:
|
||||
raise serializers.ValidationError("至少提供一个可修改字段")
|
||||
return attrs
|
||||
|
||||
Reference in New Issue
Block a user