152 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
from re import template
 | 
						|
from django.db.models.base import Model
 | 
						|
from rest_framework import serializers
 | 
						|
from .models import *
 | 
						|
from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer, FileSimpleSerializer
 | 
						|
from rest_framework.exceptions import ParseError
 | 
						|
class InspectItemSerializer(serializers.ModelSerializer):
 | 
						|
    cate_name = serializers.StringRelatedField(source='cate', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = InspectItem
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('cate')
 | 
						|
        return queryset
 | 
						|
 | 
						|
class InspectItemSimpleSerializer(serializers.ModelSerializer):
 | 
						|
    # cate_name = serializers.StringRelatedField(source='cate', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = InspectItem
 | 
						|
        fields = ['id', 'name', 'type', 'sortnum']
 | 
						|
    
 | 
						|
    # @staticmethod
 | 
						|
    # def setup_eager_loading(queryset):
 | 
						|
    #     queryset = queryset.select_related('cate')
 | 
						|
    #     return queryset
 | 
						|
 | 
						|
 | 
						|
class InspectTaskSerializer(serializers.ModelSerializer):
 | 
						|
    create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
 | 
						|
    dept_count = serializers.SerializerMethodField()
 | 
						|
    subtask_count = serializers.SerializerMethodField()
 | 
						|
    template_name = serializers.CharField(source='template.name', read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = InspectTask
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    def get_dept_count(self, obj):
 | 
						|
        return InspectDept.objects.filter(subtask__inspecttask=obj, is_deleted=False).count()
 | 
						|
 | 
						|
    def get_subtask_count(self, obj):
 | 
						|
        return SubInspectTask.objects.filter(inspecttask=obj, is_deleted=False).count()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('template',)
 | 
						|
        return queryset
 | 
						|
 | 
						|
class InspectTaskSimpleSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = InspectTask
 | 
						|
        fields = ['id', 'name', 'start_date', 'end_date']
 | 
						|
 | 
						|
class SubtaskListSerializer(serializers.ModelSerializer):
 | 
						|
    inspecttask_ = InspectTaskSimpleSerializer(source='inspecttask', read_only=True)
 | 
						|
    members = serializers.SerializerMethodField()
 | 
						|
    depts_count = serializers.SerializerMethodField()
 | 
						|
    class Meta:
 | 
						|
        model = SubInspectTask
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    def get_members(self, obj):
 | 
						|
        return obj.team_subtask.values('member', 'member__name', 'type')
 | 
						|
 | 
						|
    def get_depts_count(self, obj):
 | 
						|
        return obj.dept_subtask.count()
 | 
						|
    
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('inspecttask',)
 | 
						|
        queryset = queryset.prefetch_related('team_subtask','dept_subtask')
 | 
						|
        return queryset
 | 
						|
 | 
						|
 | 
						|
class InspectRecordListSerializer(serializers.ModelSerializer):
 | 
						|
    item_ = InspectItemSimpleSerializer(source='item', read_only=True)
 | 
						|
    checker_ = UserSimpleSerializer(source='checker', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = InspectRecord
 | 
						|
        exclude = ['imgs']
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('item', 'checker')
 | 
						|
        return queryset
 | 
						|
 | 
						|
class InspectRecordDetailSerializer(serializers.ModelSerializer):
 | 
						|
    item_ = InspectItemSerializer(source='item', read_only=True)
 | 
						|
    checker_ = UserSimpleSerializer(source='checker', read_only=True)
 | 
						|
    imgs_ = FileSimpleSerializer(source='imgs', many=True, read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = InspectRecord
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('item', 'checker')
 | 
						|
        queryset = queryset.prefetch_related('imgs',)
 | 
						|
        return queryset
 | 
						|
 | 
						|
class InspectTeamSerializer(serializers.ModelSerializer):
 | 
						|
    member_ = UserSimpleSerializer(source='member', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = InspectTeam
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('member')
 | 
						|
        return queryset
 | 
						|
 | 
						|
class InspectDeptSerializer(serializers.ModelSerializer):
 | 
						|
    dept__name = serializers.CharField(source='dept.name', read_only=True)
 | 
						|
    leader = serializers.SerializerMethodField()
 | 
						|
    class Meta:
 | 
						|
        model = InspectDept
 | 
						|
        fields = ('dept', 'dept__name', 'state', 'subtask', 'id', 'note', 'leader', 'start_date')
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('dept', 'subtask')
 | 
						|
        return queryset
 | 
						|
    
 | 
						|
    def get_leader(self, obj):
 | 
						|
        return InspectTeam.objects.filter(subtask=obj.subtask).first().member.pk
 | 
						|
 | 
						|
 | 
						|
class InspectRecordCheckSerializer(serializers.ModelSerializer):
 | 
						|
    """
 | 
						|
    提交检查结果序列化
 | 
						|
    """
 | 
						|
    class Meta:
 | 
						|
        model = InspectRecord
 | 
						|
        fields = ['id', 'result', 'note', 'imgs']
 | 
						|
    
 | 
						|
    def validate_result(self, result):
 | 
						|
        if result:
 | 
						|
            if result == '发现':
 | 
						|
                if not (self.initial_data['note'] or self.initial_data['imgs']):
 | 
						|
                    raise ParseError('发现问题请填写说明或上传图片')
 | 
						|
        else:
 | 
						|
            raise ParseError('未填写检查结果')
 | 
						|
        return result
 | 
						|
    
 | 
						|
class InspectTemplateSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = InspectTemplate
 | 
						|
        fields = '__all__'
 |