From cb45e0bab1dd28d20cd2d479074fa8fecb6fa802 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 7 Mar 2025 13:00:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AD=90=E4=BB=BB=E5=8A=A1=E5=8F=AF?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E4=BB=A5=E5=8F=8A=E4=B8=80=E4=BA=9B=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/filters.py | 2 +- apps/wpm/migrations/0096_fmlog_enabled.py | 18 ++++++++++++++++++ apps/wpm/models.py | 6 +++--- apps/wpm/serializers.py | 12 ++++++------ apps/wpm/views.py | 2 +- 5 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 apps/wpm/migrations/0096_fmlog_enabled.py diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index c07f91e2..4a5bb893 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -45,7 +45,7 @@ class WMaterialFilter(filters.FilterSet): return queryset.filter(mgroup__id=value)|queryset.filter(belong_dept=Mgroup.objects.get(id=value).belong_dept, mgroup=None) def filter_tag(self, queryset, name, value): - mgroup = self.data.get("mgroupx", None) + mgroup = self.data.get("mgroup", None) if mgroup: process = Mgroup.objects.get(id=mgroup).process if value == "todo": diff --git a/apps/wpm/migrations/0096_fmlog_enabled.py b/apps/wpm/migrations/0096_fmlog_enabled.py new file mode 100644 index 00000000..d06589d2 --- /dev/null +++ b/apps/wpm/migrations/0096_fmlog_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-03-07 03:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wpm', '0095_alter_mlogbdefect_defect'), + ] + + operations = [ + migrations.AddField( + model_name='fmlog', + name='enabled', + field=models.BooleanField(default=True, verbose_name='是否启用'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 984d85d2..8b5b41b3 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -172,7 +172,7 @@ class Mlog(CommonADModel): mtaskb = models.ForeignKey(Mtaskb, verbose_name='关联个人任务', on_delete=models.CASCADE, related_name='mlog_mtaskb', null=True, blank=True) fill_way = models.PositiveSmallIntegerField("填写方式", default=10, help_text='10:仅二级;20:二三级;30:一二级') mtype = models.PositiveSmallIntegerField('生产类型', default=10, help_text='10:自生产;20:外协生产', choices=((10, '自生产'), (20, '外协生产'))) - is_fix = models.BooleanField('是否用于返修', default=False) + is_fix = models.BooleanField('是否用于返修', default=False) # 返工/复检 qct = models.ForeignKey("qm.qct", verbose_name='所用质检表', on_delete=models.SET_NULL, null=True, blank=True) supplier = models.ForeignKey(Supplier, verbose_name='外协供应商', on_delete=models.SET_NULL, null=True, blank=True) work_start_time = models.DateTimeField('生产开始时间', null=True, blank=True) @@ -376,7 +376,6 @@ class Mlogb(BaseModel): def mlogbdefect(self): return MlogbDefect.objects.filter(mlogb=self) - @property def cal_count_pn_jgqbl(self): mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="in") count_pn_jgqbl = mqs.aggregate(total=Sum("count"))["total"] or 0 @@ -386,7 +385,8 @@ class Mlogb(BaseModel): if mlog: count_pn_jgqbl = MlogbDefect.get_defect_qs_from_mlog(mlog, ftype="in").aggregate(total=Sum("count"))["total"] or 0 mlog.count_pn_jgqbl = count_pn_jgqbl - mlog.count_real = self.count_use - count_pn_jgqbl + if mlog.count_real == mlog.count_use: + mlog.count_real = mlog.count_use - count_pn_jgqbl mlog.save(update_fields=["count_pn_jgqbl", "count_real"]) def cal_count_notok(self): diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index ae07b803..697b9fe0 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -536,8 +536,8 @@ class MlogSerializer(CustomModelSerializer): attrs['mtask'] = fmlog.mtask if attrs['mtask'].route: attrs['route'] = attrs['mtask'].route - if attrs['mtask'].mtaskb and mtaskb is None: - raise ParseError('子任务不能为空') + # if attrs['mtask'].mtaskb and mtaskb is None: + # raise ParseError('子任务不能为空') if mtaskb and mtaskb.mtask != fmlog.mtask: raise ParseError('子任务不一致') if wm_in.state in [WMaterial.WM_OK]: @@ -560,9 +560,9 @@ class MlogSerializer(CustomModelSerializer): if mtask.start_date == mtask.end_date: attrs['handle_date'] = mtask.start_date else: - if attrs['work_end_time']: + if attrs.get('work_end_time', None): attrs['handle_date'] = localdate(attrs['work_end_time']) - elif attrs['work_start_time']: + elif attrs.get('work_start_time', None): attrs['handle_date'] = localdate(attrs['work_start_time']) mtaskb: Mtaskb = attrs.get('mtaskb', None) if mtaskb: @@ -646,12 +646,12 @@ class MlogbInSerializer(CustomModelSerializer): class Meta: model = Mlogb fields = ['id', 'mlog', 'mtask', 'wm_in', 'count_use', 'count_pn_jgqbl', - 'count_break', 'note', "parent"] + 'count_break', 'note', "parent", "mlogbdefect"] extra_kwargs = {'count_use': {'required': True}, 'mtask': {'required': False}, 'wm_in': {'required': True, "allow_empty": False}} def validate(self, attrs): - mlog: Mlog = attrs['mlog'] + mlog:Mlog = attrs['mlog'] is_fix = mlog.is_fix mtask: Mtask = attrs.get("mtask", None) if mtask and mtask.state != Mtask.MTASK_ASSGINED: diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 2b41791d..d7583ba0 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -649,7 +649,7 @@ class FmlogViewSet(CustomModelViewSet): serializer_class = FmlogSerializer update_serializer_class = FmlogUpdateSerializer filterset_fields = ['mtask', 'mgroup', 'mtask__route', 'enabled'] - select_related_fields = ['mtask', 'mgroup', 'mtask__route', 'mtask__route__routepack'] + select_related_fields = ['mtask', 'mgroup', 'mtask__route', 'mtask__route__routepack', "mtask__route__material_out"] def destroy(self, request, *args, **kwargs): ins = self.get_object()