diff --git a/apps/mtm/filters.py b/apps/mtm/filters.py index 52d45059..df1a9e9e 100644 --- a/apps/mtm/filters.py +++ b/apps/mtm/filters.py @@ -1,6 +1,7 @@ from django_filters import rest_framework as filters -from apps.mtm.models import Goal, Material, Route +from apps.mtm.models import Goal, Material, Route, RoutePack from django.db.models.expressions import F +from rest_framework.exceptions import ParseError class MaterialFilter(filters.FilterSet): @@ -45,6 +46,8 @@ class GoalFilter(filters.FilterSet): class RouteFilter(filters.FilterSet): + nprocess_name = filters.CharFilter(method='filter_nprocess_name', label="nprocess_name") + material_in_has = filters.CharFilter(method='filter_material_in_has', label="material_in_has ID") class Meta: model = Route fields = { @@ -61,3 +64,15 @@ class RouteFilter(filters.FilterSet): "mgroup__belong_dept__name": ["exact", "contains"], "from_route": ["exact", "isnull"], } + + def filter_nprocess_name(self, queryset, name, value): + return queryset + + + def filter_material_in_has(self, queryset, name, value): + nprocess_name = self.data.get('nprocess_name', None) + if nprocess_name: + routepack_qs = queryset.filter(material_in__id=value, routepack__isnull=False, routepack__state=RoutePack.RP_S_CONFIRM).values_list('routepack', flat=True) + qs = queryset.filter(routepack__in=routepack_qs, process__name=nprocess_name) + return qs + raise ParseError("nprocess_name is required") \ No newline at end of file