134 lines
3.6 KiB
Python

# -*- encoding: utf-8 -*-
import json
from datetime import timedelta, datetime
from django import template
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.template import loader
from django.shortcuts import render
from django.urls import reverse
from ..authentication.models import Department
from .models import Ticket, TicketPriority, TicketTag
@login_required()
def dashboard(request):
return render(request, "home/dashboard.html")
@login_required()
def tickets(request):
tickets = Ticket.objects.all().order_by("-create_timestamp")
priorities = TicketPriority.objects.all()
tags = TicketTag.objects.all()
departments = Department.objects.all()
context = {
"tickets": tickets,
"priorities": priorities,
"tags": tags,
"departments": departments,
"dayago": datetime.now() - timedelta(hours=24)
}
return render(request, "home/tickets.html", context)
@login_required
@require_POST
def get_ticket(request):
ticket = Ticket.objects.get(id=request.POST.get("ticket_id"))
data = {"ticket": ticket.serialize()}
return JsonResponse(data)
@login_required
@require_POST
def get_tickets(request):
filters = json.loads(request.POST.get("filters", "{}"))
queryset = Ticket.objects.all()
for key, values in filters.items():
print(key, values)
for value in values:
queryset = queryset.filter(**{key: [value]})
tickets = queryset.order_by("-create_timestamp")
data = {"tickets": [ticket.serialize() for ticket in tickets]}
return JsonResponse(data)
@login_required
@require_POST
def get_filter_counts(request):
priorities = TicketPriority.objects.all()
tags = TicketTag.objects.all()
departments = Department.objects.all()
tickets = Ticket.objects.all()
data = {
"priority_counts": {},
"tag_counts": {},
"department_counts": {},
"ticket_count": tickets.count()
}
for priority in priorities:
data["priority_counts"][str(priority.id)] = tickets.filter(priority=priority).count()
for tag in tags:
data["tag_counts"][str(tag.id)] = tickets.filter(tags__in=[tag]).count()
for department in departments:
data["department_counts"][str(department.id)] = tickets.filter(author__department=department).count()
return JsonResponse(data)
@login_required()
@require_POST
def new_ticket(request):
return JsonResponse({"placeholder": "nothing here yet"})
@login_required()
def index(request):
context = {'segment': 'index'}
html_template = loader.get_template('home/index.html')
return HttpResponse(html_template.render(context, request))
@login_required()
def pages(request):
context = {}
# All resource paths end in .html.
# Pick out the html file name from the url. And load that template.
try:
load_template = request.path.split('/')[-1]
if load_template == 'admin':
return HttpResponseRedirect(reverse('admin:index'))
context['segment'] = load_template
html_template = loader.get_template('home/' + load_template)
return HttpResponse(html_template.render(context, request))
except template.TemplateDoesNotExist:
html_template = loader.get_template('home/page-404.html')
return HttpResponse(html_template.render(context, request))
except:
html_template = loader.get_template('home/page-500.html')
return HttpResponse(html_template.render(context, request))