fix: 获取qct提出到model
This commit is contained in:
parent
bbed6fa646
commit
666fbd306b
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue