diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index c283492d..61cc7d9a 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -36,6 +36,7 @@ class StLogFilter(filters.FilterSet): class WMaterialFilter(filters.FilterSet): mgroupx = filters.CharFilter(label='MgroupId', method='filter_mgroupx') + tag = filters.CharFilter(label="todo/done", method="filter_tag") mtaskx = filters.CharFilter(label='MtaskId', method='filter_mtaskx') route = filters.CharFilter(label='routeId', method='filter_route') material__process__exclude = filters.CharFilter(field_name="material__process", lookup_expr="exact", exclude=True) @@ -43,6 +44,19 @@ class WMaterialFilter(filters.FilterSet): def filter_mgroupx(self, queryset, name, value): 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) + if mgroup: + process = Mgroup.objects.get(id=mgroup).process + if value == "todo": + qs = queryset.filter(material__process=process)|queryset.filter(state=WMaterial.WM_REPAIR) + return qs + elif value == "done": + qs = queryset.exclude(material__process=process)|queryset.filter(state=WMaterial.WM_REPAIRED) + return qs + else: + raise ParseError("请提供工段查询条件") + def filter_mtaskx(self, queryset, name, value): mtask = Mtask.objects.get(id=value) if mtask.route and mtask.route.batch_bind: