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

123 lines
3.4 KiB
Python
Raw Normal View History

from camps.mixins import CampViewMixin
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 ..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()