bornhack-website/src/teams/views/tasks.py

124 lines
3.4 KiB
Python
Raw Normal View History

from django import forms
2018-08-14 18:13:46 +00:00
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseNotAllowed, HttpResponseRedirect
from django.views.generic import CreateView, DetailView, UpdateView
from camps.mixins import CampViewMixin
from ..models import TaskComment, Team, TeamMember, TeamTask
2018-07-23 21:12:57 +00:00
from .mixins import EnsureTeamResponsibleMixin, TeamViewMixin
class TeamTasksView(CampViewMixin, DetailView):
template_name = "team_tasks.html"
2019-06-16 12:32:24 +00:00
context_object_name = "team"
model = Team
2019-06-16 12:32:24 +00:00
slug_url_kwarg = "team_slug"
active_menu = "tasks"
2018-08-14 18:13:46 +00:00
class TaskCommentForm(forms.ModelForm):
class Meta:
model = TaskComment
2019-06-16 12:32:24 +00:00
fields = ["comment"]
2018-08-14 18:13:46 +00:00
2018-07-23 21:12:57 +00:00
class TaskDetailView(CampViewMixin, TeamViewMixin, DetailView):
template_name = "task_detail.html"
context_object_name = "task"
model = TeamTask
2019-06-16 12:32:24 +00:00
active_menu = "tasks"
2018-08-14 18:13:46 +00:00
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
2019-06-16 12:32:24 +00:00
context["comment_form"] = TaskCommentForm()
2018-08-14 18:13:46 +00:00
return context
def post(self, request, **kwargs):
task = self.get_object()
if request.user not in task.team.members.all():
2019-06-16 12:32:24 +00:00
return HttpResponseNotAllowed("Nope")
2018-08-14 18:13:46 +00:00
form = TaskCommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = TeamMember.objects.get(user=request.user, team=task.team)
comment.task = task
comment.save()
else:
messages.error(request, "Something went wrong.")
return HttpResponseRedirect(task.get_absolute_url())
class TaskForm(forms.ModelForm):
class Meta:
model = TeamTask
2019-06-16 12:32:24 +00:00
fields = ["name", "description", "when", "completed"]
def __init__(self, **kwargs):
super().__init__(**kwargs)
2019-06-16 12:32:24 +00:00
self.fields["when"].widget.widgets = [
forms.DateTimeInput(attrs={"placeholder": "Start"}),
forms.DateTimeInput(attrs={"placeholder": "End"}),
]
2019-06-16 12:32:24 +00:00
class TaskCreateView(
LoginRequiredMixin,
CampViewMixin,
TeamViewMixin,
EnsureTeamResponsibleMixin,
CreateView,
):
model = TeamTask
template_name = "task_form.html"
form_class = TaskForm
2019-06-16 12:32:24 +00:00
active_menu = "tasks"
def get_team(self):
return Team.objects.get(
2019-06-16 12:32:24 +00:00
camp__slug=self.kwargs["camp_slug"], slug=self.kwargs["team_slug"]
)
def form_valid(self, form):
task = form.save(commit=False)
task.team = self.team
if not task.name:
task.name = "noname"
task.save()
return HttpResponseRedirect(task.get_absolute_url())
def get_success_url(self):
return self.get_object().get_absolute_url()
2019-06-16 12:32:24 +00:00
class TaskUpdateView(
LoginRequiredMixin,
CampViewMixin,
TeamViewMixin,
EnsureTeamResponsibleMixin,
UpdateView,
):
model = TeamTask
template_name = "task_form.html"
form_class = TaskForm
2019-06-16 12:32:24 +00:00
active_menu = "tasks"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
2019-06-16 12:32:24 +00:00
context["team"] = self.team
return context
def form_valid(self, form):
task = form.save(commit=False)
task.team = self.team
if not task.name:
task.name = "noname"
task.save()
return HttpResponseRedirect(task.get_absolute_url())
def get_success_url(self):
return self.get_object().get_absolute_url()