from django.views import generic, View
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import UserPassesTestMixin
from django.utils.decorators import method_decorator
from django.shortcuts import get_object_or_404, redirect
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse, reverse_lazy
from django.contrib import messages
from django.db.models import Q
from .models import Issue, Event, EventDocument, Employee
from .forms import IssueCreateForm, DeptEventCreateForm, UserEventCreateForm
from profiles.models import same_users_list
from notifications.notify import vk_messages_allowed
[docs]class EmployeeList(generic.ListView):
model = Employee
ordering = ['-importance', 'department', 'position']
@method_decorator(login_required, name='dispatch')
[docs]class IssueDisplay(generic.DetailView):
model = Issue
[docs] def get_context_data(self, **kwargs):
context = super(IssueDisplay, self).get_context_data(**kwargs)
context['events'] = context["object"].event_set.order_by("add_dttm")
user = self.request.user
if user.is_staff or user.is_superuser:
context["form"] = DeptEventCreateForm()
context["department_form"] = True
context["notifications_allowed"] = vk_messages_allowed(user)
elif user != context['object'].author and context['object'].category.public == False:
raise PermissionDenied()
elif user == context['object'].author:
context["form"] = UserEventCreateForm()
return context
@method_decorator(login_required, name='dispatch')
[docs]class UserEventCreate(generic.detail.SingleObjectMixin, generic.FormView):
template_name = 'senate/issue_detail.html'
model = Issue
[docs] def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
raise PermissionDenied
self.object = self.get_object()
return super(UserEventCreate, self).post(request, *args, **kwargs)
[docs] def get_success_url(self):
return reverse('senate:issue_detail', kwargs={'pk': self.object.pk})
[docs]class IssueDetail(View):
[docs] def get(self, request, *args, **kwargs):
view = IssueDisplay.as_view()
return view(request, *args, **kwargs)
[docs] def post(self, request, *args, **kwargs):
view = UserEventCreate.as_view()
return view(request, *args, **kwargs)
@method_decorator(login_required, name='dispatch')
[docs]class IssueCreate(generic.CreateView):
model = Issue
form_class = IssueCreateForm
[docs] def get_initial(self):
initial = super(IssueCreate, self).get_initial()
for param in self.request.GET:
initial[param] = self.request.GET[param]
return initial
[docs] def get_success_url(self):
return reverse('senate:issue_detail', args=(self.object.id,))
@method_decorator(login_required, name='dispatch')
[docs]class MyIssueList(generic.ListView):
model = Issue
template_name = 'senate/issue_list.html'
[docs] def get_queryset(self):
return Issue.objects.filter(author__in=same_users_list(self.request.user)).order_by("-add_dttm")
@method_decorator(login_required, name='dispatch')
[docs]class DeptIssueList(UserPassesTestMixin, generic.ListView):
model = Issue
template_name = 'senate/issue_list.html'
[docs] def get_queryset(self):
user = self.request.user
groups = user.groups.all()
return Issue.objects.filter(assigned_dept__in=groups).order_by("-add_dttm")
[docs] def test_func(self):
# return self.request.user.groups.filter(name="senate_employee").count >= 1
return self.request.user.is_superuser or self.request.user.is_staff
[docs]class FullIssueList(generic.ListView):
model = Issue
template_name = 'senate/issue_list.html'
[docs] def get_queryset(self):
queryset = Issue.objects.all().order_by("-add_dttm")
user = self.request.user
if user.is_superuser or user.is_staff:
return queryset
return queryset.filter(Q(category__public=True)|Q(author__in=same_users_list(user)))