list_lists.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.contrib import messages
  2. from django.contrib.auth.decorators import login_required, user_passes_test
  3. from django.http import HttpResponse
  4. from django.shortcuts import render
  5. from django.db.models import Count
  6. from django.contrib.auth.models import Group, Permission
  7. from django.contrib.contenttypes.models import ContentType
  8. from tickets.forms import SearchForm
  9. from tickets.models import *
  10. from tickets.utils import staff_check
  11. from tickets.admin_utils import add_default_tickets_list
  12. @login_required
  13. @user_passes_test(staff_check)
  14. def list_lists(request) -> HttpResponse:
  15. searchform = SearchForm(auto_id=False)
  16. add_default_tickets_list(request)
  17. # Make sure user belongs to at least one group.
  18. if not request.user.groups.all().exists():
  19. messages.warning(
  20. request,
  21. "You do not yet belong to any groups. Ask your administrator to add you to one.",
  22. )
  23. # Get info about Lists
  24. lists = TaskList.objects.select_related("group").order_by("group__name", "name")
  25. if not request.user.is_superuser:
  26. lists = lists.filter(group__in=request.user.groups.all())
  27. lists = lists.annotate(ticket_count=Count("task"))
  28. # Get info about Tickets
  29. tickets = Task.objects.filter(task_list__in=lists)
  30. context = {
  31. "lists": lists,
  32. "ticket_count": len(tickets),
  33. "list_count": len(lists),
  34. "searchform": searchform
  35. }
  36. return render(request, "tickets/list_lists.html", context)