You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.7 KiB
Python

from .models import *
from django.contrib.auth.models import AnonymousUser
from datetime import datetime, timedelta
from django.shortcuts import get_object_or_404
from django.db.models import Max, F
from support.models import *
def utilities(request):
notes = None
recent_note = None
user_offline=None
open_task_count = 0
working_on_task_count = 0
total_tasks = 0
open_tickets = None
closed_tickets = None
latest_statuses = None
last_status = None
if request.user.is_authenticated and StaffProfile.objects.filter(user=request.user):
notes = Note.objects.filter(user=request.user).order_by('-date')[:6]
recent_note = Note.objects.filter(user=request.user).last()
if request.user.is_superuser:
open_task_count = Task.objects.filter(status='Open').count()
working_on_task_count = Task.objects.filter(status='Working On').count()
total_tasks = open_task_count + working_on_task_count
all_tickets = Ticket.objects.all()
all_tickets_with_update_date = all_tickets.annotate(latest_update_date=Max('ticketupdate__date_added'))
all_tickets_ordered = all_tickets_with_update_date.order_by('-latest_update_date')
open_tickets = []
closed_tickets = []
for ticket in all_tickets_ordered:
last_status = ticket.ticketstatus_set.last()
if last_status:
last_status = last_status.status
if last_status == 'Closed':
closed_tickets.append(ticket)
else:
open_tickets.append(ticket)
else:
# If no status is found, assume it's open
open_tickets.append(ticket)
else:
open_task_count = Task.objects.filter(assigned_to=request.user.staffprofile, status='Open').count()
working_on_task_count = Task.objects.filter(assigned_to=request.user.staffprofile, status='Working On').count()
total_tasks = open_task_count + working_on_task_count
all_tickets = Ticket.objects.all()
filtered_tickets = []
for ticket in all_tickets:
staff_profiles = ticket.get_all_ticket_staff()
if any(staff.user == request.user for staff in staff_profiles):
filtered_tickets.append(ticket)
all_tickets = Ticket.objects.filter(id__in=[ticket.id for ticket in filtered_tickets]).annotate(
latest_update_date=Max('ticketupdate__date_added'))
all_tickets_with_update_date = all_tickets.annotate(latest_update_date=Max('ticketupdate__date_added'))
all_tickets_ordered = all_tickets_with_update_date.order_by('-latest_update_date')
open_tickets = []
closed_tickets = []
for ticket in all_tickets_ordered:
last_status = ticket.ticketstatus_set.last()
if last_status:
last_status = last_status.status
if last_status == 'Closed':
closed_tickets.append(ticket)
else:
open_tickets.append(ticket)
else:
# If no status is found, assume it's open
open_tickets.append(ticket)
for ticket in open_tickets:
unread_updates_count = 0
for ticket_update in ticket.ticketupdate_set.exclude(added_by=request.user):
if not TicketRead.objects.filter(ticket_update=ticket_update, user=request.user, read=True).exists():
unread_updates_count += 1
ticket.unread_updates_count = unread_updates_count
today = datetime.now().date()
latest_statuses = Status.objects.filter(date_time__date=today).order_by('-id')
last_status = Status.objects.filter(staff=request.user.staffprofile).last()
recent_logged_in_staffs = User.objects.filter(
staffprofile__isnull=False,
last_login__isnull=False
).order_by('-last_login')[:8]
recent_logged_in_customers = User.objects.filter(
customerprofile__isnull=False,
last_login__isnull=False
).order_by('-last_login')[:8]
return {'total_tasks': total_tasks,
'latest_statuses' : latest_statuses,
'last_status': last_status,
'notes' : notes,
'recent_note' : recent_note,
'user_offline' : user_offline,
'recent_logged_in_staffs' : recent_logged_in_staffs,
'recent_logged_in_customers' : recent_logged_in_customers,
'open_tickets': open_tickets,
'closed_tickets': closed_tickets
}