From a9709765724171a794a320a8dda368fcdce7ec3e Mon Sep 17 00:00:00 2001
From: rlacko <rlacko@sch.bme.hu>
Date: Sat, 1 Feb 2020 18:32:13 +0100
Subject: [PATCH] added bits

---
 src/account/models.py      | 12 ++++++++----
 src/account/serializers.py | 10 +++++++---
 src/document/models.py     |  9 ++++++++-
 src/homework/models.py     |  5 +++++
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/account/models.py b/src/account/models.py
index 111ebc3..83292a7 100644
--- a/src/account/models.py
+++ b/src/account/models.py
@@ -1,7 +1,8 @@
 from django.db import models
 from django.contrib.auth.models import User
 from solo.models import SingletonModel
-
+from django.db.models import Sum
+from django.db.models.functions import Coalesce   
 
 class GroupChoice(models.Model):
     TEAMS = (
@@ -47,9 +48,12 @@ class Profile(models.Model):
     role = models.CharField(max_length=10, choices=ROLES, default='Applicant')
 
     @property
-    def score(self):
-        return self.events_visitor.all().count() * 10 + \
-            self.solution.filter(accepted=True).count() * 50
+    def events_visited(self):
+        return self.events_visitor.all().count()
+    
+    @property
+    def homework_bits(self):
+        return self.solution.filter(accepted=True).values('task__bits').aggregate(total_bits=Sum('task__bits')).get('total_bits')
 
     @property
     def full_name(self):
diff --git a/src/account/serializers.py b/src/account/serializers.py
index ad8ff93..e0e9354 100644
--- a/src/account/serializers.py
+++ b/src/account/serializers.py
@@ -8,7 +8,6 @@ class ChoiceSerializer(serializers.ModelSerializer):
     class Meta:
         model = models.GroupChoice
         fields = ('choice', 'profile')
-                
 
 class ProfileSerializer_User(serializers.ModelSerializer):
     groups = serializers.SlugRelatedField(
@@ -17,6 +16,7 @@ class ProfileSerializer_User(serializers.ModelSerializer):
         queryset=models.GroupChoice.objects.all())
     updated_at = serializers.DateTimeField(read_only=True)
     full_name = serializers.SerializerMethodField()
+    bits = serializers.SerializerMethodField()
 
     class Meta:
         model = models.Profile
@@ -33,7 +33,7 @@ class ProfileSerializer_User(serializers.ModelSerializer):
             'motivation_exercise',
             'full_name',
             'role',
-            'score',
+            'bits'
         )
 
     def validate_updated_at(self, value):
@@ -66,6 +66,9 @@ class ProfileSerializer_User(serializers.ModelSerializer):
 
     def get_full_name(self, obj):
         return obj.full_name
+    
+    def get_bits(self, obj):
+        return obj.homework_bits + obj.events_visited
 
 
 class ProfileSerializer_Staff(serializers.ModelSerializer):
@@ -91,7 +94,8 @@ class ProfileSerializer_Staff(serializers.ModelSerializer):
             'motivation_exercise',
             'full_name',
             'role',
-            'score',
+            'events_visited',
+            'homework_bits'
         )
 
     def validate_updated_at(self, value):
diff --git a/src/document/models.py b/src/document/models.py
index 8e26ea2..efa6d39 100644
--- a/src/document/models.py
+++ b/src/document/models.py
@@ -7,6 +7,8 @@ from account.models import Profile
 from homework.models import Solution
 from common.validators import FileSizeValidator
 
+from common.middleware import CurrentUserMiddleware
+
 
 def document_file_name(instance, filename):
     return '/'.join([
@@ -18,7 +20,12 @@ def document_file_name(instance, filename):
 
 
 class Document(models.Model):
-    uploaded_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
+    uploaded_by = models.ForeignKey(
+        Profile,
+        on_delete=models.DO_NOTHING,
+        related_name='documents',
+        default=CurrentUserMiddleware.get_current_user_profile,
+    )
     uploaded_at = models.DateTimeField(auto_now_add=True, editable=False)
     name = models.CharField(max_length=150, blank=True, default='')
     description = models.TextField(blank=True, default='')
diff --git a/src/homework/models.py b/src/homework/models.py
index 4ecb6e9..6bc36ce 100755
--- a/src/homework/models.py
+++ b/src/homework/models.py
@@ -15,6 +15,7 @@ class Task(models.Model):
     title = models.CharField(max_length=150)
     text = models.TextField()
     deadline = models.DateTimeField()
+    bits = models.IntegerField(default=1)
 
     def __str__(self):
         return self.title
@@ -34,5 +35,9 @@ class Solution(models.Model):
     accepted = models.BooleanField(blank=True, default=False)
     corrected = models.BooleanField(blank=True, default=False)
 
+    @property
+    def my_bits(self):
+        return 10
+
     def __str__(self):
         return "[{}] {}".format(self.created_at, self.created_by.full_name)
-- 
GitLab