sprint/Main/models/userinfo.py
Egor Matveev 8bf25ef4f0 verified
2021-11-21 23:32:12 +03:00

85 lines
2.9 KiB
Python

from django.contrib.auth.models import User
from django.db import models
from django.db.models import Q
from django.utils import timezone
from Main.models.group import Group
from Main.models.settask import SetTask
from Main.models.subscription import Subscription
from Main.models.task import Task
from Sprint.settings import CONSTS
from SprintLib.language import languages
class UserInfo(models.Model):
surname = models.TextField(null=True)
name = models.TextField(null=True)
last_request = models.DateTimeField(default=timezone.now)
profile_picture_fs_id = models.IntegerField(null=True)
favourite_language_id = models.IntegerField(null=True)
rating = models.IntegerField(default=0)
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
telegram_chat_id = models.TextField(default="")
notification_solution_result = models.BooleanField(default=False)
code = models.IntegerField(null=True)
verified = models.BooleanField(default=False)
@property
def has_favourite_language(self):
return self.favourite_language_id is not None
@property
def favourite_language(self):
if not self.has_favourite_language:
return None
return languages[self.favourite_language_id]
def _append_task(self, task, tasks):
if task.creator == self.user or task.public or self.user.is_superuser:
tasks.append(task)
return
for st in SetTask.objects.filter(task=task):
if st.set.public:
tasks.append(task)
return
for group in Group.objects.filter(sets=st.set):
for sub in Subscription.objects.filter(group=group):
if sub.user == self.user:
tasks.append(task)
return
@property
def available_tasks(self):
tasks = []
for task in Task.objects.all():
self._append_task(task, tasks)
return sorted(tasks, key=lambda x: x.time_estimation)
@property
def place(self):
return len(UserInfo.objects.filter(rating__gt=self.rating)) + 1
@property
def activity_status(self):
if timezone.now() - self.last_request <= timezone.timedelta(minutes=5):
return CONSTS["online_status"]
return timezone.datetime.strftime(self.last_request, "%d-%m-%Y %H:%M")
@property
def can_create(self):
# todo:
return self.user.is_superuser
@property
def has_profile_pic(self):
try:
return self.profile_picture_fs_id is not None
except ValueError:
return False
@property
def profile_pic_url(self):
if self.has_profile_pic:
return "/image?id=" + str(self.profile_picture_fs_id)
return "https://i2.wp.com/electrolabservice.com/wp-content/uploads/2021/01/blank-profile-picture-mystery-man-avatar-973460.jpg"