cma_search/server/apps/supervision/serializers.py

218 lines
8.0 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
import datetime
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)
attrs['create_by'] = self.context['request'].user
attrs['belong_dept'] = self.context['request'].user.dept
if task2do:
if task2do.task2.state == Task2.TASK2_CLOSE:
raise ParseError('任务已关闭不可处理')
attrs['belong_dept'] = task2do.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(serializers.ModelSerializer):
goal_file_ = FileSimpleSerializer(source='goal_file', read_only=True)
goal_files_ = FileSimpleSerializer(source='goal_files', many=True, read_only=True)
belong_dept_name = serializers.CharField(source='belong_dept.name', 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_files_']
def validate(self, attrs):
task2do = attrs.get('task2do', None)
attrs['create_by'] = self.context['request'].user
attrs['belong_dept'] = self.context['request'].user.dept
if task2do:
if task2do.task2.state == Task2.TASK2_CLOSE:
raise ParseError('任务已关闭不可处理')
attrs['year'] = task2do.task2.year
attrs['belong_dept'] = task2do.belong_dept
return attrs
class DateField(serializers.DateTimeField):
def to_representation(self, value):
if isinstance(value, datetime.date):
value = value.strftime('%Y-%m-%d')
return super().to_representation(value)
class RcSerializer(ValidateMixin, serializers.ModelSerializer):
date_issue = DateField(required=False)
date_accept = DateField(required=False)
date_expect = DateField(required=False)
class Meta(BaseMeta):
model = Rc
class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer):
date_occurrence = DateField()
date_feedback = DateField()
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):
date_inspect = DateField()
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', 'num_acc']
extra_kwargs = {'num_issue': {'required': True}, 'num_expect': {'required': True}, 'num_acc': {'required': True}}
class ImpSerializer(serializers.Serializer):
path = serializers.CharField(label='文件地址')
task2do = serializers.PrimaryKeyRelatedField(label='关联task2do的ID值', queryset = Task2Do.objects.all())