diff --git a/apps/inm/services.py b/apps/inm/services.py index 6778b961..41a7be60 100644 --- a/apps/inm/services.py +++ b/apps/inm/services.py @@ -10,7 +10,7 @@ from apps.wpm.models import WMaterial from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpmw.models import Wpr from apps.qm.models import FtestDefect, Defect -from django.db.models import Count +from django.db.models import Count, Q def do_out(item: MIOItem): """ @@ -329,8 +329,11 @@ class InmService: mb.count = mb.count + change_count mb.save() if tracking == Material.MA_TRACKING_SINGLE: - mioitemws = MIOItemw.objects.filter(mioitem=i) - if mioitemws.count() != i.count: + if defect: + mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + else: + mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=i) + if mioitemws.count() != change_count: raise ParseError("出入库与明细数量不一致,操作失败") for mioitemw in mioitemws: if mioitemw.wpr: @@ -347,8 +350,11 @@ class InmService: else: mb.save() if tracking == Material.MA_TRACKING_SINGLE: - mioitemws = MIOItemw.objects.filter(mioitem=i) - if mioitemws.count() != i.count: + if defect: + mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + else: + mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=i) + if mioitemws.count() != change_count: raise ParseError("出入库与明细数量不一致,操作失败") for mioitemw in mioitemws: Wpr.change_or_new(wpr=mioitemw.wpr, old_mb=mb) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 556a472d..c278a626 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -20,7 +20,7 @@ from apps.wpm.services_2 import get_alldata_with_batch_and_store from datetime import timedelta from apps.wpmw.models import Wpr, WprDefect from ..qm.models import Defect, FtestDefect -from django.db.models import Count +from django.db.models import Count, Q myLogger = logging.getLogger('log') @@ -299,7 +299,10 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): wm.material_ofrom = mlog_or_b.material_ofrom wm.save() if material_out.tracking == Material.MA_TRACKING_SINGLE: - mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b) + if notok_sign_or_defect: + mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + else: + mlogbws = Mlogbw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=mlog_or_b) if mlogbws.count() != mo_count: raise ParseError("日志与明细数量不一致,操作失败") for item in mlogbws: @@ -412,7 +415,10 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): wm.update_by = user wm.save() if material_out.tracking == Material.MA_TRACKING_SINGLE: - mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b) + if notok_sign_or_defect: + mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + else: + mlogbws = Mlogbw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=mlog_or_b) if mlogbws.count() != mo_count: raise ParseError("日志与明细数量不一致,操作失败") for item in mlogbws: