This commit is contained in:
zty 2025-09-10 15:21:19 +08:00
commit 1ea9ef48a6
3 changed files with 29 additions and 4 deletions

View File

@ -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("请提供工段查询条件")

View File

@ -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':

View File

@ -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)