working on filter functionality #4

This commit is contained in:
Corban-Lee Jones 2024-01-10 00:48:41 +00:00
parent 8acb8c3aca
commit 03b34ebd20
2 changed files with 90 additions and 28 deletions

View File

@ -1,5 +1,6 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
import json
from datetime import timedelta, datetime from datetime import timedelta, datetime
from django import template from django import template
@ -9,7 +10,7 @@ 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.forms.models import model_to_dict 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
@ -50,9 +51,28 @@ def get_ticket(request):
@require_POST @require_POST
def get_tickets(request): def get_tickets(request):
filters = dict(request.POST.get("filters", {})) filters = json.loads(request.POST.get("filters", "{}"))
tickets = Ticket.objects.filter(**filters).order_by("-create_timestamp") # 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]})
print(query)
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

@ -335,6 +335,7 @@
{% block javascripts %} {% block javascripts %}
<script> <script>
var displayedTicketID = -1; var displayedTicketID = -1;
filters = {};
$(document).ready(function() { $(document).ready(function() {
// $(".email-list-item").on("click", function() { // $(".email-list-item").on("click", function() {
@ -347,6 +348,59 @@
console.error(error) 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();
});
});
loadFilterCounts(); loadFilterCounts();
loadAllTickets(); loadAllTickets();
}); });
@ -378,9 +432,15 @@
} }
} }
function loadFilterCounts() { function updateFilterCounts(filterType, data) {
// $("#filterSidebar") $("#filterSidebar .filter-" + filterType).each(function() {
var uuid = $(this).data("uuid");
var count = data[filterType + '_counts'][uuid];
$(this).find(".badge").text(count);
});
}
function loadFilterCounts() {
$.ajax({ $.ajax({
url: "{% url 'ticket-getfiltercounts' %}", url: "{% url 'ticket-getfiltercounts' %}",
type: "POST", type: "POST",
@ -389,29 +449,11 @@
csrfmiddlewaretoken: "{{ csrf_token }}", csrfmiddlewaretoken: "{{ csrf_token }}",
}, },
success: function(data) { success: function(data) {
alert(JSON.stringify(data, null, 4)); console.log(JSON.stringify(data, null, 4));
var priorities = data.priority_counts; updateFilterCounts('priority', data);
var tags = data.tag_counts; updateFilterCounts('tag', data);
var departments = data.department_counts; updateFilterCounts('department', data);
$("#filterSidebar .filter-priority").each(function() {
var uuid = $(this).data("uuid");
var count = priorities[uuid];
$(this).find(".badge").text(count);
});
$("#filterSidebar .filter-tag").each(function() {
var uuid = $(this).data("uuid");
var count = tags[uuid];
$(this).find(".badge").text(count);
});
$("#filterSidebar .filter-department").each(function() {
var uuid = $(this).data("uuid");
var count = departments[uuid];
$(this).find(".badge").text(count);
});
}, },
error: function(data) { error: function(data) {
alert(JSON.stringify(data, null, 4)) alert(JSON.stringify(data, null, 4))
@ -428,7 +470,7 @@
dataType: "json", dataType: "json",
data: { data: {
csrfmiddlewaretoken: "{{ csrf_token }}", csrfmiddlewaretoken: "{{ csrf_token }}",
filters: {} filters: JSON.stringify(filters)
}, },
success: function(data) { success: function(data) {
console.log(JSON.stringify(data, null, 4)) console.log(JSON.stringify(data, null, 4))