from django.shortcuts import render from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin from rest_framework.decorators import action 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 # Create your views here. class TestItemViewSet(CustomModelViewSet): """ list:质检项目 质检项目 """ queryset = TestItem.objects.all() serializer_class = TestItemSerializer filterset_class = TestItemFilter search_fields = ['tags', 'name', 'number'] 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']