sprint/Main/models/userinfo.py
2021-09-05 15:28:24 +03:00

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)