59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
from rest_framework.decorators import action
|
|
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
|
from apps.utils.mixins import CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin
|
|
|
|
from apps.wpmw.models import Wpr, WprDefect
|
|
from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer
|
|
from rest_framework.response import Response
|
|
from apps.mtm.models import Material
|
|
|
|
|
|
class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, CustomGenericViewSet):
|
|
"""动态产品
|
|
|
|
动态产品
|
|
"""
|
|
perms_map = {"get": "*"}
|
|
select_related_fields = ["wm", "mb", "material"]
|
|
prefetch_related_fields = ["defects"]
|
|
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"]
|
|
}
|
|
ordering = ["number", "create_time"]
|
|
ordering_fields = ["number", "create_time", "update_time"]
|
|
search_fields = ["number", "material__name", "material__model", "material__specification", "number_out"]
|
|
|
|
def filter_queryset(self, queryset):
|
|
qs = super().filter_queryset(queryset)
|
|
if "mb__isnull" in self.request.query_params or "wm__isnull" in self.request.query_params:
|
|
pass
|
|
else:
|
|
qs.exclude(mb=None, wm=None)
|
|
return qs
|
|
|
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=WprNewSerializer)
|
|
def new_number(self, request, *args, **kwargs):
|
|
"""获取新的编号"""
|
|
data = request.data
|
|
year = data.get("year")
|
|
month = data.get("month")
|
|
material_start = data.get("material_start")
|
|
wps_qs = Wpr.objects.filter(material_start=material_start, create_time__year=year, create_time__month=month).order_by("create_time")
|
|
wpr_last = wps_qs.order_by("number").last()
|
|
count = wps_qs.count()
|
|
last_number = wpr_last.number if count > 0 else None
|
|
last_number_count = int(last_number.split("-")[-1].lstrip('0'))
|
|
mat = Material.objects.get(id=material_start)
|
|
return Response({"count": count, "last_number": last_number, "material_model":mat.model, "last_number_count": last_number_count})
|
|
|
|
def assgin_number_out(self, request, *args, **kwargs):
|
|
"""分配对外编号"""
|
|
pass |