diff --git a/Main/models/set.py b/Main/models/set.py index 81dc2e8..9713aff 100644 --- a/Main/models/set.py +++ b/Main/models/set.py @@ -1,3 +1,5 @@ +from functools import cached_property + from django.contrib.auth.models import User from django.db import models from django.utils import timezone @@ -21,6 +23,6 @@ class Set(models.Model): and (self.end_time is None or timezone.now() <= self.end_time) ) - @property + @cached_property def tasks(self): return Task.objects.filter(settasks__set=self).order_by("settasks__name") diff --git a/Main/views/SetSettingsView.py b/Main/views/SetSettingsView.py index d6be868..fcf3ef5 100644 --- a/Main/views/SetSettingsView.py +++ b/Main/views/SetSettingsView.py @@ -1,3 +1,6 @@ +from django.db.models import Q + +from Main.models import SetTask, Task from SprintLib.BaseView import BaseView @@ -5,3 +8,29 @@ class SetSettingsView(BaseView): required_login = True view_file = "set_settings.html" endpoint = "admin/set" + + def get(self): + self.context['settasks'] = SetTask.objects.filter(set=self.entities.set).order_by('name') + self.context['tasks'] = Task.objects.filter(Q(public=True) | Q(creator=self.request.user) | Q(editors__in=self.request.user.username)).order_by('name') + + def post_save(self): + for key, value in self.request.POST.items(): + 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) + + 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 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] + SetTask.objects.filter(task_id__in=to_delete).delete() + return '/admin/set?set_id=' + str(self.entities.set.id) diff --git a/demo.py b/demo.py deleted file mode 100644 index ea2044a..0000000 --- a/demo.py +++ /dev/null @@ -1,11 +0,0 @@ -from random import randrange -''' -x - y = 21 -x + 6 = (y + 6) * 5 - -x = 21 + y - -27 + y = 5y + 30 -4y = -3 -y = -3/4 -''' \ No newline at end of file diff --git a/dev.sh b/dev.sh deleted file mode 100644 index 74fce4d..0000000 --- a/dev.sh +++ /dev/null @@ -1 +0,0 @@ -ssh root@77.246.159.65 --password k5lUgVb66FnV \ No newline at end of file diff --git a/docker-compose-local.yaml b/docker-compose-local.yaml deleted file mode 100644 index a4cf46c..0000000 --- a/docker-compose-local.yaml +++ /dev/null @@ -1,41 +0,0 @@ -version: "3" - - -services: - - postgres: - restart: always - build: - context: . - dockerfile: dockerfiles/postgres/Dockerfile - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password - POSTGRES_DB: sprint - volumes: - - ./postgres:/var/lib/postgresql/data - ports: - - "5432:5432" - - rabbitmq: - restart: always - build: - context: . - dockerfile: dockerfiles/rabbitmq/Dockerfile - ports: - - "15672:15672" - - "5672:5672" - - worker: - restart: always - image: sprint - privileged: true - command: scripts/create_worker.sh - environment: - SOLUTIONS_ROOT_EXTERNAL: "data/solutions" - depends_on: - - rabbitmq - - postgres - volumes: - - ./data:/usr/src/app/data - - /var/run/docker.sock:/var/run/docker.sock \ No newline at end of file diff --git a/templates/set.html b/templates/set.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/templates/set.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/templates/set_settings.html b/templates/set_settings.html index e982553..4607e78 100644 --- a/templates/set_settings.html +++ b/templates/set_settings.html @@ -3,9 +3,45 @@ {% block title %}{{ set.name }}{% endblock %} {% block main %} -

{{ set.name }}

-

Таски

- {% for settask in set.settasks.all %} - {{ settask.task.name }}
- {% endfor %} +
+ {% csrf_token %} + +

+

Таски

+ {% for settask in settasks %} + {% if settask.task.creator == user or user.username in settask.task.editors %}{{ settask.task.name }}{% else %}{{ settask.task.name }}{% endif %}
+ {% endfor %} + +
+ {% endblock %} \ No newline at end of file diff --git a/web.js b/web.js deleted file mode 100644 index 9007e09..0000000 --- a/web.js +++ /dev/null @@ -1,31 +0,0 @@ - function send_code() { - if (document.getElementById('state').value == 'code') { - $.ajax({ - type: "POST", - url: '/send_code', - data: {"username": document.getElementById('username').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "create"}, - success: function(data) { - if (data['success']) { - document.getElementById('code').hidden = false; - document.getElementById('enter').firstChild.data = "Вход"; - document.getElementById('state').value = "verify"; - } else { - const p = document.getElementById('message'); - p.firstChild.data = data['message']; - } - }}); - } else { - $.ajax({ - type: "POST", - url: '/send_code', - data: {"username": document.getElementById('username').value, "code": document.getElementById('code').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "check"}, - success: function(data) { - if (data['success']) { - window.location.href = '/'; - } else { - p.firstChild.data = data['message']; - } - }, - }); - } - } \ No newline at end of file