feat: handoverserializer 优化

This commit is contained in:
caoqianming 2025-01-13 16:12:18 +08:00
parent 0931835708
commit ced8692585
1 changed files with 22 additions and 11 deletions

View File

@ -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()