From 26c7652095e951a85d55af8c52c4232e5b226c25 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 6 Jan 2025 11:02:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20handoverbw=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 3eed30e4..fc4498df 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -20,6 +20,7 @@ from django.core.cache import cache from django.utils.timezone import localdate from apps.qm.models import NotOkOption from apps.wf.serializers import TicketSimpleSerializer +from apps.wpmw.models import Wpr import logging mylogger = logging.getLogger("log") @@ -648,7 +649,7 @@ class Handoverbwserializer(CustomModelSerializer): class HandoverbSerializer(CustomModelSerializer): batch = serializers.CharField(source='wm.batch', read_only=True) notok_sign = serializers.CharField(source='wm.notok_sign', read_only=True) - handoverb = Handoverbwserializer(many=True, required=False) + handoverbw = Handoverbwserializer(many=True, required=False) class Meta: model = Handoverb fields = "__all__" @@ -744,7 +745,18 @@ class HandoverSerializer(CustomModelSerializer): with transaction.atomic(): ins = super().create(validated_data) for item in handoverb: - Handoverb.objects.get_or_create(handover=ins, wm=item["wm"], count=item["count"]) + wm = item["wm"] + count = item["count"] + 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: + for item in Wpr.get_qs_by_wm(wm): + Handoverbw.objects.get_or_create(wpr=item, handoverb=handoverb) + elif handoverbw: + raise ParseError("暂不支持") + else: + raise ParseError(f'请提供交接物料明细编号') return ins def update(self, instance, validated_data): @@ -753,10 +765,22 @@ class HandoverSerializer(CustomModelSerializer): super().update(instance, validated_data) wmIds = [] for item in handoverb: + wm = item["wm"] + count = item["count"] + handoverbw = item.pop("handoverbw", []) wmIds.append(item["wm"].id) - hb, _ = Handoverb.objects.get_or_create(handover=instance, wm=item["wm"]) - hb.count = item["count"] + hb, _ = Handoverb.objects.get_or_create(handover=instance, wm=wm) + 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): + Handoverbw.objects.get_or_create(wpr=item, handoverb=handoverb) + elif handoverbw: + raise ParseError("暂不支持") + else: + raise ParseError(f'请提供交接物料明细编号') Handoverb.objects.filter(handover=instance).exclude(wm__in=wmIds).delete() return instance