from django.db import transaction from django.shortcuts import render from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin from rest_framework.response import Response from apps.mtm.models import Material from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from .filters import SfLogExpFilter, SfLogFilter from .models import SfLog, SfLogExp, StLog, WMaterial from .serializers import SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer # Create your views here. class StLogViewSet(ListModelMixin, CustomGenericViewSet): """ list:停机记录 停机记录 """ perms_map = {'get': '*'} queryset = StLog.objects.all() serializer_class = StLogSerializer select_related_fields = ['mgroup'] filterset_fields = ['mgroup'] ordering = ['-start_time'] class SfLogViewSet(UpdateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet): """ list:值班记录 值班记录 """ perms_map = {'get': '*', 'put': 'sflog.update', 'delete': 'sflog.delete'} queryset = SfLog.objects.all() serializer_class = SfLogSerializer select_related_fields = ['mgroup', 'shift', 'team', 'leader'] filterset_class = SfLogFilter search_fields = ['note'] ordering = ['-start_time'] @action(methods=['get'], detail=True, perms_map={'get': '*'}) def init_test(self, request, pk=None): """ 初始化检测录入 初始化检测录入 """ from apps.qm.models import QuaStat, TestItem from apps.qm.serializers import QuaStatSerializer obj = self.get_object() test_materials = Material.objects.filter( id__in=obj.mgroup.test_materials).order_by('sort', '-create_time') for material in test_materials: testitems = TestItem.objects.filter( id__in=material.testitems).order_by('sort', '-create_time') for testitem in testitems: params = {'material': material, 'testitem': testitem, 'sflog': obj} QuaStat.objects.get_or_create( **params, defaults={**params, **{'create_by': request.user, 'belong_dept': obj.mgroup.belong_dept}}) qs = QuaStat.objects.filter(sflog=obj).order_by( 'material__sort', 'material__create_time', 'testitem__sort', 'testitem__create_time') sr = QuaStatSerializer(instance=qs, many=True) return Response(sr.data) class SfLogExpViewSet(CustomModelViewSet): """ list:生产异常动态 生产异常动态 """ queryset = SfLogExp.objects.all() serializer_class = SflogExpSerializer select_related_fields = ['sflog', 'sflog__mgroup', 'stlog'] filterset_class = SfLogExpFilter class WMaterialViewSet(ListModelMixin, CustomGenericViewSet): """ list: 车间库存 车间库存 """ queryset = WMaterial.objects.all() serializer_class = WMaterialSerializer select_related_fields = ['material', 'belong_dept'] search_fields = ['material__name', 'material__number', 'material__specification'] filterset_fields = ['material', 'belong_dept']