diff --git a/apps/mtm/models.py b/apps/mtm/models.py index 00339e8d..0c57aaf5 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -42,6 +42,12 @@ class Process(CommonBModel): """获取可产出的materialIds """ return list(Route.objects.filter(process=self).values_list("material_out__id", flat=True).distinct()) + + def get_canin_mat_ids(self): + """获取可输入的materialIds + """ + return list(RouteMat.objects.filter(route__process=self).values_list("material__id", flat=True).distinct()) + \ + list(Route.objects.filter(process=self).values_list("material_in__id", flat=True).distinct()) # Create your models here. class Material(CommonAModel): diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index c6237732..bf8064f2 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -50,14 +50,17 @@ class WMaterialFilter(filters.FilterSet): mgroupId = mgroupId if mgroupId else mgroupxId if mgroupId: process = Mgroup.objects.get(id=mgroupId).process - matoutIds = process.get_canout_mat_ids() + queryset = queryset.filter(material__type__in=[Material.MA_TYPE_MAINSO, Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD]) if value == "todo": - qs = queryset.exclude(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIRED)|queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId) + matIds = process.get_canin_mat_ids() + qs = queryset.filter(material__id__in=matIds).exclude(state=WMaterial.WM_REPAIRED)|queryset.filter(state=WMaterial.WM_REPAIR, 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, 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) return qs