From d0eaf1a239eb50526295bf4c492307e2baf47667 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bodor=20M=C3=A1t=C3=A9?= <bodor.mate@kszk.bme.hu>
Date: Tue, 22 Jan 2019 13:43:27 +0100
Subject: [PATCH] Add denied role and create addmited, denied and
 homework_corrected email

---
 .../migrations/0002_auto_20190122_1341.py     | 18 +++++++++++++++
 src/account/models.py                         |  1 +
 src/account/serializers.py                    | 22 ++++++++++++++-----
 src/homework/serializers.py                   | 13 ++++++++---
 4 files changed, 45 insertions(+), 9 deletions(-)
 create mode 100644 src/account/migrations/0002_auto_20190122_1341.py

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 0000000..e9ee7b6
--- /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 d53c338..64c1452 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 edd0cde..f6787a3 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 68c2980..9d89c5e 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)
-- 
GitLab