diff --git a/apps/home/views.py b/apps/home/views.py index 5fc169f..cb26f39 100644 --- a/apps/home/views.py +++ b/apps/home/views.py @@ -10,7 +10,6 @@ from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.template import loader from django.shortcuts import render from django.urls import reverse -from django.db.models import Q from ..authentication.models import Department from .models import Ticket, TicketPriority, TicketTag @@ -52,27 +51,14 @@ def get_ticket(request): def get_tickets(request): filters = json.loads(request.POST.get("filters", "{}")) + queryset = Ticket.objects.all() - # conditions = [Q(**{key: value}) for key, value in filters.items()] - # combined_conditions = Q() - # for condition in conditions: - # combined_conditions &= condition - - # print(combined_conditions) - - # query = Q() - # for key, values in filters.items(): - # print("keyvalues", key, values) - # query &= Q(**{key: values}) - - query = Q() for key, values in filters.items(): for value in values: - query &= Q(**{key: [value]}) + queryset = queryset.filter(**{key: [value]}) - print(query) + tickets = queryset.order_by("-create_timestamp") - tickets = Ticket.objects.filter(query).order_by("-create_timestamp") data = {"tickets": [ticket.serialize() for ticket in tickets]} return JsonResponse(data) diff --git a/apps/templates/home/tickets.html b/apps/templates/home/tickets.html index 11321ca..b19249f 100644 --- a/apps/templates/home/tickets.html +++ b/apps/templates/home/tickets.html @@ -348,63 +348,35 @@ console.error(error) }); - $("#filterSidebar .filter-department").each(function() { - var uuid = $(this).data("uuid"); - var checkbox = $(this).find("input[type=checkbox]"); - checkbox.on("change", function() { - var departmentKey = "author__department__in"; - - if ($(this).is(":checked")) { - if (!filters.hasOwnProperty(departmentKey)) { - filters[departmentKey] = [uuid]; - } - else { - filters[departmentKey].push(uuid); - } - } - else { - filters[departmentKey].splice(filters[departmentKey].indexOf(uuid), 1); - - if (filters.hasOwnProperty(departmentKey) && filters[departmentKey].length === 0) { - delete filters[departmentKey] - } - } - - loadAllTickets(); - alert(JSON.stringify(filters, null, 4)); - }); - }); - - $("#filterSidebar .filter-tag").each(function() { - var uuid = $(this).data("uuid"); - var checkbox = $(this).find("input[type=checkbox]"); - checkbox.on("change", function() { - var departmentKey = "tags__in"; - - if ($(this).is(":checked")) { - if (!filters.hasOwnProperty(departmentKey)) { - filters[departmentKey] = [uuid]; - } - else { - filters[departmentKey].push(uuid); - } - } - else { - filters[departmentKey].splice(filters[departmentKey].indexOf(uuid), 1); - - if (filters.hasOwnProperty(departmentKey) && filters[departmentKey].length === 0) { - delete filters[departmentKey] - } - } - - loadAllTickets(); - }); - }); + setupFilter("#filterSidebar .filter-department", "author__department__in"); + setupFilter("#filterSidebar .filter-tag", "tags__in") + setupFilter("#filterSidebar .filter-priority", "priority__in") loadFilterCounts(); loadAllTickets(); }); + function setupFilter(selector, key) { + $(selector).each(function () { + var uuid = $(this).data("uuid"); + var checkbox = $(this).find("input[type=checkbox]"); + checkbox.on("change", function () { + if ($(this).is(":checked")) { + filters[key] = filters[key] || []; + filters[key].push(uuid); + } else { + filters[key].splice(filters[key].indexOf(uuid), 1); + if (filters[key].length === 0) { + delete filters[key]; + } + } + + loadAllTickets(); + console.log(JSON.stringify(filters, null, 4)); + }); + }); + } + $("#ticketModal form").on("submit", function(event) { event.preventDefault();