diff --git a/Main/models/set.py b/Main/models/set.py index 480acfe..cddf999 100644 --- a/Main/models/set.py +++ b/Main/models/set.py @@ -17,6 +17,18 @@ class Set(models.Model): end_time = models.DateTimeField(default=None, null=True) editors = ArrayField(models.TextField(), default=list) + @property + def start_time_format(self): + if self.start_time is None: + return None + return self.start_time.astimezone(timezone.get_current_timezone()).strftime("%Y-%m-%dT%H:%M") + + @property + def end_time_format(self): + if self.end_time is None: + return None + return self.end_time.astimezone(timezone.get_current_timezone()).strftime("%Y-%m-%dT%H:%M") + @property def available(self): return ( diff --git a/Main/views/SetSettingsView.py b/Main/views/SetSettingsView.py index 51f4531..56e8820 100644 --- a/Main/views/SetSettingsView.py +++ b/Main/views/SetSettingsView.py @@ -1,35 +1,86 @@ -from django.db.models import Q +import datetime +from typing import Optional -from Main.models import SetTask, Task -from SprintLib.BaseView import BaseView +import pytz +from django.utils import timezone + +from Main.models import SetTask, Set +from SprintLib.BaseView import BaseView, AccessError class SetSettingsView(BaseView): required_login = True view_file = "set_settings.html" endpoint = "admin/set" + current_set: Optional[Set] = None + + def pre_handle(self): + self.current_set = self.entities.set + if ( + self.request.user != self.current_set.creator + and self.request.user.username not in self.current_set.editors + ): + raise AccessError() def get(self): - self.context['settasks'] = SetTask.objects.filter(set=self.entities.set).order_by('name') + self.context["settasks"] = SetTask.objects.filter( + set=self.current_set + ).order_by("name") + self.context["start_time"] = ( + self.current_set.start_time_format + if self.current_set.start_time + else timezone.now().strftime("%Y-%m-%dT%H:%M") + ) + self.context["end_time"] = ( + self.current_set.end_time_format + if self.current_set.end_time + else timezone.now().strftime("%Y-%m-%dT%H:%M") + ) def post_save(self): for key, value in self.request.POST.items(): - if key.startswith('settask_'): - st = SetTask.objects.get(id=key.split('_')[1]) + if key.startswith("settask_"): + st = SetTask.objects.get(id=key.split("_")[1]) st.name = value st.save() - self.entities.set.name = self.request.POST['name'] - self.entities.set.save() - return '/admin/set?set_id=' + str(self.entities.set.id) + self.current_set.name = self.request.POST["name"] + self.current_set.save() + return "/admin/set?set_id=" + str(self.current_set.id) def post_edit(self): current_tasks = self.entities.set.tasks task_ids = [task.id for task in current_tasks] for key, value in self.request.POST.items(): - if key.startswith('task_'): - i = int(key.split('_')[1]) + if key.startswith("task_"): + i = int(key.split("_")[1]) if i not in task_ids: SetTask.objects.create(set=self.entities.set, task_id=i) - to_delete = [i for i in task_ids if 'task_' + str(i) not in self.request.POST] + to_delete = [i for i in task_ids if "task_" + str(i) not in self.request.POST] SetTask.objects.filter(task_id__in=to_delete).delete() - return '/admin/set?set_id=' + str(self.entities.set.id) + return "/admin/set?set_id=" + str(self.entities.set.id) + + def post_time(self): + try: + tz = pytz.timezone("Europe/Moscow") + if "start_time_check" in self.request.POST: + self.current_set.start_time = None + else: + self.current_set.start_time = tz.localize( + datetime.datetime.strptime( + self.request.POST["start_time"], "%Y-%m-%dT%H:%M" + ) + ) + if "end_time_check" in self.request.POST: + self.current_set.end_time = None + else: + self.current_set.end_time = tz.localize( + datetime.datetime.strptime( + self.request.POST["end_time"], "%Y-%m-%dT%H:%M" + ) + ) + self.current_set.opened = 'opened' in self.request.POST.keys() + self.current_set.public = 'public' in self.request.POST.keys() + except ValueError: + return "/admin/set?set_id=" + str(self.current_set.id) + self.current_set.save() + return "/admin/set?set_id=" + str(self.current_set.id) diff --git a/templates/set_settings.html b/templates/set_settings.html index cf832c6..3321ec1 100644 --- a/templates/set_settings.html +++ b/templates/set_settings.html @@ -2,11 +2,18 @@ {% block title %}{{ set.name }}{% endblock %} +{% block scripts %} + function handle(value) { + const elem = document.getElementById(value); + elem.hidden = !elem.hidden; + } +{% endblock %} + {% block main %}
+