diff --git a/apps/qm/filters.py b/apps/qm/filters.py index 9cbf5273..96f36e14 100644 --- a/apps/qm/filters.py +++ b/apps/qm/filters.py @@ -46,8 +46,8 @@ class FtestWorkFilter(filters.FilterSet): fields = { "material__process__name": ["exact", "contains"], "material": ["exact"], - "wm": ["exact"], - "mb": ["exact"], + "wm": ["exact", "isnull"], + "mb": ["exact", "isnull"], "batch": ["exact"], "type": ["exact"], "type2": ["exact"], diff --git a/apps/qm/services.py b/apps/qm/services.py index 2226f8f7..ca5bab25 100644 --- a/apps/qm/services.py +++ b/apps/qm/services.py @@ -6,6 +6,7 @@ from django.utils import timezone from apps.wf.models import Ticket from apps.qm.models import NotOkOption, Defect from apps.wpm.services_2 import ana_batch_thread +from apps.inm.models import MaterialBatch def ftestwork_submit_validate(ins: FtestWork): wm:WMaterial = ins.wm @@ -124,6 +125,32 @@ def ftestwork_submit(ins:FtestWork, user: User): if not new_create: wmx.count = wmx.count + item.count wmx.save() + + if ins.mb: + mb:MaterialBatch = ins.mb + for item in FtestworkDefect.objects.filter(ftestwork=ins): + item:FtestworkDefect = item + if item.count > 0: + mb.count = mb.count - item.count + if mb.count < 0: + raise ParseError("数量不足,扣减失败") + mb.save() + mbstate = WMaterial.WM_OK + if item.defect.okcate == Defect.DEFECT_NOTOK: + mbstate = WMaterial.WM_NOTOK + mbx, new_create = MaterialBatch.objects.get_or_create( + material=mb.material, + warehouse=mb.warehouse, + batch=mb.batch, + defect=item.defect, + state=mbstate, + defaults={ + 'count': item.count, + } + ) + if not new_create: + mbx.count = mbx.count + item.count + mbx.save() ins.submit_user = user ins.submit_time = timezone.now() ins.save()