Files
fet2020/fet2020/tasks/views.py

190 lines
5.6 KiB
Python

import logging
from collections import deque
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User
from django.shortcuts import render
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
from django.urls import reverse_lazy, reverse
from django.utils import timezone
from authentications.decorators import authenticated_user
from documents.api import get_pad_link
from documents.etherpadlib import add_ep_cookie
from fet2020.utils import add_log_action
from intern.models import Topic
from .forms import DocumentCreateForm, TaskCreateForm, TaskUpdateForm
from .models import Document, Task, TaskList
logger = logging.getLogger(__name__)
@authenticated_user
def index(request):
completed = False
tasklist = None
show_tasklist = None
show_all_tasks = True
if request.method == "POST":
if "btn_checkbox" in request.POST:
for task_id in request.POST.getlist("checkbox"):
task = Task.objects.get(id=task_id)
if not task.completed:
task.completed = True
task.completed_date = timezone.now().date()
task.save()
if request.method == "GET":
if "tasklist" in request.GET:
if request.GET["tasklist"] != "all":
tasklist = TaskList.objects.filter(id=request.GET["tasklist"]).first()
show_tasklist = tasklist.id
if "tasks" in request.GET:
if request.GET["tasks"] == "all":
show_all_tasks = True
else:
show_all_tasks = False
if "open_tasks" in request.GET:
completed = False
if "closed_tasks" in request.GET:
completed = True
tasks = Task.taskmanager.get_tasks(
user=request.user.id,
completed=completed,
task_list=tasklist,
all_tasks=show_all_tasks,
)
tasklists = TaskList.objects.all()
context = {
"tasks": tasks,
"tasklists": tasklists,
"current_user": request.user.id,
"completed": completed,
"show_tasklist": show_tasklist,
"show_all_tasks": show_all_tasks,
}
return render(request, "tasks/index.html", context)
class TaskCreate(LoginRequiredMixin, CreateView):
model = Task
success_url = reverse_lazy("tasks:index")
template_name = "tasks/task_create.html"
form_class = TaskCreateForm
def form_valid(self, form):
form.instance.created_by = self.request.user
add_log_action(self.request, form, "tasks", "task", True)
return super().form_valid(form)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["user"] = self.request.user
return kwargs
class TaskUpdate(LoginRequiredMixin, UpdateView):
model = Task
template_name = "tasks/task_update.html"
form_class = TaskUpdateForm
task_id = None
task_list = None
def form_valid(self, form):
add_log_action(self.request, form, "tasks", "task", False)
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["task_list"] = self.task_list
return context
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["task_list"] = self.task_list
return kwargs
def get_initial(self):
self.task_id = self.kwargs.get("pk")
self.task_list = Task.objects.get(id=self.task_id).task_list
def get_success_url(self):
kwargs = {
"pk": self.task_id,
}
return reverse("tasks:task-detail", kwargs=kwargs)
class TaskDetail(LoginRequiredMixin, DetailView):
model = Task
success_url = reverse_lazy("tasks:index")
template_name = "tasks/task_detail.html"
def get(self, request, *args, **kwargs):
response = super().get(request, *args, **kwargs)
try:
response = add_ep_cookie(self.request, response)
except Exception as e:
logger.info("Etherpad Server doesn't work. Error: %s", e)
return response
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
docus = Document.objects.filter(task__id=self.object.id).order_by("-date")
documents = deque([])
# list of etherpad url-link of any documents
for elem in docus:
documents.append(
{
"title": elem.title,
"date": elem.date,
"etherpad_key": get_pad_link(elem.etherpad_key),
}
)
context["documents"] = documents
context["topic"] = Topic.objects.filter(task_list=self.object.task_list).first()
return context
class DocumentCreate(LoginRequiredMixin, CreateView):
model = Document
template_name = "tasks/attachment_create.html"
form_class = DocumentCreateForm
task_id = None
def form_valid(self, form):
form.instance.created_by = self.request.user
add_log_action(self.request, form, "tasks", "document", True)
return super().form_valid(form)
def get_initial(self):
self.task_id = self.kwargs.get("pk")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["task"] = Task.objects.get(pk=self.task_id)
return context
def get_success_url(self):
kwargs = {
"pk": self.task_id,
}
return reverse("tasks:task-detail", kwargs=kwargs)