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):
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):
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)

View File

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

View File

@ -752,7 +752,7 @@ class MlogbOutUpdateSerializer(CustomModelSerializer):
def validate(self, attrs):
mlogbdefect = attrs.get("mlogbdefect", [])
if mlogbdefect:
attrs.pop("count_notok_json")
attrs.pop("count_notok_json", None)
for i in attrs:
if 'count_n_' in i:
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.wf.models import State
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 django.db.models import Q
from apps.utils.tools import convert_ordereddict
@ -596,13 +596,7 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust
# 如果是生产返修,则忽略质检
pass
elif mlogbout.qct is None:
try:
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.qct = Qct.get(mlogbout.material_out, "process")
mlogbout.count_real = d_count_real
mlogbout.count_ok = d_count_ok
mlogbout.save()