diff --git a/src/account/models.py b/src/account/models.py index 111ebc356ff1912a8f62050d2af94088f425b3f8..83292a752d3eb42fc8334b1ecb3b4937eb6fe329 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 ad8ff938bdf4366e5a348813f3d29273796cf098..e0e93541308c2051bdff83156e4b3775892525e0 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 8e26ea20ec77461fe475a53e308c9d0194e131c2..efa6d39b9c825c731779e07bb9185517ce007adc 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 4ecb6e958c9a9349ca39a26d75c57463f030c1fc..6bc36ceb5a05d25dace35ca2caf3f765df62b020 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)