sprint/Main/models/set.py
2022-04-08 00:19:13 +03:00

68 lines
2.2 KiB
Python

from functools import cached_property
from django.contrib.auth.models import User
from django.contrib.postgres.fields import ArrayField
from django.db import models
from django.db.models.functions import Length
from django.utils import timezone
from Main.models.task import Task
from SprintLib.language import languages
class Set(models.Model):
name = models.TextField()
public = models.BooleanField(default=False)
creator = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
opened = models.BooleanField(default=False)
start_time = models.DateTimeField(default=None, null=True, blank=True)
end_time = models.DateTimeField(default=None, null=True, blank=True)
editors = ArrayField(models.TextField(), default=list)
languages = ArrayField(models.IntegerField(), default=list)
auto_add_new_languages = models.BooleanField(default=True)
description = models.TextField(default='')
@property
def language_models(self):
return [languages[lang] for lang in self.languages]
@property
def start_time_moscow(self):
if self.start_time is None:
return None
return self.start_time.astimezone(timezone.get_current_timezone())
@property
def end_time_moscow(self):
if self.end_time is None:
return None
return self.end_time.astimezone(timezone.get_current_timezone())
@property
def start_time_format(self):
if self.start_time is None:
return None
return self.start_time_moscow.strftime("%Y-%m-%dT%H:%M")
@property
def end_time_format(self):
if self.end_time is None:
return None
return self.end_time_moscow.strftime("%Y-%m-%dT%H:%M")
@property
def available(self):
return (
self.opened
and (self.start_time is None or timezone.now() >= self.start_time)
and (self.end_time is None or timezone.now() <= self.end_time)
)
@cached_property
def tasks(self):
return Task.objects.filter(settasks__set=self).order_by("settasks__name")
@cached_property
def settasks_ordered(self):
return self.settasks.order_by(Length('name'), 'name')