from rest_framework import serializers, status from courses.workspaces.serializers import SimpleWorkspaceSerializer from courses.certification.models import ( CertificateTemplate, CertificationProcess, Evaluation, CourseCertification, ) class CertificateTemplateSerializer(serializers.ModelSerializer): workspace = SimpleWorkspaceSerializer(read_only=True) associate = serializers.SerializerMethodField() course_name = serializers.SerializerMethodField(read_only=True,) # TODO: Legacy compat field, remove in the future contract = serializers.SerializerMethodField(read_only=True) class Meta: model = CertificateTemplate fields = ('id', 'text', 'base_logo_url', 'cert_logo_url', 'signature_name', 'role', 'name', 'course_name', 'contract', 'associate', 'workspace', 'document_type', 'organization_name', 'site_logo_url', 'signature_url', 'course', 'second_signature_url', 'second_name', 'second_role', 'display_background_image',) def get_associate(self, obj): filters = { 'document_type' : 'certificate' if obj.document_type == 'receipt' else 'receipt', 'course': obj.course, 'workspace': obj.workspace } if CertificateTemplate.objects.filter(**filters).exists(): return CertificateTemplate.objects.filter(**filters).first().id return None def get_contract(self, obj): if obj.workspace: return SimpleWorkspaceSerializer(obj.workspace).data return None def get_course_name(self, obj): return obj.course.name class CertificateTemplateCreateSerializer(serializers.ModelSerializer): class Meta: model = CertificateTemplate fields = ( 'name', 'course', 'document_type', 'workspace', ) class CertificateTemplateImageSerializer(serializers.ModelSerializer): class Meta: model = CertificateTemplate fields = ( 'base_logo', 'cert_logo', 'signature', 'site_logo', 'second_signature', 'background_image', ) class CertificationProcessSerializer(serializers.ModelSerializer): course_certification = serializers.SlugRelatedField(slug_field="link_hash", read_only=True) class Meta: model = CertificationProcess class BaseEvaluationSerializer(serializers.ModelSerializer): class Meta: model = Evaluation class BaseCertificationProcessSerializer(serializers.ModelSerializer): evaluation = BaseEvaluationSerializer() class Meta: model = CertificationProcess class BaseCourseCertificationSerializer(serializers.ModelSerializer): class Meta: model = CourseCertification class CourseCertificationSerializer(serializers.ModelSerializer): processes = BaseCertificationProcessSerializer(many=True, read_only=True) approved = BaseCertificationProcessSerializer(source='get_approved_process', read_only=True) course = serializers.SerializerMethodField() url = serializers.ReadOnlyField(source='get_absolute_url') class Meta: model = CourseCertification fields = ('link_hash', 'created_date', 'is_valid', 'processes', 'type', 'approved', 'course', 'url') @staticmethod def get_course(obj): return obj.course.id class EvaluationSerializer(serializers.ModelSerializer): processes = serializers.PrimaryKeyRelatedField(many=True, read_only=True) class Meta: model = Evaluation