diff --git a/apps/wpmw/filters.py b/apps/wpmw/filters.py new file mode 100644 index 00000000..fe3d0108 --- /dev/null +++ b/apps/wpmw/filters.py @@ -0,0 +1,32 @@ +from django_filters import rest_framework as filters +from apps.wpm.models import (Handoverbw, Mlogbw) +from apps.inm.models import MIOItemw +from apps.wpmw.models import Wpr +from apps.mtm.models import Route, Material +from django.db.models import Q +from rest_framework.exceptions import ParseError + + +class WprFilter(filters.FilterSet): + can_use = filters.CharFilter(method='filter_can_use') + class Meta: + model = Wpr + fields = { + "mb": ["exact", "isnull"], + "wm": ["exact", "isnull"], + "material__process": ["exact"], + "state": ["exact"], + "defects": ["exact"], + "number": ["exact"] + } + + def filter_can_use(self, queryset, name, value): + if value == 'yes': + # 交接记录 + handoverws = Handoverbw.objects.filter(handoverb__handover__submit_time__isnull=True).values_list('wpr__id', flat=True) + # 生产日志 + mlogbws = Mlogbw.objects.filter(mlogb__mlog__submit_time__isnull=True).values_list('wpr__id', flat=True) + # 出入库记录 + mioitemws = MIOItemw.objects.filter(mioitem__mio__submit_time__isnull=True).values_list('wpr__id', flat=True) + return queryset.exclude(id__in=handoverws).exclude(id__in=mlogbws).exclude(id__in=mioitemws) + return queryset \ No newline at end of file diff --git a/apps/wpmw/views.py b/apps/wpmw/views.py index 3b0acb33..44ee097f 100644 --- a/apps/wpmw/views.py +++ b/apps/wpmw/views.py @@ -8,6 +8,7 @@ from rest_framework.response import Response from apps.mtm.models import Material from rest_framework.exceptions import ParseError from django.db import transaction +from apps.wpmw.filters import WprFilter class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, CustomGenericViewSet): @@ -21,14 +22,7 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu queryset = Wpr.objects.all() serializer_class = WprSerializer retrieve_serializer_class = WprDetailSerializer - filterset_fields = { - "mb": ["exact", "isnull"], - "wm": ["exact", "isnull"], - "material__process": ["exact"], - "state": ["exact"], - "defects": ["exact"], - "number": ["exact"] - } + filterset_class = WprFilter ordering = ["number", "create_time"] ordering_fields = ["number", "create_time", "update_time"] search_fields = ["number", "material__name", "material__model", "material__specification", "number_out"]