diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 3ff30245..e550f3f5 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -707,45 +707,45 @@ class MlogbOutUpdateSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS_BASE + ['mlog', 'mtask', 'wm_in', 'material_in', 'material_out', 'count_use', 'count_break', 'count_pn_jgqbl', 'mlogbdefect', "qct"] - def create(self, validated_data): - material_out:Material = validated_data["material_out"] - mlogbdefect = validated_data.pop("mlogbdefect", []) - with transaction.atomic(): - ins = super().create(validated_data) - if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH: - count_notok = 0 - mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0] - for item in mlogbdefect_new: - defect:Defect = item["defect"] - MlogbDefect.objects.create(mlogb=ins, **item) - if defect.cate == Defect.DEFECT_NOTOK: - count_notok +=1 - ins.count_notok = count_notok - ins.count_ok = ins.count_real - ins.count_notok - ins.save() - else: - raise ParseError("mlogbdefect仅支持批次件") - return ins + # def create(self, validated_data): + # material_out:Material = validated_data["material_out"] + # mlogbdefect = validated_data.pop("mlogbdefect", []) + # with transaction.atomic(): + # ins = super().create(validated_data) + # if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH: + # count_notok = 0 + # mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0] + # for item in mlogbdefect_new: + # defect:Defect = item["defect"] + # MlogbDefect.objects.create(mlogb=ins, **item) + # if defect.cate == Defect.DEFECT_NOTOK: + # count_notok +=1 + # ins.count_notok = count_notok + # ins.count_ok = ins.count_real - ins.count_notok + # ins.save() + # else: + # raise ParseError("mlogbdefect仅支持批次件") + # return ins def update(self, instance, validated_data): - material_out:Material = instance.material_out mlogbdefect = validated_data.pop("mlogbdefect", []) with transaction.atomic(): ins:Mlogb = super().update(instance, validated_data) - if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH: + if (instance.qct or mlogbdefect) and instance.material_out.tracking == Material.MA_TRACKING_BATCH: count_notok = 0 md_ids = [] for item in mlogbdefect: - defect = item["defect"] - insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None)) - insb.count = item["count"] - insb.save(update_fields=["count"]) - if defect.cate == Defect.DEFECT_NOTOK: - count_notok +=1 + defect:Defect = item["defect"] + if item["count"] > 0: + insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None)) + insb.count = item["count"] + insb.save(update_fields=["count"]) + if defect.okcate == Defect.DEFECT_NOTOK: + count_notok += item["count"] md_ids.append(insb.id) - Mlogbw.objects.filter(mlogb=ins).exclude(id__in=md_ids).delete() + MlogbDefect.objects.filter(mlogb=ins).exclude(id__in=md_ids).delete() ins.count_notok = count_notok - ins.count_ok = ins.count_real + ins.count_ok = ins.count_real - ins.count_notok ins.save() return ins