218 lines
8.0 KiB
Python
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()) |