diff --git a/src/account/migrations/0002_auto_20190122_1341.py b/src/account/migrations/0002_auto_20190122_1341.py new file mode 100644 index 0000000000000000000000000000000000000000..e9ee7b662af95a01f09815050e8650ab04603b30 --- /dev/null +++ b/src/account/migrations/0002_auto_20190122_1341.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2019-01-22 12:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='role', + field=models.CharField(choices=[('Staff', 'Staff'), ('Applicant', 'Applicant'), ('Student', 'Student'), ('Denied', 'Denied')], default='Applicant', max_length=10), + ), + ] diff --git a/src/account/models.py b/src/account/models.py index d53c338f04d7a91ae4a33e6ae8476ae0c17593ab..64c1452f1f04955140316d6925acc7172895754b 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -23,6 +23,7 @@ class Profile(models.Model): ('Staff', 'Staff'), ('Applicant', 'Applicant'), ('Student', 'Student'), + ('Denied', 'Denied'), ) join_date = models.DateTimeField(auto_now_add=True, editable=False) updated_at = models.DateTimeField(auto_now=True, editable=False) diff --git a/src/account/serializers.py b/src/account/serializers.py index edd0cde0024f259977034d8332b2217cc7b0abde..f6787a335ea237ecbeb597264bb49a8d5b195a7c 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from account import models from common.middleware import CurrentUserMiddleware +from common import email class ChoiceSerializer(serializers.ModelSerializer): @@ -12,11 +13,11 @@ class ChoiceSerializer(serializers.ModelSerializer): class ProfileSerializer(serializers.ModelSerializer): groups = serializers.SlugRelatedField(many=True, slug_field='choice', queryset=models.GroupChoice.objects.all()) updated_at = serializers.DateTimeField(read_only=True) - signed = serializers.BooleanField() full_name = serializers.SerializerMethodField() class Meta: model = models.Profile + read_only_fields = ('id', 'join_date', 'updated_at', 'full_name', ) fields = ( 'id', 'join_date', @@ -48,12 +49,21 @@ class ProfileSerializer(serializers.ModelSerializer): if value is False and modifier.role != "Staff": raise serializers.ValidationError("You cannot join without signed") return value + # + # def validate_id(self, value): + # modifier= CurrentUserMiddleware.get_current_user_profile() + # if value != modifier.id and modifier.role != "Staff": + # raise serializers.ValidationError("You don't have permission") + # return value - def validate_id(self, value): - modifier= CurrentUserMiddleware.get_current_user_profile() - if value != modifier.id and modifier.role != "Staff": - raise serializers.ValidationError("You don't have permission") - return value + def update(self, instance, validated_data): + new_role = validated_data.get('role', instance.role) + if instance.role != new_role: + if new_role == 'Student': + email.admitted(instance.user.email) + if new_role == 'Denied': + email.denied(instance.user.email) + return super().update(instance, validated_data) def get_full_name(self, obj): return obj.full_name diff --git a/src/homework/serializers.py b/src/homework/serializers.py index 68c2980eebbf369399d27fa934535f300c90b88c..9d89c5eeb2ed207f0b700efd7e6647e93d7f09a9 100755 --- a/src/homework/serializers.py +++ b/src/homework/serializers.py @@ -4,7 +4,6 @@ from account.models import Profile from . import models from common import email from common.middleware import CurrentUserMiddleware -from common.email import homework_corrected class TaskSerializer(serializers.ModelSerializer): @@ -39,10 +38,18 @@ class SolutionSerializer(serializers.ModelSerializer): 'note', ) - def validate(self, data): - if timezone.now() > data['task'].deadline: + def validate_task(self, value): + if timezone.now() > value.deadline: raise serializers.ValidationError('You late.') + return value + + def validate(self, data): profile = CurrentUserMiddleware.get_current_user_profile() if profile.role != 'Staff' and (data['accepted'] or data['corrected'] or data['note'] != ''): raise serializers.ValidationError("You don't have permission!") return data + + def update(self, instance, validated_data): + if instance.corrected == False and validated_data.get('corrected', instance.corrected) == True: + email.homework_corrected(instance.created_by.user.email) + return super().update(instance, validated_data)