fix: mlogbupdate bug
This commit is contained in:
parent
666fbd306b
commit
7e40596665
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue