From 3fc30aa96c56c2b80a5bd02e3fe27854d17ad63e Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 18 Nov 2019 18:44:21 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9tickets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/tickets/mixins.py | 10 ++++---- apps/tickets/models/ticket.py | 24 +++++++++++++++++++ .../templates/tickets/ticket_list.html | 2 +- apps/tickets/views.py | 3 +++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/apps/tickets/mixins.py b/apps/tickets/mixins.py index d648ffe19..6f052df66 100644 --- a/apps/tickets/mixins.py +++ b/apps/tickets/mixins.py @@ -1,18 +1,16 @@ # -*- coding: utf-8 -*- # from django.db.models import Q +from .models import Ticket class TicketMixin: def get_queryset(self): - queryset = super().get_queryset() assign = self.request.GET.get('assign', None) if assign is None: - queryset = queryset.filter( - Q(assignees=self.request.user) | Q(user=self.request.user) - ).distinct() + queryset = Ticket.get_related_tickets(self.request.user) elif assign in ['1']: - queryset = queryset.filter(assignees=self.request.user) + queryset = Ticket.get_assigned_tickets(self.request.user) else: - queryset = queryset.filter(user=self.request.user) + queryset = Ticket.get_my_tickets(self.request.user) return queryset diff --git a/apps/tickets/models/ticket.py b/apps/tickets/models/ticket.py index 0db499817..0fdd1c8bd 100644 --- a/apps/tickets/models/ticket.py +++ b/apps/tickets/models/ticket.py @@ -2,6 +2,7 @@ # from django.db import models +from django.db.models import Q from django.utils.translation import ugettext_lazy as _ from common.mixins.models import CommonModelMixin @@ -95,6 +96,29 @@ class Ticket(CommonModelMixin): def is_user(self, user): return self.user == user + @classmethod + def get_related_tickets(cls, user, queryset=None): + if queryset is None: + queryset = cls.objects.all() + queryset = queryset.filter( + Q(assignees=user) | Q(user=user) + ).distinct() + return queryset + + @classmethod + def get_assigned_tickets(cls, user, queryset=None): + if queryset is None: + queryset = cls.objects.all() + queryset = queryset.filter(assignees=user) + return queryset + + @classmethod + def get_my_tickets(cls, user, queryset=None): + if queryset is None: + queryset = cls.objects.all() + queryset = queryset.filter(user=user) + return queryset + class Meta: ordering = ('-date_created',) diff --git a/apps/tickets/templates/tickets/ticket_list.html b/apps/tickets/templates/tickets/ticket_list.html index fa7654180..c51d48072 100644 --- a/apps/tickets/templates/tickets/ticket_list.html +++ b/apps/tickets/templates/tickets/ticket_list.html @@ -7,7 +7,7 @@
diff --git a/apps/tickets/views.py b/apps/tickets/views.py index 84a08eb1c..93b4aca2f 100644 --- a/apps/tickets/views.py +++ b/apps/tickets/views.py @@ -13,10 +13,13 @@ class TicketListView(PermissionsMixin, TemplateView): def get_context_data(self, **kwargs): assign = self.request.GET.get('assign', '0') == '1' context = super().get_context_data(**kwargs) + assigned_open_count = Ticket.get_assigned_tickets(self.request.user)\ + .filter(status=Ticket.STATUS_OPEN).count() context.update({ 'app': _("Tickets"), 'action': _("Ticket list"), 'assign': assign, + 'assigned_open_count': assigned_open_count }) return context