feat: 日志提交时不合格品存储到车间库存
This commit is contained in:
parent
ee65658145
commit
d561a0d24b
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2024-07-18 03:18
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mtm', '0034_route_batch_bind'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='process',
|
||||||
|
name='store_notok',
|
||||||
|
field=models.BooleanField(default=False, verbose_name='不合格品是否入库'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -16,6 +16,7 @@ class Process(CommonBModel):
|
||||||
File, verbose_name='指导书', on_delete=models.SET_NULL, null=True, blank=True)
|
File, verbose_name='指导书', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
instruction_content = models.TextField('指导书内容', null=True, blank=True)
|
instruction_content = models.TextField('指导书内容', null=True, blank=True)
|
||||||
into_wm_mgroup = models.BooleanField('交接到工段', default=False)
|
into_wm_mgroup = models.BooleanField('交接到工段', default=False)
|
||||||
|
store_notok = models.BooleanField('不合格品是否入库', default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '工序'
|
verbose_name = '工序'
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.12 on 2024-07-18 03:18
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wpm', '0055_auto_20240717_1653'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mlog',
|
||||||
|
name='stored_mgroup',
|
||||||
|
field=models.BooleanField(default=False, verbose_name='入库到工段'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mlog',
|
||||||
|
name='stored_notok',
|
||||||
|
field=models.BooleanField(default=False, verbose_name='不合格品是否已入库'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -110,6 +110,8 @@ class Mlog(CommonADModel):
|
||||||
work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True)
|
work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True)
|
||||||
hour_work = models.FloatField('预计工时', null=True, blank=True)
|
hour_work = models.FloatField('预计工时', null=True, blank=True)
|
||||||
reminder_interval_list = models.JSONField('提醒间隔', default=list, blank=True)
|
reminder_interval_list = models.JSONField('提醒间隔', default=list, blank=True)
|
||||||
|
stored_mgroup = models.BooleanField('入库到工段', default=False)
|
||||||
|
stored_notok = models.BooleanField('不合格品是否已入库', default=False)
|
||||||
route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True)
|
route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
mtask = models.ForeignKey(
|
mtask = models.ForeignKey(
|
||||||
Mtask, verbose_name='关联任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_mtask')
|
Mtask, verbose_name='关联任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_mtask')
|
||||||
|
|
|
@ -220,17 +220,29 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
wm.save()
|
wm.save()
|
||||||
if material_out: # 需要入车间库存
|
if material_out: # 需要入车间库存
|
||||||
into_wm_mgroup = material_out.process.into_wm_mgroup if material_out.process else False
|
into_wm_mgroup = material_out.process.into_wm_mgroup if material_out.process else False
|
||||||
|
need_store_notok = material_out.process.store_notok if material_out.process else False
|
||||||
m_outs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False)
|
m_outs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False)
|
||||||
|
stored_notok = False
|
||||||
|
stored_mgroup = False
|
||||||
if m_outs.exists():
|
if m_outs.exists():
|
||||||
m_outs_list = [(mo.material_out, mo.batch if mo.batch else mlog.batch, mo.count_ok, mlog.count_real_eweight) for mo in m_outs.all()]
|
m_outs_list = [(mo.material_out, mo.batch if mo.batch else mlog.batch, mo.count_ok, mlog.count_real_eweight, None) for mo in m_outs.all()]
|
||||||
|
if need_store_notok:
|
||||||
|
for item in m_outs:
|
||||||
|
for f in Mlogb._meta.fields:
|
||||||
|
if 'count_n_' in f.name and getattr(item, f.name) > 0:
|
||||||
|
notok_sign = f.name.replace('count_n_', '')
|
||||||
|
m_outs_list.append( (item.material_out, item.batch if item.batch else mlog.batch, getattr(item, f.name), mlog.count_real_eweight, notok_sign))
|
||||||
|
stored_notok = True
|
||||||
else:
|
else:
|
||||||
m_outs_list = [(material_out, mlog.batch, mlog.count_ok, mlog.count_real_eweight)]
|
m_outs_list = [(material_out, mlog.batch, mlog.count_ok, mlog.count_real_eweight, None)]
|
||||||
|
# 一次填写的暂时不处理不合格品
|
||||||
|
|
||||||
for mo in m_outs_list:
|
for mo in m_outs_list:
|
||||||
mo_ma, mo_batch, mo_count, mo_count_eweight = mo
|
mo_ma, mo_batch, mo_count, mo_count_eweight, notok_sign = mo
|
||||||
lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': None}
|
lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': notok_sign}
|
||||||
if into_wm_mgroup:
|
if into_wm_mgroup:
|
||||||
lookup['mgroup'] = mgroup
|
lookup['mgroup'] = mgroup
|
||||||
|
stored_mgroup = True
|
||||||
else:
|
else:
|
||||||
lookup['belong_dept'] = belong_dept
|
lookup['belong_dept'] = belong_dept
|
||||||
if mo_count > 0:
|
if mo_count > 0:
|
||||||
|
@ -239,8 +251,11 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
wm.count_eweight = mo_count_eweight
|
wm.count_eweight = mo_count_eweight
|
||||||
wm.update_by = user
|
wm.update_by = user
|
||||||
wm.save()
|
wm.save()
|
||||||
|
|
||||||
mlog.submit_time = now
|
mlog.submit_time = now
|
||||||
mlog.submit_user = user
|
mlog.submit_user = user
|
||||||
|
mlog.stored_notok = stored_notok
|
||||||
|
mlog.stored_mgroup = stored_mgroup
|
||||||
mlog.save()
|
mlog.save()
|
||||||
|
|
||||||
|
|
||||||
|
@ -256,6 +271,8 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
belong_dept = mgroup.belong_dept
|
belong_dept = mgroup.belong_dept
|
||||||
material_out = mlog.material_out
|
material_out = mlog.material_out
|
||||||
material_in = mlog.material_in
|
material_in = mlog.material_in
|
||||||
|
stored_notok = mlog.stored_notok
|
||||||
|
stored_mgroup = mlog.stored_mgroup
|
||||||
if material_in:
|
if material_in:
|
||||||
# 领用数退回
|
# 领用数退回
|
||||||
into_wm_mgroup = material_in.process.into_wm_mgroup if material_in.process else False
|
into_wm_mgroup = material_in.process.into_wm_mgroup if material_in.process else False
|
||||||
|
@ -272,9 +289,8 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
mi_wm_in.save()
|
mi_wm_in.save()
|
||||||
else:
|
else:
|
||||||
lookup = {'batch': mi_batch, 'material': mi_ma, 'mgroup': None, 'notok_sign': None}
|
lookup = {'batch': mi_batch, 'material': mi_ma, 'mgroup': None, 'notok_sign': None}
|
||||||
if mi_wm_in:
|
|
||||||
lookup['id']
|
|
||||||
if into_wm_mgroup:
|
if into_wm_mgroup:
|
||||||
|
# 退回到本工段
|
||||||
lookup['mgroup'] = mgroup
|
lookup['mgroup'] = mgroup
|
||||||
else:
|
else:
|
||||||
lookup['belong_dept'] = belong_dept
|
lookup['belong_dept'] = belong_dept
|
||||||
|
@ -285,17 +301,24 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
wm.save()
|
wm.save()
|
||||||
if material_out: # 产物退回
|
if material_out: # 产物退回
|
||||||
# 有多个产物的情况
|
# 有多个产物的情况
|
||||||
into_wm_mgroup = material_out.process.into_wm_mgroup if material_out.process else False
|
# 需要考虑不合格品退回的情况
|
||||||
m_outs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False)
|
m_outs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False)
|
||||||
if m_outs.exists():
|
if m_outs.exists():
|
||||||
m_outs_list = [(mo.material_out, mo.batch if mo.batch else mlog.batch, mo.count_ok, mlog.count_real_eweight) for mo in m_outs.all()]
|
m_outs_list = [(mo.material_out, mo.batch if mo.batch else mlog.batch, mo.count_ok, mlog.count_real_eweight, None) for mo in m_outs.all()]
|
||||||
|
if stored_notok:
|
||||||
|
for item in m_outs:
|
||||||
|
for f in Mlogb._meta.fields:
|
||||||
|
if 'count_n_' in f.name and getattr(item, f.name) > 0:
|
||||||
|
notok_sign = f.name.replace('count_n_', '')
|
||||||
|
m_outs_list.append( (item.material_out, item.batch if item.batch else mlog.batch, getattr(item, f.name), mlog.count_real_eweight, notok_sign))
|
||||||
else:
|
else:
|
||||||
m_outs_list = [(material_out, mlog.batch, mlog.count_ok, mlog.count_real_eweight)]
|
m_outs_list = [(material_out, mlog.batch, mlog.count_ok, mlog.count_real_eweight, None)]
|
||||||
|
# 一次填写的暂时不处理不合格品
|
||||||
|
|
||||||
for mo in m_outs_list:
|
for mo in m_outs_list:
|
||||||
mo_ma, mo_batch, mo_count, _ = mo
|
mo_ma, mo_batch, mo_count, _, notok_sign = mo
|
||||||
lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': None}
|
lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': notok_sign}
|
||||||
if into_wm_mgroup:
|
if stored_mgroup:
|
||||||
lookup['mgroup'] = mgroup
|
lookup['mgroup'] = mgroup
|
||||||
else:
|
else:
|
||||||
lookup['belong_dept'] = belong_dept
|
lookup['belong_dept'] = belong_dept
|
||||||
|
|
Loading…
Reference in New Issue