# -*- 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))