set settings
This commit is contained in:
parent
f836f37f55
commit
375426dd38
@ -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 (
|
||||
|
@ -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)
|
||||
|
@ -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">
|
||||
Набор открыт для решения <input type="checkbox" name="opened" {% if set.opened %}checked{% endif %}><br>
|
||||
Набор доступен всем пользователям <input type="checkbox" name="public" {% if set.public %}checked{% endif %}>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<p>
|
||||
Время начала<br>
|
||||
</p>
|
||||
<p>
|
||||
Без ограничений <input type="checkbox">
|
||||
Без ограничений <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>
|
||||
Без ограничений <input type="checkbox">
|
||||
Без ограничений <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 %}
|
Loading…
Reference in New Issue
Block a user