from django.shortcuts import render from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin from rest_framework.decorators import action from rest_framework.views import APIView from apps.qm.models import QuaStat, TestItem, Ftest, Ptest, FtestWork from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \ FtestWorkCreateUpdateSerializer, FtestWorkSerializer from apps.qm.tasks import cal_quastat_sflog from rest_framework.response import Response from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin import datetime from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.wpm.models import SfLog from apps.qm.filters import QuaStatFilter, TestItemFilter from django.db import transaction from apps.qm.models import NotOkOption # Create your views here. class NotOkOptionView(APIView): perms_map = {'get': '*'} def get(self, request): """ 获取不合格项 获取不合格项 """ res1 = [{'value': i.value, 'label': i.label} for i in NotOkOption] res2 = {i.value: i.label for i in NotOkOption} return Response({"res_list": res1, "res_dict": res2}) class TestItemViewSet(CustomModelViewSet): """ list:质检项目 质检项目 """ queryset = TestItem.objects.all() serializer_class = TestItemSerializer filterset_class = TestItemFilter search_fields = ['tags', 'name', 'number', 'mcate_tags'] ordering = ['id'] class QuaStatViewSet(ListModelMixin, BulkUpdateModelMixin, CustomGenericViewSet): """ list:质量数据统计 质量数据统计 """ perms_map = {'get': '*', 'put': 'quastat.update'} queryset = QuaStat.objects.all() serializer_class = QuaStatSerializer update_serializer_class = QuaStatUpdateSerializer filterset_class = QuaStatFilter select_related_fields = ['belong_dept', 'material', 'testitem'] ordering = ['belong_dept__sort', 'material__sort', 'testitem__sort'] def after_bulk_update(self, objs): now = datetime.datetime.now() sflogIds = [] for i in objs: sflogIds.append(i['sflog']) sflogIds = list(set(sflogIds)) SfLog.objects.filter(id__in=sflogIds).update( last_test_time=now) # 更新质检记录时间 for sflogId in sflogIds: cal_quastat_sflog.delay(sflogId) class FtestViewSet(CustomModelViewSet): """ list:首件/成品检验 首件/成品检验 """ queryset = Ftest.objects.all() serializer_class = FtestSerializer select_related_fields = ['test_user', 'check_user', 'ftest_work'] filterset_fields = ['type', 'ftest_work'] @transaction.atomic def perform_create(self, serializer): ins = serializer.save() if ins.ftest_work: ins.ftest_work.count_sampling = Ftest.objects.filter( ftest_work=ins.ftest_work).count() ins.ftest_work.save() return ins @transaction.atomic def perform_destroy(self, instance): ftest_work = instance.ftest_work instance.delete() if ftest_work: instance.ftest_work.count_sampling = Ftest.objects.filter( ftest_work=instance.ftest_work).count() instance.ftest_work.save() class PtestViewSet(CustomModelViewSet): """ list:性能测试 性能测试 """ queryset = Ptest.objects.all() serializer_class = PtestSerializer select_related_fields = ['testitem'] filterset_fields = ['testitem', 'test_date', 'sample_number'] search_fields = ['testitem__name', 'sample_number'] class FtestWorkViewSet(CustomModelViewSet): """ list: 检验工作 检验工作 """ queryset = FtestWork.objects.all() serializer_class = FtestWorkSerializer create_serializer_class = FtestWorkCreateUpdateSerializer update_serializer_class = FtestWorkCreateUpdateSerializer select_related_fields = ['material'] filterset_fields = ['material', 'batch']