From aa72953d173800e6bed15b862c57e92511f8b20f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 7 Aug 2025 09:31:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wpr=E5=A2=9E=E5=8A=A0can=5Fuse=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpmw/filters.py | 32 ++++++++++++++++++++++++++++++++ apps/wpmw/views.py | 10 ++-------- 2 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 apps/wpmw/filters.py 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"]