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.template import loader
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse from django.urls import reverse
from django.db.models import Q
from ..authentication.models import Department from ..authentication.models import Department
from .models import Ticket, TicketPriority, TicketTag from .models import Ticket, TicketPriority, TicketTag
@ -52,27 +51,14 @@ def get_ticket(request):
def get_tickets(request): def get_tickets(request):
filters = json.loads(request.POST.get("filters", "{}")) 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 key, values in filters.items():
for value in values: 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]} data = {"tickets": [ticket.serialize() for ticket in tickets]}
return JsonResponse(data) return JsonResponse(data)

View File

@ -348,63 +348,35 @@
console.error(error) console.error(error)
}); });
$("#filterSidebar .filter-department").each(function() { setupFilter("#filterSidebar .filter-department", "author__department__in");
var uuid = $(this).data("uuid"); setupFilter("#filterSidebar .filter-tag", "tags__in")
var checkbox = $(this).find("input[type=checkbox]"); setupFilter("#filterSidebar .filter-priority", "priority__in")
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();
});
});
loadFilterCounts(); loadFilterCounts();
loadAllTickets(); 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) { $("#ticketModal form").on("submit", function(event) {
event.preventDefault(); event.preventDefault();