diff --git a/apps/mtm/migrations/0035_process_store_notok.py b/apps/mtm/migrations/0035_process_store_notok.py new file mode 100644 index 00000000..c11a95d5 --- /dev/null +++ b/apps/mtm/migrations/0035_process_store_notok.py @@ -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='不合格品是否入库'), + ), + ] diff --git a/apps/mtm/models.py b/apps/mtm/models.py index 18d81b2d..2db5c76d 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -16,6 +16,7 @@ class Process(CommonBModel): File, verbose_name='指导书', on_delete=models.SET_NULL, null=True, blank=True) instruction_content = models.TextField('指导书内容', null=True, blank=True) into_wm_mgroup = models.BooleanField('交接到工段', default=False) + store_notok = models.BooleanField('不合格品是否入库', default=False) class Meta: verbose_name = '工序' diff --git a/apps/wpm/migrations/0056_auto_20240718_1118.py b/apps/wpm/migrations/0056_auto_20240718_1118.py new file mode 100644 index 00000000..b22a3c98 --- /dev/null +++ b/apps/wpm/migrations/0056_auto_20240718_1118.py @@ -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='不合格品是否已入库'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 2678f434..cc451125 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -110,6 +110,8 @@ class Mlog(CommonADModel): work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True) hour_work = models.FloatField('预计工时', null=True, 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) mtask = models.ForeignKey( Mtask, verbose_name='关联任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_mtask') diff --git a/apps/wpm/services.py b/apps/wpm/services.py index f645a175..2dce4938 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -220,17 +220,29 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): wm.save() if material_out: # 需要入车间库存 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) + stored_notok = False + stored_mgroup = False 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: - 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: - mo_ma, mo_batch, mo_count, mo_count_eweight = mo - lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': None} + mo_ma, mo_batch, mo_count, mo_count_eweight, notok_sign = mo + lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': notok_sign} if into_wm_mgroup: lookup['mgroup'] = mgroup + stored_mgroup = True else: lookup['belong_dept'] = belong_dept 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.update_by = user wm.save() + mlog.submit_time = now mlog.submit_user = user + mlog.stored_notok = stored_notok + mlog.stored_mgroup = stored_mgroup mlog.save() @@ -256,6 +271,8 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): belong_dept = mgroup.belong_dept material_out = mlog.material_out material_in = mlog.material_in + stored_notok = mlog.stored_notok + stored_mgroup = mlog.stored_mgroup if material_in: # 领用数退回 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() else: lookup = {'batch': mi_batch, 'material': mi_ma, 'mgroup': None, 'notok_sign': None} - if mi_wm_in: - lookup['id'] if into_wm_mgroup: + # 退回到本工段 lookup['mgroup'] = mgroup else: lookup['belong_dept'] = belong_dept @@ -285,17 +301,24 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): wm.save() 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) 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: - 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: - mo_ma, mo_batch, mo_count, _ = mo - lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': None} - if into_wm_mgroup: + mo_ma, mo_batch, mo_count, _, notok_sign = mo + lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': notok_sign} + if stored_mgroup: lookup['mgroup'] = mgroup else: lookup['belong_dept'] = belong_dept