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

117 lines
3.5 KiB
Python
Raw Normal View History

2018-08-14 18:13:46 +00:00
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
2018-08-14 18:13:46 +00:00
from django.http import HttpResponseRedirect, HttpResponseNotAllowed
from django.views.generic import DetailView, CreateView, UpdateView
from django import forms
2018-08-14 18:13:46 +00:00
from django.views.generic.edit import ProcessFormView
from camps.mixins import CampViewMixin
2018-08-14 18:13:46 +00:00
from ..models import Team, TeamTask, TaskComment, TeamMember
2018-07-23 21:12:57 +00:00
from .mixins import EnsureTeamResponsibleMixin, TeamViewMixin
class TeamTasksView(CampViewMixin, DetailView):
template_name = "team_tasks.html"
context_object_name = 'team'
model = Team
slug_url_kwarg = 'team_slug'
2018-08-04 11:45:52 +00:00
active_menu = 'tasks'
2018-08-14 18:13:46 +00:00
class TaskCommentForm(forms.ModelForm):
class Meta:
model = TaskComment
fields = ['comment']
2018-07-23 21:12:57 +00:00
class TaskDetailView(CampViewMixin, TeamViewMixin, DetailView):
template_name = "task_detail.html"
context_object_name = "task"
model = TeamTask
2018-08-04 11:45:52 +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)
context['comment_form'] = TaskCommentForm()
return context
def post(self, request, **kwargs):
task = self.get_object()
if request.user not in task.team.members.all():
return HttpResponseNotAllowed('Nope')
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
fields = ['name', 'description', 'when', 'completed']
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.fields['when'].widget.widgets = [
forms.DateTimeInput(
attrs={"placeholder": "Start"}
),
forms.DateTimeInput(
attrs={"placeholder": "End"}
)
]
2018-07-23 21:12:57 +00:00
class TaskCreateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, CreateView):
model = TeamTask
template_name = "task_form.html"
form_class = TaskForm
2018-08-04 11:45:52 +00:00
active_menu = 'tasks'
def get_team(self):
return Team.objects.get(
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()
2018-07-23 21:12:57 +00:00
class TaskUpdateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, UpdateView):
model = TeamTask
template_name = "task_form.html"
form_class = TaskForm
2018-08-04 11:45:52 +00:00
active_menu = 'tasks'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
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()