set settings

This commit is contained in:
Egor Matveev 2022-01-21 12:27:53 +03:00
parent f836f37f55
commit 375426dd38
3 changed files with 99 additions and 23 deletions

View File

@ -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 (

View File

@ -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)

View File

@ -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 %}
<form method="POST">
{% csrf_token %}
<input type="hidden" name="action" value="save">
<h2><input name="name" value="{{ set.name }}"></h2>
<h3><input name="name" value="{{ set.name }}"></h3>
<h4>Таски</h4>
{% for settask in settasks %}
<input name="settask_{{ settask.id }}" style="width: 30px;" value="{{ settask.name }}"> {% if settask.task.creator == user or user.username in settask.task.editors %}<a href="/admin/task?task_id={{ settask.task.id }}">{{ settask.task.name }}</a>{% else %}{{ settask.task.name }}{% endif %}<br>
@ -45,18 +52,22 @@
</div>
</div>
<hr><hr>
<h3>Время доступа</h3>
<h5>
<h3>Настройки доступа</h3>
<form method="POST">
{% csrf_token %}
<input type="hidden" name="action" value="time">
Набор открыт для решения&emsp;<input type="checkbox" name="opened" {% if set.opened %}checked{% endif %}><br>
Набор доступен всем пользователям&emsp;<input type="checkbox" name="public" {% if set.public %}checked{% endif %}>
<div class="row">
<div class="col-2">
<p>
Время начала<br>
</p>
<p>
Без ограничений&emsp;<input type="checkbox">
Без ограничений&emsp;<input type="checkbox" name="start_time_check" onclick="handle('start_time');" {% if not set.start_time %}checked{% endif %}>
</p>
<p>
<input type="datetime-local" value="">
<p id="start_time" {% if not set.start_time %}hidden{% endif %}>
<input type="datetime-local" name="start_time" value="{{ start_time }}">
</p>
</div>
<div class="col-2">
@ -64,12 +75,14 @@
Время окончания<br>
</p>
<p>
Без ограничений&emsp;<input type="checkbox">
Без ограничений&emsp;<input type="checkbox" name="end_time_check" onclick="handle('end_time')" {% if not set.end_time %}checked{% endif %}>
</p>
<p>
<input type="datetime-local">
<p id="end_time" {% if not set.end_time %}hidden{% endif %}>
<input type="datetime-local" name="end_time" value="{{ end_time }}">
</p>
</div>
</div>
</h5>
<button class="btn btn-light"><i class="fa fa-save"></i> Сохранить</button>
</form>
<hr><hr>
{% endblock %}