diff --git a/osinaweb/customercore/__pycache__/models.cpython-310.pyc b/osinaweb/customercore/__pycache__/models.cpython-310.pyc index 815ec65b..3c19e301 100644 Binary files a/osinaweb/customercore/__pycache__/models.cpython-310.pyc and b/osinaweb/customercore/__pycache__/models.cpython-310.pyc differ diff --git a/osinaweb/customercore/models.py b/osinaweb/customercore/models.py index 70b2f52c..fd01b2a6 100644 --- a/osinaweb/customercore/models.py +++ b/osinaweb/customercore/models.py @@ -41,6 +41,16 @@ class Ticket(models.Model): super().save(*args, **kwargs) +class TicketStatus(models.Model): + STATUS_CHOICES = ( + ('Open', 'Open'), + ('Working On', 'Working On'), + ('Closed', 'Closed'), + ) + ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE) + status = models.CharField(max_length=50, choices=STATUS_CHOICES, null=True) + added_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) + date_added = models.DateTimeField() class TicketStatus(models.Model): STATUS_CHOICES = ( ('Open', 'Open'), diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc index 219f0c54..447d8b0f 100644 Binary files a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc differ diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index 0a80fe87..51044ff4 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -4,9 +4,8 @@ from django.contrib.auth import authenticate, login, logout from django.contrib.auth import login as auth_login from django.contrib.auth.decorators import login_required from .forms import * -from django.utils import timezone from django.http import HttpResponse -from django.db.models import Q +from django.db.models import Count, Q from django.http import JsonResponse from .models import Task, Epic from django.template.loader import render_to_string @@ -305,7 +304,7 @@ def my_projects(request, *args, **kwargs): project.total_time_worked_seconds = total_time['seconds'] project.open_user_tasks_count = project.open_tasks_count(request.user) - project.open_tickets_count = Ticket.objects.filter(project=project).exclude(status='Closed').count() + project.open_tickets_count = Ticket.objects.filter(project=project).annotate(closed_status_count=Count('ticketstatus', filter=Q(ticketstatus__status='Closed'))).filter(closed_status_count=0).count() in_progress_projects = [project for project in in_progress_projects if project.id not in latest_pinned_project_ids] #Exclude pinned projects @@ -316,8 +315,7 @@ def my_projects(request, *args, **kwargs): project.total_time_worked_seconds = total_time['seconds'] project.open_user_tasks_count = project.open_tasks_count(request.user) - project.open_tickets_count = Ticket.objects.filter(project=project).exclude(status='Closed').count() - + project.open_tickets_count = Ticket.objects.filter(project=project).annotate(closed_status_count=Count('ticketstatus', filter=Q(ticketstatus__status='Closed'))).filter(closed_status_count=0).count() context = { 'projects': projects, 'in_progress_projects': in_progress_projects,