| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from rest_framework import serializers
- from .models import CountReason, CountTask, CountTaskDetail
- class CountReasonSerializer(serializers.ModelSerializer):
- class Meta:
- model = CountReason
- fields = "__all__"
- read_only_fields = ("id", "create_time", "update_time")
- class CountTaskDetailSerializer(serializers.ModelSerializer):
- reason = CountReasonSerializer(read_only=True)
- reason_id = serializers.PrimaryKeyRelatedField(
- queryset=CountReason.objects.all(),
- source="reason",
- required=False,
- allow_null=True,
- write_only=True,
- )
- class Meta:
- model = CountTaskDetail
- fields = (
- "id",
- "task",
- "container",
- "container_code",
- "location_code",
- "goods_code",
- "goods_desc",
- "goods_std",
- "goods_unit",
- "batch_number",
- "book_qty",
- "initial_count_qty",
- "recount_qty",
- "final_qty",
- "variance_qty",
- "reason",
- "reason_id",
- "counter_name",
- "recount_counter",
- "note",
- "status",
- "create_time",
- "update_time",
- )
- read_only_fields = (
- "id",
- "final_qty",
- "variance_qty",
- "status",
- "create_time",
- "update_time",
- )
- class CountTaskSerializer(serializers.ModelSerializer):
- details = CountTaskDetailSerializer(many=True, read_only=True)
- class Meta:
- model = CountTask
- fields = (
- "id",
- "doc_no",
- "task_type",
- "status",
- "source_batch",
- "remark",
- "scheduled_at",
- "created_by",
- "total_details",
- "counted_details",
- "variance_details",
- "create_time",
- "update_time",
- "details",
- )
- read_only_fields = (
- "id",
- "doc_no",
- "status",
- "total_details",
- "counted_details",
- "variance_details",
- "create_time",
- "update_time",
- )
- class TaskGenerateDetailSerializer(serializers.Serializer):
- container_ids = serializers.ListField(
- child=serializers.IntegerField(min_value=1), allow_empty=False, required=False
- )
- batch_ids = serializers.ListField(
- child=serializers.IntegerField(min_value=1), allow_empty=False, required=False
- )
- override = serializers.BooleanField(default=False)
- def validate(self, attrs):
- container_ids = attrs.get("container_ids") or []
- batch_ids = attrs.get("batch_ids") or []
- if not container_ids and not batch_ids:
- raise serializers.ValidationError("请至少选择托盘或批次")
- return attrs
- class CountDetailSubmitSerializer(serializers.Serializer):
- ROUND_INITIAL = "initial"
- ROUND_RECOUNT = "recount"
- round_type = serializers.ChoiceField(
- choices=((ROUND_INITIAL, "初盘"), (ROUND_RECOUNT, "复盘")), default=ROUND_INITIAL
- )
- qty = serializers.DecimalField(max_digits=14, decimal_places=3)
- reason_id = serializers.PrimaryKeyRelatedField(
- queryset=CountReason.objects.all(), allow_null=True, required=False
- )
- counter_name = serializers.CharField(required=False, allow_blank=True)
- note = serializers.CharField(required=False, allow_blank=True)
|