Skip to content
Snippets Groups Projects
serializers.py 3.66 KiB
Newer Older
Bodor Máté's avatar
Bodor Máté committed
from rest_framework import serializers
from django.utils import timezone
from account.models import Profile
Bodor Máté's avatar
Bodor Máté committed
from . import models
Bodor Máté's avatar
Bodor Máté committed
from common import email
Bodor Máté's avatar
Bodor Máté committed


class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Task
        read_only_fields = ('created_by', 'created_at', 'updated_at')
        fields = '__all__'
Bodor Máté's avatar
Bodor Máté committed

Bodor Mate's avatar
Bodor Mate committed
    def validate(self, data):
        if timezone.now() >= data['deadline']:
Rafael László's avatar
Rafael László committed
            raise serializers.ValidationError(
                'Please, enter appropriate deadline.')
Bodor Mate's avatar
Bodor Mate committed
        return data

    def create(self, validated_data):
Rafael László's avatar
Rafael László committed
        profiles = Profile.objects.filter(
            role="Student").exclude(
            user__email='')
Bodor Máté's avatar
Bodor Máté committed
        for profile in profiles:
            email.new_homework(profile.user, validated_data.get('deadline'))
        return self.Meta.model.objects.create(**validated_data)

Rafael László's avatar
Rafael László committed

class SolutionSerializer_Student(serializers.ModelSerializer):
Bodor Máté's avatar
Bodor Máté committed
    class Meta:
        model = models.Solution
Rafael László's avatar
Rafael László committed
        read_only_fields = (
            'created_by',
            'created_at',
            'updated_at',
            'ready',
            'files')
Bodor Máté's avatar
Bodor Máté committed
            'id',
            'task',
            'created_at',
            'updated_at',
            'accepted',
            'files',
            'created_by',
            'corrected',
            'note',
        )
    def validate_task(self, value):
        if timezone.now() > value.deadline:
            raise serializers.ValidationError('You late.')
    def validate_note(self, value):
        if value != '':
Rafael László's avatar
Rafael László committed
            raise serializers.ValidationError(
                "You don't have permission to create note!")
        return value

    def update(self, instance, validated_data):
Rafael László's avatar
Rafael László committed
        if instance.corrected is not True and validated_data.get(
                'corrected', instance.corrected) is True:
            email.homework_corrected(
                instance.created_by.user,
                instance.task.title,
                validated_data.get('accepted', instance.accepted)
            )
        return super().update(instance, validated_data)

    def create(self, validated_data):
        profile = self.context['request'].user.profile
Rafael László's avatar
Rafael László committed
        models.Solution.objects.filter(
            created_by=profile,
            task=validated_data['task']).delete()
        return super().create(validated_data)

Rafael László's avatar
Rafael László committed

class SolutionSerializer_Staff(serializers.ModelSerializer):
    class Meta:
        model = models.Solution
Rafael László's avatar
Rafael László committed
        read_only_fields = (
            'created_by',
            'created_at',
            'updated_at',
            'ready',
            'files')
        fields = (
            'id',
            'task',
            'created_at',
            'updated_at',
            'accepted',
            'files',
            'created_by',
            'corrected',
            'note',
        )

    def validate_task(self, value):
        if timezone.now() > value.deadline:
            raise serializers.ValidationError('You late.')
        return value

    def update(self, instance, validated_data):
Rafael László's avatar
Rafael László committed
        if instance.corrected is not True and validated_data.get(
                'corrected', instance.corrected) is True:
Bodor Máté's avatar
Bodor Máté committed
            email.homework_corrected(
                instance.created_by.user,
                instance.task.title,
                validated_data.get('accepted', instance.accepted)
            )
        return super().update(instance, validated_data)

    def create(self, validated_data):
        profile = self.context['request'].user.profile
Rafael László's avatar
Rafael László committed
        models.Solution.objects.filter(
            created_by=profile,
            task=validated_data['task']).delete()
        return super().create(validated_data)