diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 07edf5c6..6f082b90 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -678,12 +678,13 @@ class Handoverbwserializer(CustomModelSerializer): class Meta: model = Handoverbw fields = '__all__' - read_only_fields = EXCLUDE_FIELDS_BASE + ["handoverb"] + read_only_fields = EXCLUDE_FIELDS_BASE + ["handoverb", "number"] extra_kwargs = {'wpr': {'required': True}} class HandoverbSerializer(CustomModelSerializer): batch = serializers.CharField(source='wm.batch', read_only=True) notok_sign = serializers.CharField(source='wm.notok_sign', read_only=True) + defect_name = serializers.CharField(source="wm.defect.name", read_only=True) handoverbw = Handoverbwserializer(many=True, required=False) class Meta: model = Handoverb @@ -785,11 +786,15 @@ class HandoverSerializer(CustomModelSerializer): handoverbw = item.pop("handoverbw", []) handoverb, _ = Handoverb.objects.get_or_create(handover=ins, wm=wm, count=count) if wm.material.tracking == Material.MA_TRACKING_SINGLE: - if count == wm.count: + if handoverbw: + handoverb.count = len(handoverbw) + handoverb.save() + for item in handoverbw: + wpr = item["wpr"] + Handoverbw.objects.get_or_create(wpr=wpr, handoverb=handoverb, defaults={"number":wpr.number, "note": item.get("note", None)}) + elif count == wm.count: for item in Wpr.get_qs_by_wm(wm): - Handoverbw.objects.get_or_create(wpr=item, handoverb=handoverb) - elif handoverbw: - Handoverbwserializer(data=handoverbw, many=True, context=self.context).save() + Handoverbw.objects.get_or_create(wpr=item, handoverb=handoverb, defaults={"number"}) else: raise ParseError(f'请提供交接物料明细编号') return ins @@ -808,14 +813,20 @@ class HandoverSerializer(CustomModelSerializer): hb.count = count hb.save() if wm.material.tracking == Material.MA_TRACKING_SINGLE: - if count == wm.count: - Handoverbw.objects.filter(handoverb=hb).delete() - for item in Wpr.get_qs_by_wm(wm): + if handoverbw: + hb.count = len(handoverbw) + hb.save() + wprIds = [item["wpr"].id for item in handoverbw] + Handoverbw.objects.filter(handoverb=hb).exclude(wpr__in=wprIds).delete() + for item in handoverbw: + wpr = item["wpr"] + Handoverbw.objects.get_or_create(wpr=wpr, handoverb=hb, defaults={"number": wpr.number, "note": item.get("note", None)}) + elif count == wm.count: + wpr_qs = Wpr.get_qs_by_wm(wm) + Handoverbw.objects.filter(handoverb=hb).exclude(wpr__in=wpr_qs).delete() + for item in wpr_qs: Handoverbw.objects.get_or_create(wpr=item, handoverb=handoverb, defaults={"number": item.number}) - elif handoverbw: - Handoverbw.objects.filter(handoverb=hb).delete() - Handoverbwserializer(data=handoverbw, many=True, context=self.context).save() else: raise ParseError(f'请提供交接物料明细编号') Handoverb.objects.filter(handover=instance).exclude(wm__in=wmIds).delete()