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',
|
read_only_fields = EXCLUDE_FIELDS_BASE + ['mlog', 'mtask', 'wm_in', 'material_in', 'material_out',
|
||||||
'count_use', 'count_break', 'count_pn_jgqbl', 'mlogbdefect', "qct"]
|
'count_use', 'count_break', 'count_pn_jgqbl', 'mlogbdefect', "qct"]
|
||||||
|
|
||||||
def create(self, validated_data):
|
# def create(self, validated_data):
|
||||||
material_out:Material = validated_data["material_out"]
|
# material_out:Material = validated_data["material_out"]
|
||||||
mlogbdefect = validated_data.pop("mlogbdefect", [])
|
# mlogbdefect = validated_data.pop("mlogbdefect", [])
|
||||||
with transaction.atomic():
|
# with transaction.atomic():
|
||||||
ins = super().create(validated_data)
|
# ins = super().create(validated_data)
|
||||||
if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH:
|
# if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH:
|
||||||
count_notok = 0
|
# count_notok = 0
|
||||||
mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0]
|
# mlogbdefect_new = [item for item in mlogbdefect if item["count"] > 0]
|
||||||
for item in mlogbdefect_new:
|
# for item in mlogbdefect_new:
|
||||||
defect:Defect = item["defect"]
|
# defect:Defect = item["defect"]
|
||||||
MlogbDefect.objects.create(mlogb=ins, **item)
|
# MlogbDefect.objects.create(mlogb=ins, **item)
|
||||||
if defect.cate == Defect.DEFECT_NOTOK:
|
# if defect.cate == Defect.DEFECT_NOTOK:
|
||||||
count_notok +=1
|
# count_notok +=1
|
||||||
ins.count_notok = count_notok
|
# ins.count_notok = count_notok
|
||||||
ins.count_ok = ins.count_real - ins.count_notok
|
# ins.count_ok = ins.count_real - ins.count_notok
|
||||||
ins.save()
|
# ins.save()
|
||||||
else:
|
# else:
|
||||||
raise ParseError("mlogbdefect仅支持批次件")
|
# raise ParseError("mlogbdefect仅支持批次件")
|
||||||
return ins
|
# return ins
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
material_out:Material = instance.material_out
|
|
||||||
mlogbdefect = validated_data.pop("mlogbdefect", [])
|
mlogbdefect = validated_data.pop("mlogbdefect", [])
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
ins:Mlogb = super().update(instance, validated_data)
|
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
|
count_notok = 0
|
||||||
md_ids = []
|
md_ids = []
|
||||||
for item in mlogbdefect:
|
for item in mlogbdefect:
|
||||||
defect = item["defect"]
|
defect:Defect = item["defect"]
|
||||||
insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None))
|
if item["count"] > 0:
|
||||||
insb.count = item["count"]
|
insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect, floor=item.get('floor', None))
|
||||||
insb.save(update_fields=["count"])
|
insb.count = item["count"]
|
||||||
if defect.cate == Defect.DEFECT_NOTOK:
|
insb.save(update_fields=["count"])
|
||||||
count_notok +=1
|
if defect.okcate == Defect.DEFECT_NOTOK:
|
||||||
|
count_notok += item["count"]
|
||||||
md_ids.append(insb.id)
|
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_notok = count_notok
|
||||||
ins.count_ok = ins.count_real
|
ins.count_ok = ins.count_real - ins.count_notok
|
||||||
ins.save()
|
ins.save()
|
||||||
return ins
|
return ins
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue