feat: 增加wpr tag查询条件以支持todo等

This commit is contained in:
caoqianming 2025-09-10 14:49:35 +08:00
parent 8b7a87abb6
commit ec8881fb02
2 changed files with 27 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':