74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
from django.contrib.auth.models import User
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
|
|
from Main.models.subscription import Subscription
|
|
from Main.models.group import Group
|
|
from Main.models.settask import SetTask
|
|
from Main.models.task import Task
|
|
from Sprint.settings import CONSTS
|
|
|
|
|
|
class UserInfo(models.Model):
|
|
surname = models.TextField()
|
|
name = models.TextField()
|
|
middle_name = models.TextField()
|
|
last_request = models.DateTimeField(default=timezone.now)
|
|
profile_picture = models.ImageField(upload_to="profile_pictures", 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)
|
|
|
|
def _append_task(self, task, tasks):
|
|
if task.creator == self.user or task.public:
|
|
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 tasks
|
|
|
|
@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.url is not None
|
|
except ValueError:
|
|
return False
|
|
|
|
@property
|
|
def profile_pic_url(self):
|
|
if self.has_profile_pic:
|
|
return self.profile_picture.url
|
|
return "https://i2.wp.com/electrolabservice.com/wp-content/uploads/2021/01/blank-profile-picture-mystery-man-avatar-973460.jpg"
|
|
|
|
def __str__(self):
|
|
return "{} {} {}".format(self.surname, self.name, self.middle_name)
|