fix: 获取qct提出到model

This commit is contained in:
caoqianming 2025-03-03 15:13:28 +08:00
parent bbed6fa646
commit 666fbd306b
4 changed files with 22 additions and 12 deletions

View File

@ -168,6 +168,16 @@ class Qct(CommonAModel):
def qct_mats(self): def qct_mats(self):
return QctMat.objects.filter(qct=self) return QctMat.objects.filter(qct=self)
@classmethod
def get(self, material:Material, cate:str):
try:
qctmat = QctMat.objects.get(material=material, qct__is_deleted=False, qct__tags__contains=cate)
except QctMat.DoesNotExist:
qctmat = None
except QctMat.MultipleObjectsReturned:
raise ParseError("存在多个质检表,请手动选择")
return qctmat.qct if qctmat else None
class QctTestItem(BaseModel): class QctTestItem(BaseModel):
qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qcttestitem") qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qcttestitem")
testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True) testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True)

View File

@ -199,24 +199,30 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
ftestworkdefect = validated_data.pop("ftestworkdefect", []) ftestworkdefect = validated_data.pop("ftestworkdefect", [])
with transaction.atomic(): with transaction.atomic():
ins: FtestWork = super().create(validated_data) ins: FtestWork = super().create(validated_data)
qct = Qct.get(ins.material, "inm")
if qct:
ins.qct = qct
ins.save()
for ftestworkdefect in ftestworkdefect: for ftestworkdefect in ftestworkdefect:
FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect) FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect)
if ftestworkdefect: if ins.qct or ftestworkdefect:
ins.cal_count() ins.cal_count()
return ins return ins
def update(self, instance, validated_data): def update(self, instance, validated_data):
ftestworkdefect = validated_data.pop("ftestworkdefect", []) ftestworkdefect = validated_data.pop("ftestworkdefect", [])
ins = super().update(instance, validated_data) ins:FtestWork = super().update(instance, validated_data)
with transaction.atomic(): with transaction.atomic():
for item in ftestworkdefect: for item in ftestworkdefect:
try: try:
ins = FtestworkDefect.objects.get(ftestwork=ins, defect=item["defect"]) ins = FtestworkDefect.objects.get(ftestwork=ins, defect=item["defect"])
except FtestworkDefect.DoesNotExist: except FtestworkDefect.DoesNotExist:
raise ParseError("新的缺陷项!") raise ParseError("新的缺陷项!")
except FtestworkDefect.MultipleObjectsReturned:
raise ParseError("缺陷项重复!")
ins.count = item["count"] ins.count = item["count"]
ins.save() ins.save()
if ftestworkdefect: if ins.qct or ftestworkdefect:
ins.cal_count() ins.cal_count()
return ins return ins

View File

@ -752,7 +752,7 @@ class MlogbOutUpdateSerializer(CustomModelSerializer):
def validate(self, attrs): def validate(self, attrs):
mlogbdefect = attrs.get("mlogbdefect", []) mlogbdefect = attrs.get("mlogbdefect", [])
if mlogbdefect: if mlogbdefect:
attrs.pop("count_notok_json") attrs.pop("count_notok_json", None)
for i in attrs: for i in attrs:
if 'count_n_' in i: if 'count_n_' in i:
attrs.pop(i, None) attrs.pop(i, None)

View File

@ -30,7 +30,7 @@ from .services import mlog_submit, handover_submit, mlog_revert
from apps.wpm.services import mlog_submit_validate, generate_new_batch from apps.wpm.services import mlog_submit_validate, generate_new_batch
from apps.wf.models import State from apps.wf.models import State
from apps.wpmw.models import Wpr from apps.wpmw.models import Wpr
from apps.qm.models import QctMat, Ftest from apps.qm.models import Qct, Ftest
from apps.enm.models import EnStat from apps.enm.models import EnStat
from django.db.models import Q from django.db.models import Q
from apps.utils.tools import convert_ordereddict from apps.utils.tools import convert_ordereddict
@ -596,13 +596,7 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust
# 如果是生产返修,则忽略质检 # 如果是生产返修,则忽略质检
pass pass
elif mlogbout.qct is None: elif mlogbout.qct is None:
try: mlogbout.qct = Qct.get(mlogbout.material_out, "process")
qctmat = QctMat.objects.get(material=material_out, qct__is_deleted=False, qct__tags__contains="process")
except QctMat.DoesNotExist:
qctmat = None
except QctMat.MultipleObjectsReturned:
raise ParseError("存在多个质检表,请手动选择")
mlogbout.qct = qctmat.qct if qctmat else None
mlogbout.count_real = d_count_real mlogbout.count_real = d_count_real
mlogbout.count_ok = d_count_ok mlogbout.count_ok = d_count_ok
mlogbout.save() mlogbout.save()