2020-06-22 15:25:08 +00:00
|
|
|
from camps.mixins import CampViewMixin
|
2020-02-12 12:10:41 +00:00
|
|
|
from django import forms
|
2018-08-14 18:13:46 +00:00
|
|
|
from django.contrib import messages
|
2018-05-04 22:19:24 +00:00
|
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
2020-02-12 12:10:41 +00:00
|
|
|
from django.http import HttpResponseNotAllowed, HttpResponseRedirect
|
|
|
|
from django.views.generic import CreateView, DetailView, UpdateView
|
2018-05-04 22:19:24 +00:00
|
|
|
|
2020-02-12 12:10:41 +00:00
|
|
|
from ..models import TaskComment, Team, TeamMember, TeamTask
|
2018-07-23 21:12:57 +00:00
|
|
|
from .mixins import EnsureTeamResponsibleMixin, TeamViewMixin
|
2018-05-04 22:19:24 +00:00
|
|
|
|
|
|
|
|
2018-07-22 21:18:50 +00:00
|
|
|
class TeamTasksView(CampViewMixin, DetailView):
|
|
|
|
template_name = "team_tasks.html"
|
2019-06-16 12:32:24 +00:00
|
|
|
context_object_name = "team"
|
2018-07-22 21:18:50 +00:00
|
|
|
model = Team
|
2019-06-16 12:32:24 +00:00
|
|
|
slug_url_kwarg = "team_slug"
|
|
|
|
active_menu = "tasks"
|
2018-07-22 21:18:50 +00:00
|
|
|
|
|
|
|
|
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):
|
2018-05-04 22:19:24 +00:00
|
|
|
template_name = "task_detail.html"
|
|
|
|
context_object_name = "task"
|
|
|
|
model = TeamTask
|
2019-06-16 12:32:24 +00:00
|
|
|
active_menu = "tasks"
|
2018-05-04 22:19:24 +00:00
|
|
|
|
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())
|
|
|
|
|
2018-07-22 21:18:50 +00:00
|
|
|
|
2018-08-04 22:18:51 +00:00
|
|
|
class TaskForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = TeamTask
|
2019-06-16 12:32:24 +00:00
|
|
|
fields = ["name", "description", "when", "completed"]
|
2018-08-04 22:18:51 +00:00
|
|
|
|
|
|
|
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"}),
|
2018-08-04 22:18:51 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
|
2019-06-16 12:32:24 +00:00
|
|
|
class TaskCreateView(
|
|
|
|
LoginRequiredMixin,
|
|
|
|
CampViewMixin,
|
|
|
|
TeamViewMixin,
|
|
|
|
EnsureTeamResponsibleMixin,
|
|
|
|
CreateView,
|
|
|
|
):
|
2018-05-04 22:19:24 +00:00
|
|
|
model = TeamTask
|
|
|
|
template_name = "task_form.html"
|
2018-08-04 22:18:51 +00:00
|
|
|
form_class = TaskForm
|
2019-06-16 12:32:24 +00:00
|
|
|
active_menu = "tasks"
|
2018-08-04 11:27:05 +00:00
|
|
|
|
|
|
|
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"]
|
2018-08-04 11:27:05 +00:00
|
|
|
)
|
2018-05-04 22:19:24 +00:00
|
|
|
|
|
|
|
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,
|
|
|
|
):
|
2018-05-04 22:19:24 +00:00
|
|
|
model = TeamTask
|
|
|
|
template_name = "task_form.html"
|
2018-08-04 22:18:51 +00:00
|
|
|
form_class = TaskForm
|
2019-06-16 12:32:24 +00:00
|
|
|
active_menu = "tasks"
|
2018-05-04 22:19:24 +00:00
|
|
|
|
|
|
|
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
|
2018-05-04 22:19:24 +00:00
|
|
|
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):
|
2018-07-22 21:18:50 +00:00
|
|
|
return self.get_object().get_absolute_url()
|