diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 4d5b289e..e7a18d2a 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -169,7 +169,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if m_ins.exists(): m_ins_list = [(mi.material_in, mi.batch if mi.batch else mi.batch, mi.count_use-mi.count_pn_jgqbl, None, mi) for mi in m_ins.all()] for item in m_ins: - mbd_qs = MlogbDefect.objects.filter(mlogb=item) + mbd_qs = MlogbDefect.objects.filter(mlogb=item, defect__isnull=False) for itemx in mbd_qs: if itemx.defect: m_ins_bl_list.append((item.material_in, item.batch, itemx.count, itemx.defect, item)) @@ -244,7 +244,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if item.qct is not None or mbd_qs.exists(): # if item.material_out.tracking == Material.MA_TRACKING_SINGLE: # Mlogbw.cal_count_notok(item) - for itemx in MlogbDefect.objects.filter(mlogb=item): + for itemx in MlogbDefect.objects.filter(mlogb=item, defect__isnull=False): m_outs_list.append((item.material_out, item.batch, itemx.count, 0, itemx.defect, item)) # # 获取所有主要的不合格项/先暂时保留 # bw_qs = Mlogbw.objects.filter(mlogb=item) @@ -464,16 +464,18 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): m_ins = Mlogb.objects.filter(mlog=mlog, material_in__isnull=False) if m_ins.exists(): for mi in m_ins.all(): - m_ins_list.append((mi.material_in, mi.batch, mi.count_use, mi.wm_in, mi)) - if mi.count_pn_jgqbl > 0: - raise ParseError("暂不支持加工前不良") - m_ins_bl_list.append((mi.material_in, mi.batch, mi.count_pn_jgqbl, mi)) + m_ins_list.append((mi.material_in, mi.batch, mi.count_use-mi.count_pn_jgqbl, None, mi)) + for item in m_ins: + mbd_qs = MlogbDefect.objects.filter(mlogb=item, defect__isnull=False) + for itemx in mbd_qs: + if itemx.defect: + m_ins_bl_list.append((item.material_in, item.batch, itemx.count, itemx.defect, item)) else: m_ins_list = [(material_in, mlog.batch, mlog.count_use, mlog.wm_in, mlog)] for mi in m_ins_list: - mi_ma, mi_batch, mi_count, mi_wm_in, mlog_or_b = mi - if mi_wm_in: - wm = mi_wm_in + mi_ma, mi_batch, mi_count, defect_or, mlog_or_b = mi + if isinstance(mlog_or_b, Mlogb) and mlog_or_b.wm_in: + wm = WMaterial.objects.get(id=mlog_or_b.wm_in.id) else: # 针对光子的情况,实际上必须需要wm_in lookup = {'batch': mi_batch, 'material': mi_ma, 'mgroup': None, 'state': WMaterial.WM_OK} @@ -501,11 +503,11 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): # 针对加工前不良的暂时额外处理 for item in m_ins_bl_list: - material, batch, count_pn_jgqbl = item - if count_pn_jgqbl> 0: - lookup = {'batch': batch, 'material': material, 'mgroup': mgroup, 'notok_sign': 'jgqbl', 'state': WMaterial.WM_NOTOK} + material, batch, count, defect, mi_ = item + if count> 0: + lookup = {'batch': batch, 'material': material, 'mgroup': mgroup, 'defect': 'jgqbl', 'state': WMaterial.WM_NOTOK} wm, is_create = WMaterial.objects.get_or_create(**lookup, defaults={**lookup, "belong_dept": belong_dept}) - wm.count = wm.count - count_pn_jgqbl + wm.count = wm.count - count if wm.count < 0: raise ParseError('加工前不良数量大于库存量') if is_create: