134 lines
3.6 KiB
Python
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))
|