fixed issues with multiple filters

This commit is contained in:
Corban-Lee Jones 2024-01-10 11:07:50 +00:00
parent f581e22a78
commit 2dbc08b93c
2 changed files with 27 additions and 69 deletions

View File

@ -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)

View File

@ -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();