188 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
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 ContentSerializer(serializers.ModelSerializer):
 | 
						|
    type_ = serializers.SerializerMethodField()
 | 
						|
    class Meta:
 | 
						|
        model = Content
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        """ Perform necessary eager loading of data. """
 | 
						|
        queryset = queryset.select_related('type')
 | 
						|
        return queryset
 | 
						|
    
 | 
						|
    def get_type_ (self, obj):
 | 
						|
        data = obj.type.name
 | 
						|
        if obj.type.pid:
 | 
						|
            data = obj.type.pid.name + '/' + data
 | 
						|
        return data
 | 
						|
 | 
						|
class ContentListSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Content
 | 
						|
        fields = ['name', 'desc', 'id', 'template']
 | 
						|
 | 
						|
class TaskCreateUpdateSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Task
 | 
						|
        fields = ['name', 'end_date', 'note', 'id']
 | 
						|
 | 
						|
class TaskListSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Task
 | 
						|
        fields = ['name', 'end_date', 'note', 'state', 'id']
 | 
						|
        
 | 
						|
class RecordSerializer(serializers.ModelSerializer):
 | 
						|
    content_ = ContentListSerializer(source='content', read_only=True)
 | 
						|
    task_ = TaskListSerializer(source='task', read_only=True)
 | 
						|
    belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
 | 
						|
    files_ = FileSimpleSerializer(source='files', many=True, read_only=True)
 | 
						|
    up_user_ = UserSimpleSerializer(source='up_user', read_only = True)
 | 
						|
    class Meta:
 | 
						|
        model = Record
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('task', 'content', 'belong_dept', 'up_user')
 | 
						|
        queryset = queryset.prefetch_related('files',)
 | 
						|
        return queryset
 | 
						|
 | 
						|
class RecordCreateSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Record
 | 
						|
        fields = ['content', 'files', 'noteb']
 | 
						|
 | 
						|
 | 
						|
class TaksDetailSerializer(serializers.ModelSerializer):
 | 
						|
    create_by_ = UserSimpleSerializer(source='create_by', read_only = True)
 | 
						|
    belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = Task
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class TaskDeptSerializer(serializers.ModelSerializer):
 | 
						|
    task_ = TaskListSerializer(source='task', read_only=True)
 | 
						|
    dept_ = OrganizationSimpleSerializer(source='dept', read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = TaskDept
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('task', 'dept')
 | 
						|
        return queryset
 | 
						|
    
 | 
						|
 | 
						|
class PgoalCreateUpdateSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Pgoal
 | 
						|
        fields = ['year', 'pgoal_1', 'pgoal_2', 'pgoal_3', 'pgoal_4', 'pgoal_5', 'pgoal_1_file', 'pgoal_2_file', 'pgoal_3_file', 'pgoal_4_file', 'pgoal_5_file']
 | 
						|
 | 
						|
 | 
						|
class PgoalSerializer(serializers.ModelSerializer):
 | 
						|
    pgoal_1_file_ = FileSimpleSerializer(source='pgoal_1_file', read_only=True)
 | 
						|
    pgoal_2_file_ = FileSimpleSerializer(source='pgoal_2_file', read_only=True)
 | 
						|
    pgoal_3_file_ = FileSimpleSerializer(source='pgoal_3_file', read_only=True)
 | 
						|
    pgoal_4_file_ = FileSimpleSerializer(source='pgoal_4_file', read_only=True)
 | 
						|
    pgoal_5_file_ = FileSimpleSerializer(source='pgoal_5_file', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = Pgoal
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
 | 
						|
# class Task2CreateUpdateSerializer(serializers.ModelSerializer):
 | 
						|
#     class Meta:
 | 
						|
#         model = Task2
 | 
						|
#         fields = ['year', 'cycle', 'type']
 | 
						|
 | 
						|
 | 
						|
class Task2Serializer(serializers.ModelSerializer):
 | 
						|
    create_by_name = serializers.CharField(source='create_by.name', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = Task2
 | 
						|
        fields = '__all__'
 | 
						|
        read_only_fields = ['create_time', 'update_time', 'create_by', 'update_by', 'belong_dept', 'state', 'is_deleted', 'depts']
 | 
						|
    
 | 
						|
    def update(self, instance, validated_data):
 | 
						|
        validated_data.pop('type', None)  # type不可编辑
 | 
						|
        if instance.state != Task2.TASK2_CLOSE:
 | 
						|
            raise ParseError('非创建状态不可编辑')
 | 
						|
        return super().update(instance, validated_data)
 | 
						|
    
 | 
						|
class Task2DeptsSerializer(serializers.Serializer):
 | 
						|
    ids = serializers.PrimaryKeyRelatedField(label="部门ID列表", many=True, queryset=Organization.objects.all())
 | 
						|
 | 
						|
 | 
						|
class Task2DoSerializer(serializers.ModelSerializer):
 | 
						|
    belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
 | 
						|
    task2_ = Task2Serializer(source='task2', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = Task2Do
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class ValidateMixin:
 | 
						|
    def validate(self, attrs):
 | 
						|
        task2do = attrs.get('task2do', None)
 | 
						|
        if task2do:
 | 
						|
            if task2do.task2.state == Task2.TASK2_CLOSE:
 | 
						|
                raise ParseError('任务已关闭不可处理')
 | 
						|
            attrs['year'] = task2do.task2.year
 | 
						|
            attrs['belong_dept'] = task2do.task2.belong_dept
 | 
						|
        return attrs
 | 
						|
 | 
						|
class BaseMeta:
 | 
						|
    fields = '__all__'
 | 
						|
    read_only_fields = ['create_time', 'update_time', 'create_by', 'update_by', 'is_deleted', 'belong_dept']
 | 
						|
    
 | 
						|
class PgoalDeptSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
    goal_file_ = FileSimpleSerializer(source='goal_file', read_only=True)
 | 
						|
    goal_o_file_ = FileSimpleSerializer(source='goal_o_file', read_only=True)
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = PgoalDept
 | 
						|
        read_only_fields = BaseMeta.read_only_fields + ['goal_value_a', 'goal_value_c', 'goal_files', 'goal_key', 'goal_file_', 'goal_o_file', 'goal_o_file_']
 | 
						|
 | 
						|
 | 
						|
class RcSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = Rc
 | 
						|
 | 
						|
class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = Complaint
 | 
						|
 | 
						|
class PtSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = Pt
 | 
						|
 | 
						|
class RiskSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = Risk
 | 
						|
 | 
						|
class OinspectSerializer(ValidateMixin, serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta(BaseMeta):
 | 
						|
        model = Oinspect
 | 
						|
 | 
						|
 | 
						|
class NoRecordSerializer(serializers.Serializer):
 | 
						|
    key = serializers.ChoiceField(label='字段key', choices=['num_error', 'num_overdue', 'num_complaint', 'num_pt', 'num_risk', 'num_oinspect'])
 | 
						|
 | 
						|
 | 
						|
class UpdateFieldSerializer(serializers.ModelSerializer):
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = Task2Do
 | 
						|
        fields = ['num_issue', 'num_expect']
 | 
						|
        extra_kwargs = {'num_issue': {'required': True}, 'num_expect': {'required': True}} |