diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index cb349e2f..f571f29d 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -61,8 +61,7 @@ class WMaterialFilter(filters.FilterSet): qs = queryset.filter(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIR)|queryset.filter(state=WMaterial.WM_REPAIRED, mgroup__id=mgroupId) elif value == "canfix": matoutIds = process.get_canout_mat_ids() - qs = queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId)| queryset.filter(material__id__in=matoutIds, state=WMaterial.WM_NOTOK).exclude( - state=WMaterial.WM_REPAIR).exclude(state=WMaterial.WM_REPAIRED) + qs = queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId)| queryset.filter(material__id__in=matoutIds, state=WMaterial.WM_NOTOK) return qs else: raise ParseError("请提供工段查询条件") diff --git a/apps/wpmw/filters.py b/apps/wpmw/filters.py index 32549f36..607fc49c 100644 --- a/apps/wpmw/filters.py +++ b/apps/wpmw/filters.py @@ -1,14 +1,16 @@ from django_filters import rest_framework as filters -from apps.wpm.models import (Handoverbw, Mlogbw) +from apps.wpm.models import (Handoverbw, Mlogbw, WMaterial) from apps.inm.models import MIOItemw from apps.wpmw.models import Wpr -from apps.mtm.models import Route, Material +from apps.mtm.models import Route, Material, Mgroup from django.db.models import Q from rest_framework.exceptions import ParseError class WprFilter(filters.FilterSet): can_use = filters.CharFilter(method='filter_can_use') + mgroupx = filters.CharFilter(label='MgroupId', method='filter_mgroupx') + tag = filters.CharFilter(label="todo/done", method="filter_tag") class Meta: model = Wpr fields = { @@ -19,6 +21,28 @@ class WprFilter(filters.FilterSet): "defects": ["exact"], "number": ["exact"] } + + def filter_mgroupx(self, queryset, name, value): + return queryset.filter(wm__in=WMaterial.ava_qs(mgroup=Mgroup.objects.get(id=value))) + + def filter_tag(self, queryset, name, value): + mgroupId = self.data.get("mgroupx", None) + if mgroupId: + process = Mgroup.objects.get(id=mgroupId).process + + queryset = queryset.filter(material__type__in=[Material.MA_TYPE_MAINSO, Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD]) + if value == "todo": + matIds = process.get_canin_mat_ids() + qs = queryset.filter(material__id__in=matIds).exclude(state=WMaterial.WM_REPAIRED)|queryset.filter(state=WMaterial.WM_REPAIR, wm__mgroup__id=mgroupId) + return qs + elif value == "done": + matoutIds = process.get_canout_mat_ids() + qs = queryset.filter(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIR)|queryset.filter(state=WMaterial.WM_REPAIRED, wm__mgroup__id=mgroupId) + elif value == "canfix": + matoutIds = process.get_canout_mat_ids() + qs = queryset.filter(state=WMaterial.WM_REPAIR, wm__mgroup__id=mgroupId)| queryset.filter(material__id__in=matoutIds, state=WMaterial.WM_NOTOK) + else: + raise ParseError("请提供工段查询条件") def filter_can_use(self, queryset, name, value): if value == 'yes': diff --git a/apps/wpmw/serializers.py b/apps/wpmw/serializers.py index 482036a2..421d79d2 100644 --- a/apps/wpmw/serializers.py +++ b/apps/wpmw/serializers.py @@ -13,6 +13,8 @@ class WprDefectSerializer(CustomModelSerializer): class WprSerializer(CustomModelSerializer): + wm_batch = serializers.CharField(source="wm.batch", read_only=True) + mb_batch = serializers.CharField(source="mb.batch", read_only=True) material_name = serializers.StringRelatedField( source='material', read_only=True) wprdefect = WprDefectSerializer(many=True, read_only=True)