cnas/server/apps/project/serializers.py

140 lines
5.2 KiB
Python

from apps.project.filters import CertAppFilter
from apps.plan.models import Plan
from rest_framework import serializers
from .models import *
from apps.system.serializers import DictSerializer, UserSimpleSerializer, DictSimpleSerializer
from apps.certset.serializers import StandardSerializer
from apps.plan.serializers import PlanSerializer
from apps.laboratory.serializers import TestOrgSerializer
# class ApplicationCreateSerializer(serializers.ModelSerializer):
# number = serializers.CharField(required=False)
# class Meta:
# model = Application
# fields = '__all__'
# class ApplicationUpdateSerializer(serializers.ModelSerializer):
# number = serializers.CharField(read_only=True)
# stage_ = serializers.SerializerMethodField(source='stage', read_only=True)
# class Meta:
# model = Application
# fields = '__all__'
# def get_stage_(self, obj):
# return obj.get_stage_display()
# class SubApplicationCreateSerializer(serializers.ModelSerializer):
# number = serializers.CharField(required=False)
# class Meta:
# model = SubApplication
# fields = '__all__'
# class SubApplicationUpdateSerializer(serializers.ModelSerializer):
# number = serializers.CharField(read_only=True)
# cert_field_ = DictSerializer(source='cert_field')
# cccpv_class_ = DictSerializer(source='cccpv_class')
# cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True)
# class Meta:
# model = SubApplication
# fields = '__all__'
class CertappflowSerializer(serializers.ModelSerializer):
handler_ = UserSimpleSerializer(source='handler', read_only=True)
class Meta:
model = CertAppFlow
fields = ['handler_', 'create_time', 'operation', 'state']
class CertappSerializer(serializers.ModelSerializer):
cert_field_ = DictSerializer(source='cert_field', read_only=True)
cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True)
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
nonitems = serializers.SlugRelatedField(many=True, required=False, slug_field="id", queryset=Dict.objects.filter(is_deleted=1, type__code='factory_check_noitem'))
class Meta:
model = CertApp
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('cert_field','cccpv_class', 'create_by', 'accept_by')
queryset = queryset.prefetch_related('cnas_scopes',)
return queryset
from apps.crm.serializers import CertunitSimpleSerializer
from apps.certificate.models import Certificate
class CertappunitSerializer(serializers.ModelSerializer):
certunit_ = CertunitSimpleSerializer(source = 'certunit', read_only=True)
decision_ = DictSimpleSerializer(source = 'decision', read_only=True)
testorg_ = TestOrgSerializer(source = 'testorg', read_only=True)
certificate_ = serializers.SerializerMethodField()
class Meta:
model = Certappunit
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('certunit','testorg','decision')
return queryset
def get_certificate_(self, obj):
certificates = Certificate.objects.filter(certunit = obj.certunit).order_by('-create_time')
if certificates.exists():
certificate = certificates[0]
return {'id':certificate.id,'number':certificate.number}
return None
class EvaluationDetailSerializer(serializers.ModelSerializer):
class Meta:
model = EvaluationDetail
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('cert_field', 'cccpv_class', 'create_by', 'accept_by')
queryset = queryset.prefetch_related('cnas_scopes',)
return queryset
class ProjectSerializer(serializers.ModelSerializer):
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
assign_by_ = UserSimpleSerializer(source='assign_by', read_only=True)
certapps = serializers.SerializerMethodField()
plan_ = PlanSerializer(source='plan', read_only=True)
class Meta:
model = Project
fields = '__all__'
def get_certapps(self, obj):
certapps = []
for i in obj.certapp_project.filter(is_deleted=False):
if i.cccpv_class:
certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
else:
certapps.append(i.cert_field.code)
return certapps
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('create_by', 'assign_by', 'plan')
queryset = queryset.prefetch_related('certapp_project')
return queryset
class ProjectUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ['remark', 'can_paichai']