feat: ftestwork的submit支持defect
This commit is contained in:
parent
942e54a7e4
commit
69daa63ea6
|
@ -181,7 +181,7 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
ins: FtestWork = super().create(validated_data)
|
ins: FtestWork = super().create(validated_data)
|
||||||
for ftestworkdefect in ftestworkdefect:
|
for ftestworkdefect in ftestworkdefect:
|
||||||
FtestworkDefect.objects.create(ftest=ins, **ftestworkdefect)
|
FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect)
|
||||||
if ftestworkdefect:
|
if ftestworkdefect:
|
||||||
ins.cal_count()
|
ins.cal_count()
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
from apps.qm.models import FtestWork
|
from apps.qm.models import FtestWork, FtestworkDefect
|
||||||
from apps.wpm.models import WMaterial
|
from apps.wpm.models import WMaterial
|
||||||
from apps.system.models import User
|
from apps.system.models import User
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from apps.wf.models import Ticket
|
from apps.wf.models import Ticket
|
||||||
from apps.qm.models import NotOkOption
|
from apps.qm.models import NotOkOption, Defect
|
||||||
from apps.utils.thread import MyThread
|
from apps.utils.thread import MyThread
|
||||||
from apps.wpm.services_2 import get_alldata_with_batch_and_store
|
from apps.wpm.services_2 import get_alldata_with_batch_and_store
|
||||||
|
|
||||||
|
@ -24,74 +24,101 @@ def ftestwork_submit_validate(ins: FtestWork):
|
||||||
def ftestwork_submit(ins:FtestWork, user: User):
|
def ftestwork_submit(ins:FtestWork, user: User):
|
||||||
wm:WMaterial = ins.wm
|
wm:WMaterial = ins.wm
|
||||||
if ins.need_update_wm:
|
if ins.need_update_wm:
|
||||||
if wm.state == WMaterial.WM_TEST:
|
if ins.qct is None:
|
||||||
# 更新对应的车间库存
|
if wm.state == WMaterial.WM_TEST:
|
||||||
wm.count = wm.count - ins.count
|
# 更新对应的车间库存
|
||||||
if wm.count >= 0:
|
wm.count = wm.count - ins.count
|
||||||
# 已检测的数量
|
if wm.count >= 0:
|
||||||
wm.count_xtest = wm.count_xtest + ins.count
|
# 已检测的数量
|
||||||
wm.save()
|
wm.count_xtest = wm.count_xtest + ins.count
|
||||||
else:
|
wm.save()
|
||||||
raise ParseError("超过待检数量")
|
else:
|
||||||
# 寻找count_notok_json中的b类不合格不进行处理
|
raise ParseError("超过待检数量")
|
||||||
|
|
||||||
|
# 寻找count_notok_json中的b类不合格不进行处理
|
||||||
|
count_notok_json = ins.count_notok_json
|
||||||
|
need_move_count = 0
|
||||||
|
for k, v in count_notok_json.items():
|
||||||
|
if v > 0:
|
||||||
|
notok_sign = k.replace('count_n_', '')
|
||||||
|
if NotOkOption.get_extra_info(notok_sign)['cate'] == 'ok_b': # b类不合格在后续处理
|
||||||
|
need_move_count = need_move_count + v
|
||||||
|
count_ok = ins.count_ok - need_move_count
|
||||||
|
if count_ok > 0:
|
||||||
|
wm, new_create = WMaterial.objects.get_or_create(
|
||||||
|
material=wm.material,
|
||||||
|
batch=wm.batch,
|
||||||
|
mgroup=wm.mgroup,
|
||||||
|
belong_dept=wm.belong_dept,
|
||||||
|
state=WMaterial.WM_OK,
|
||||||
|
notok_sign=None,
|
||||||
|
defaults={
|
||||||
|
'count': count_ok,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if not new_create:
|
||||||
|
wm.count = wm.count + count_ok
|
||||||
|
wm.save()
|
||||||
|
else: # 如果直接对工段库存检验 , 则直接扣减不合格数
|
||||||
|
wm.count = wm.count - ins.count_notok
|
||||||
|
if wm.count >= 0:
|
||||||
|
wm.save()
|
||||||
|
else:
|
||||||
|
raise ParseError("不合格数不可大于批次数量")
|
||||||
|
|
||||||
|
# 生成不合格的
|
||||||
count_notok_json = ins.count_notok_json
|
count_notok_json = ins.count_notok_json
|
||||||
need_move_count = 0
|
|
||||||
for k, v in count_notok_json.items():
|
for k, v in count_notok_json.items():
|
||||||
if v > 0:
|
if v > 0:
|
||||||
notok_sign = k.replace('count_n_', '')
|
notok_sign = k.replace('count_n_', '')
|
||||||
if NotOkOption.get_extra_info(notok_sign)['cate'] == 'ok_b': # b类不合格在后续处理
|
astate = WMaterial.WM_NOTOK
|
||||||
need_move_count = need_move_count + v
|
if NotOkOption.get_extra_info(notok_sign)['cate'] == 'ok_b':
|
||||||
count_ok = ins.count_ok - need_move_count
|
astate = WMaterial.WM_OK
|
||||||
if count_ok > 0:
|
wm_n, new_create = WMaterial.objects.get_or_create(
|
||||||
wm, new_create = WMaterial.objects.get_or_create(
|
material=wm.material,
|
||||||
material=wm.material,
|
batch=wm.batch,
|
||||||
batch=wm.batch,
|
mgroup=wm.mgroup,
|
||||||
mgroup=wm.mgroup,
|
belong_dept=wm.belong_dept,
|
||||||
belong_dept=wm.belong_dept,
|
notok_sign=notok_sign,
|
||||||
state=WMaterial.WM_OK,
|
state=astate,
|
||||||
notok_sign=None,
|
defaults={
|
||||||
defaults={
|
'count': v,
|
||||||
'count': count_ok,
|
'material': wm.material,
|
||||||
}
|
'batch': wm.batch,
|
||||||
)
|
'mgroup': wm.mgroup,
|
||||||
if not new_create:
|
'belong_dept': wm.belong_dept,
|
||||||
wm.count = wm.count + count_ok
|
'notok_sign': notok_sign,
|
||||||
wm.save()
|
'state': astate,
|
||||||
else: # 如果直接对工段库存检验 , 则直接扣减不合格数
|
}
|
||||||
wm.count = wm.count - ins.count_notok
|
)
|
||||||
if wm.count >= 0:
|
if not new_create:
|
||||||
wm.save()
|
wm_n.count = wm_n.count + v
|
||||||
else:
|
wm_n.save()
|
||||||
raise ParseError("不合格数不可大于批次数量")
|
else:
|
||||||
|
wm:WMaterial = ins.wm
|
||||||
# 生成不合格的
|
# 此时调用了qct表
|
||||||
count_notok_json = ins.count_notok_json
|
for item in FtestworkDefect.objects.filter(ftestwork=ins):
|
||||||
for k, v in count_notok_json.items():
|
item:FtestworkDefect = item
|
||||||
if v > 0:
|
if item.count > 0 and item.defect.okcate == Defect.DEFECT_NOTOK:
|
||||||
notok_sign = k.replace('count_n_', '')
|
ins.count = ins.count - item.count
|
||||||
astate = WMaterial.WM_NOTOK
|
if ins.count < 0:
|
||||||
if NotOkOption.get_extra_info(notok_sign)['cate'] == 'ok_b':
|
raise ParseError("数量不足,扣减失败")
|
||||||
astate = WMaterial.WM_OK
|
wm, new_create = WMaterial.objects.get_or_create(
|
||||||
wm_n, new_create = WMaterial.objects.get_or_create(
|
material=wm.material,
|
||||||
material=wm.material,
|
batch=wm.batch,
|
||||||
batch=wm.batch,
|
mgroup=wm.mgroup,
|
||||||
mgroup=wm.mgroup,
|
belong_dept=wm.belong_dept,
|
||||||
belong_dept=wm.belong_dept,
|
state=WMaterial.WM_NOTOK,
|
||||||
notok_sign=notok_sign,
|
notok_sign=None,
|
||||||
state=astate,
|
defect=item.defect,
|
||||||
defaults={
|
defaults={
|
||||||
'count': v,
|
'count': item.count,
|
||||||
'material': wm.material,
|
}
|
||||||
'batch': wm.batch,
|
)
|
||||||
'mgroup': wm.mgroup,
|
if not new_create:
|
||||||
'belong_dept': wm.belong_dept,
|
wm.count = wm.count + item.count
|
||||||
'notok_sign': notok_sign,
|
wm.save()
|
||||||
'state': astate,
|
ins.save()
|
||||||
}
|
|
||||||
)
|
|
||||||
if not new_create:
|
|
||||||
wm_n.count = wm_n.count + v
|
|
||||||
wm_n.save()
|
|
||||||
ins.submit_user = user
|
ins.submit_user = user
|
||||||
ins.submit_time = timezone.now()
|
ins.submit_time = timezone.now()
|
||||||
ins.save()
|
ins.save()
|
||||||
|
|
Loading…
Reference in New Issue