示例#1
0
class DocumentMinSerializer(serializers.ModelSerializer):
    """
    Minimal Serializer for Documents
    """
    attachments = DocumentFileAttachmentSerializer(many=True)
    create_user = UserMinSerializer(read_only=True)
    status = DocumentStatusSerializer(read_only=True)
    type = DocumentTypeSerializer(read_only=True)
    milestone = serializers.SerializerMethodField()
    credit_trades = CreditTradeAuxiliarySerializer(many=True, read_only=True)
    history = DocumentHistorySerializer(many=True, read_only=True)

    def get_milestone(self, obj):
        """
        Additional information for milestone evidences
        """
        if obj.type.the_type == 'Evidence':
            milestone = obj.milestone
            serializer = DocumentMilestoneSerializer(milestone)

            return serializer.data

        return None

    class Meta:
        model = Document
        fields = ('id', 'title', 'create_user', 'status', 'type', 'milestone',
                  'credit_trades', 'attachments', 'update_timestamp',
                  'history')
        read_only_fields = ('id', 'title', 'create_user', 'status', 'type',
                            'milestone', 'credit_trades', 'attachments',
                            'update_timestamp', 'history')
示例#2
0
文件: FuelCode.py 项目: amichard/tfrs
class FuelCodeSerializer(serializers.ModelSerializer):
    """
    Default Serializer for Fuel Codes
    """
    status = FuelCodeStatusSerializer(read_only=True)
    create_user = UserMinSerializer(read_only=True)
    update_user = UserMinSerializer(read_only=True)

    feedstock_transport_mode = SlugRelatedField(
        allow_null=False,
        many=True,
        slug_field='name',
        queryset=TransportMode.objects.all()
    )
    fuel = SlugRelatedField(
        read_only=True,
        slug_field='name'
    )
    fuel_transport_mode = SlugRelatedField(
        allow_null=False,
        many=True,
        slug_field='name',
        queryset=TransportMode.objects.all()
    )

    class Meta:
        model = FuelCode
        fields = (
            'application_date', 'approval_date', 'carbon_intensity', 'company',
            'create_timestamp', 'create_user', 'effective_date', 'expiry_date',
            'facility_location', 'facility_nameplate', 'feedstock',
            'feedstock_location', 'feedstock_misc', 'feedstock_transport_mode',
            'former_company', 'fuel', 'fuel_code', 'fuel_code_version',
            'fuel_code_version_minor', 'fuel_transport_mode', 'id', 'status',
            'renewable_percentage', 'update_timestamp', 'update_user'
        )

        read_only_fields = (
            'application_date', 'approval_date', 'carbon_intensity', 'company',
            'create_timestamp', 'create_user', 'effective_date', 'expiry_date',
            'facility_location', 'facility_nameplate', 'feedstock',
            'feedstock_location', 'feedstock_misc', 'feedstock_transport_mode',
            'former_company', 'fuel', 'fuel_code', 'fuel_code_version',
            'fuel_code_version_minor', 'fuel_transport_mode', 'id', 'status',
            'renewable_percentage', 'update_timestamp', 'update_user'
        )
示例#3
0
class DocumentMinSerializer(serializers.ModelSerializer):
    """
    Minimal Serializer for Documents
    """
    attachments = DocumentFileAttachmentSerializer(many=True)
    create_user = UserMinSerializer(read_only=True)
    status = DocumentStatusSerializer(read_only=True)
    type = DocumentTypeSerializer(read_only=True)
    credit_trades = CreditTradeAuxiliarySerializer(many=True, read_only=True)
    history = DocumentHistorySerializer(many=True, read_only=True)

    class Meta:
        model = Document
        fields = ('id', 'title', 'create_user', 'status', 'type', 'milestone',
                  'credit_trades', 'attachments', 'update_timestamp',
                  'history')
        read_only_fields = ('id', 'title', 'create_user', 'status', 'type',
                            'milestone', 'credit_trades', 'attachments',
                            'update_timestamp', 'history')
示例#4
0
class DocumentDetailSerializer(serializers.ModelSerializer):
    """
    Document Serializer with Full Details
    """
    actions = serializers.SerializerMethodField()
    attachments = serializers.SerializerMethodField()
    comment_actions = serializers.SerializerMethodField()
    link_actions = serializers.SerializerMethodField()
    comments = serializers.SerializerMethodField()
    compliance_period = CompliancePeriodSerializer(read_only=True)
    status = DocumentStatusSerializer(read_only=True)
    type = DocumentTypeSerializer(read_only=True)
    credit_trades = serializers.SerializerMethodField()
    create_user = UserMinSerializer(read_only=True)

    def get_actions(self, obj):
        """
        If the user doesn't have any roles assigned, treat as though the user
        doesn't have available permissions
        """
        cur_status = obj.status.status
        request = self.context.get('request')

        # If the user doesn't have any roles assigned, treat as though the user
        # doesn't have available permissions
        if not request.user.roles:
            return []

        if cur_status == "Security Scan Failed":
            return DocumentActions.scan_failed(request)

        if cur_status == "Draft":
            return DocumentActions.draft(request)

        if cur_status == "Submitted" or cur_status == 'Pending Submission':
            return DocumentActions.submitted(request)

        if cur_status == "Received":
            return DocumentActions.received(request)

        return []

    def get_link_actions(self, obj):
        cur_status = obj.status.status
        request = self.context.get('request')

        # If the user doesn't have any roles assigned, treat as though the user
        # doesn't have available permissions
        if not request.user.roles:
            return []

        return DocumentActions.link_actions(request, cur_status)

    def get_attachments(self, obj):
        """
        Returns all file attachments for the document.
        We have to make sure not to include attachments that have been
        marked for removal.
        """
        attachments = DocumentFileAttachment.objects.filter(document_id=obj.id,
                                                            is_removed=False)

        serializer = DocumentFileAttachmentSerializer(attachments, many=True)

        return serializer.data

    def get_comments(self, obj):
        """
        Returns all the attached comments for the credit trade
        """
        request = self.context.get('request')

        # If the user doesn't have any roles assigned, treat as though the user
        # doesn't have available permissions
        if not request.user.roles:
            return []

        if request.user.is_government_user:
            comments = obj.comments
        else:
            comments = obj.unprivileged_comments

        serializer = DocumentCommentSerializer(comments,
                                               many=True,
                                               context={'request': request})

        return serializer.data

    def get_comment_actions(self, obj):
        """Attach available commenting actions"""
        request = self.context.get('request')
        return DocumentCommentActions.available_comment_actions(request, obj)

    def get_credit_trades(self, obj):
        """
        Returns the linked credit transactions to the file submission
        Will also filter based on the user type
        """
        request = self.context.get('request')
        credit_trades = obj.credit_trades

        if not request.user.is_government_user:
            credit_trades = credit_trades.filter(
                status__status__in=["Approved", "Declined"])

        serializer = CreditTradeAuxiliarySerializer(credit_trades,
                                                    many=True,
                                                    read_only=True)

        return serializer.data

    class Meta:
        model = Document
        fields = ('id', 'title', 'create_timestamp', 'create_user',
                  'update_timestamp', 'update_user', 'status', 'type',
                  'attachments', 'compliance_period', 'actions',
                  'comment_actions', 'comments', 'link_actions', 'milestone',
                  'credit_trades')

        read_only_fields = ('id', 'create_timestamp', 'create_user',
                            'update_timestamp', 'update_user', 'title',
                            'status', 'type', 'attachments',
                            'compliance_period', 'actions', 'comment_actions',
                            'milestone', 'link_actions', 'credit_trades')