diff --git a/apps/mtm/migrations/0057_process_number_to_batch.py b/apps/mtm/migrations/0057_process_number_to_batch.py new file mode 100644 index 00000000..fa8017f0 --- /dev/null +++ b/apps/mtm/migrations/0057_process_number_to_batch.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-04-28 06:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0056_mgroup_batch_append_code'), + ] + + operations = [ + migrations.AddField( + model_name='process', + name='number_to_batch', + field=models.BooleanField(default=False, verbose_name='个号转批号'), + ), + ] diff --git a/apps/mtm/models.py b/apps/mtm/models.py index c432a023..c1dde7f9 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -16,6 +16,7 @@ class Process(CommonBModel): PRO_NORMAL = 10 PRO_DIV = 20 PRO_MERGE = 30 + name = models.CharField('工序名称', max_length=100) type = models.PositiveSmallIntegerField("工序类型", default=PRO_PROD, choices=((PRO_PROD, '生产工序'), (PRO_TEST, '检验工序'))) mtype = models.PositiveSmallIntegerField("工序生产类型", default=PRO_NORMAL, choices=((PRO_NORMAL, '常规'), (PRO_DIV, '切分'), (PRO_MERGE, '合并'))) @@ -30,6 +31,7 @@ class Process(CommonBModel): mlog_need_ticket = models.BooleanField('日志提交是否需要审批', default=False) mstate_json = models.JSONField('中间状态', default=list, blank=True) parent = models.ForeignKey('self', verbose_name='父工序', on_delete=models.CASCADE, null=True, blank=True) + number_to_batch = models.BooleanField('个号转批号', default=False) class Meta: verbose_name = '工序' diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 2277e10e..bfb8f8ff 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -563,6 +563,7 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust mlogbin: Mlogb = serializer.save() mlog:Mlog = mlogbin.mlog route:Route = mlog.route + process: Process = route.process if route else None mtype = route.process.mtype if route else None is_fix = mlog.is_fix qct = mlog.qct @@ -614,18 +615,17 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust elif mtype == Process.PRO_DIV: # 切分 支持批到批,个到个, 个到批 div_number = route.div_number if material_in.tracking == Material.MA_TRACKING_SINGLE and material_out.tracking == Material.MA_TRACKING_BATCH: - if Mlogbw.objects.filter(mlogb=mlogbin).count() == 1: - mlogbwin = Mlogbw.objects.filter(mlogb=mlogbin).first() - mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=mlogbwin, mlogb_from=mlogbin, defaults=update_dict(m_dict,{"count_real": div_number, "count_ok": div_number})) + lenx = Mlogbw.objects.filter(mlogb=mlogbin).count() + # 用个号做批号是用于后续在复用个号可以追踪到原先的个 + for mlogbwin in Mlogbw.objects.filter(mlogb=mlogbin).order_by("number"): + if process and process.number_to_batch: + m_dict["batch"] = mlogbwin.number + mlogbout, _ = Mlogb.objects.get_or_create( + mlogbw_from=mlogbwin, defaults=update_dict(m_dict, {"count_real": div_number, "count_ok": div_number})) + if lenx == 1: + mlogbout.mlogb_from = mlogbin mlogbout.number_from = mlogbwin.number mlogbout.save(update_fields=["number_from"]) - else: - # 用个号做批号是用于后续在复用个号可以追踪到原先的个 - for mlogbwin in Mlogbw.objects.filter(mlogb=mlogbin).order_by("number"): - m_dict["batch"] = mlogbwin.number - mlogbout, _ = Mlogb.objects.get_or_create(mlogbw_from=mlogbwin, defaults=update_dict(m_dict, {"count_real": div_number, "count_ok": div_number})) - mlogbout.number_from = mlogbwin.number - mlogbout.save(update_fields=["number_from"]) elif material_in.tracking == Material.MA_TRACKING_SINGLE and material_out.tracking == Material.MA_TRACKING_SINGLE: d_count_real = mlogbin.count_use * div_number d_count_ok = d_count_real