feat: wmaterial根据current_merged查询

This commit is contained in:
caoqianming 2026-01-21 11:09:53 +08:00
parent dc26c7cc46
commit 4bbae8b7df
1 changed files with 20 additions and 2 deletions

View File

@ -1,8 +1,8 @@
from django_filters import rest_framework as filters
from apps.wpm.models import (SfLog, StLog, WMaterial, Mlog, Mlogbw,
Handover, Mgroup, Mlogb, Mtask, BatchSt)
Handover, Mgroup, Mlogb, Mtask, BatchSt, Handoverb)
from apps.mtm.models import Route, Material
from django.db.models import Q
from django.db.models import Q, Exists, OuterRef
from rest_framework.exceptions import ParseError
from datetime import datetime
@ -43,6 +43,7 @@ class WMaterialFilter(filters.FilterSet):
material__process__exclude = filters.CharFilter(field_name="material__process", lookup_expr="exact", exclude=True)
mlog_date_start = filters.DateFilter(label="产出开始", method="filter_mlog_date_start")
mlog_date_end = filters.DateFilter(label="产出结束", method="filter_mlog_date_end")
current_merged = filters.BooleanFilter(label="是否在本工段合批", method="filter_current_merged")
def filter_mlog_date_start(self, queryset, name, value):
mgroupId = self.data.get("mgroup", None)
@ -101,6 +102,23 @@ class WMaterialFilter(filters.FilterSet):
raise ParseError('生产路线不存在!')
return queryset.filter(material=route.material_in)|queryset.filter(material__in=route.materials.all())
def filter_current_merged(self, queryset, name, value):
mgroupxId = self.data.get("mgroupx", None)
if mgroupxId:
pass
else:
raise ParseError("请提供工段查询条件")
sub_qs = Handoverb.objects.filter(
wm=OuterRef("pk"),
handover__mtype=Handover.H_MERGE,
handover__recive_mgroup__id=mgroupxId,
)
if value is True:
return queryset.annotate(_has_merge=Exists(sub_qs)).filter(_has_merge=True)
elif value is False:
return queryset.annotate(_has_merge=Exists(sub_qs)).filter(_has_merge=False)
return queryset
class Meta:
model = WMaterial
fields = {