Moving to use API in home app
This commit is contained in:
parent
d8c608a03c
commit
df82417790
@ -1,25 +1,20 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
from django.urls import path, re_path, include
|
||||
from django.urls import path, include
|
||||
from django.shortcuts import redirect
|
||||
|
||||
from apps.home import views
|
||||
from .views import TicketView
|
||||
|
||||
def reverse_to_index(reqeust):
|
||||
return redirect("dashboard")
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
# The home page
|
||||
path('', views.index, name='home'),
|
||||
|
||||
# Custom Dashboard
|
||||
path("", reverse_to_index, name="index"),
|
||||
path('dashboard/', views.dashboard, name="dashboard"),
|
||||
path('tickets/', include([
|
||||
path('', TicketView.as_view(), name="tickets"),
|
||||
path('new/', views.new_ticket, name="ticket-new"),
|
||||
path('get/', include([
|
||||
path('one/', views.get_ticket, name="ticket-getone"),
|
||||
path('many/', views.get_tickets, name="ticket-getmany"),
|
||||
path("filtercounts/", views.get_filter_counts, name="ticket-getfiltercounts"),
|
||||
])),
|
||||
])),
|
||||
|
||||
# # Matches any html file
|
||||
|
@ -29,13 +29,11 @@ class TicketView(TemplateView):
|
||||
|
||||
@method_decorator(login_required)
|
||||
def get(self, 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,
|
||||
@ -44,108 +42,6 @@ class TicketView(TemplateView):
|
||||
|
||||
return render(request, "home/tickets.html", context)
|
||||
|
||||
# @method_decorator(login_required)
|
||||
# @require_POST
|
||||
# def fetch_ticket(self, request) -> JsonResponse:
|
||||
# ticket = Ticket.objects.get(id=request.POST.get("ticket_id"))
|
||||
# context = {"ticket": ticket.serialize()}
|
||||
# return JsonResponse(context)
|
||||
|
||||
# @method_decorator(login_required)
|
||||
# @require_POST
|
||||
# def fetch_tickets(self, request) -> JsonResponse:
|
||||
# filters = json.loads(request.POST.get("filters", "{}"))
|
||||
# queryset = Ticket.objects.all()
|
||||
|
||||
# for key, values in filters.items():
|
||||
# print(key, values)
|
||||
|
||||
# for value in values:
|
||||
# if value == "all": continue # don't apply a filter if we want all
|
||||
# queryset = queryset.filter(**{key: [value]})
|
||||
|
||||
# tickets = queryset.order_by("-create_timestamp")
|
||||
|
||||
# context = {"tickets": [ticket.serialize() for ticket in tickets]}
|
||||
|
||||
# return JsonResponse(context)
|
||||
|
||||
# @method_decorator(login_required)
|
||||
# @require_POST
|
||||
# def fetch_filter_counts(self, request) -> JsonResponse:
|
||||
# priorities = TicketPriority.objects.all()
|
||||
# tags = TicketTag.objects.all()
|
||||
# departments = Department.objects.all()
|
||||
|
||||
# tickets = Ticket.objects.all()
|
||||
|
||||
# context = {
|
||||
# "priority_counts": {},
|
||||
# "tag_counts": {},
|
||||
# "department_counts": {},
|
||||
# "ticket_count": tickets.count()
|
||||
# }
|
||||
|
||||
# for priority in priorities:
|
||||
# priority_count = tickets.filter(priority=priority).count()
|
||||
# context["priority_counts"][str(priority.id)] = priority_count
|
||||
|
||||
# for tag in tags:
|
||||
# tag_count = tickets.filter(tags__in=[tag]).count()
|
||||
# context["tag_counts"][str(tag.id)] = tag_count
|
||||
|
||||
# for department in departments:
|
||||
# department_count = tickets.filter(author__department=department).count()
|
||||
# context["department_counts"][str(department.id)] = department_count
|
||||
|
||||
# return JsonResponse(context)
|
||||
|
||||
# @method_decorator(login_required)
|
||||
# @require_POST
|
||||
# def new_ticket(self, request) -> JsonResponse:
|
||||
|
||||
# getall = lambda *keys: [request.POST.get(key) for key in keys]
|
||||
# getlist = lambda key: request.POST.getlist(key)
|
||||
|
||||
# title, description, author_id, priority_id = getall(
|
||||
# "title", "description", "author_id", "priority_id"
|
||||
# )
|
||||
# tag_ids = getlist("tag_ids[]")
|
||||
|
||||
# author = get_user_model().objects.get(id=author_id)
|
||||
# priority = TicketPriority.objects.get(id=priority_id)
|
||||
# tags = [
|
||||
# tag for tag in TicketTag.objects.filter(id__in=tag_ids)
|
||||
# ]
|
||||
|
||||
# ticket = Ticket.objects.create(
|
||||
# title=title,
|
||||
# description=description,
|
||||
# author=author,
|
||||
# priority=priority,
|
||||
# )
|
||||
# ticket.tags.set(tags)
|
||||
|
||||
# return JsonResponse({"success": "ticket created successfully"})
|
||||
|
||||
|
||||
@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
|
||||
@ -239,14 +135,6 @@ def new_ticket(request):
|
||||
return JsonResponse({"success": "ticket created successfully"})
|
||||
|
||||
|
||||
@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 = {}
|
||||
|
@ -123,59 +123,35 @@
|
||||
<div class="email-list h-100 layers">
|
||||
<div class="layer w-100">
|
||||
<div class="bgc-grey-100 peers ai-c p-20 fxw-nw">
|
||||
<div class="peer me-auto">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" class="email-side-toggle d-n@md+ btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-menu"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-folder"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-tag"></i>
|
||||
</button>
|
||||
<div class="peer me-auto">
|
||||
<div class="btn-group" role="group">
|
||||
<button id="btnGroupDrop1" type="button" class="btn cur-p bgc-white no-after dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="ti-more-alt"></i>
|
||||
<button type="button" class="email-side-toggle d-n@md+ btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-menu"></i>
|
||||
</button>
|
||||
<!-- <button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-tag"></i>
|
||||
</button> -->
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p" onclick="javascript:loadAllTickets();">
|
||||
<i class="fa fa-refresh"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu fsz-sm" aria-labelledby="btnGroupDrop1">
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-trash mR-10"></i>
|
||||
<span>Delete</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-alert mR-10"></i>
|
||||
<span>Mark as Spam</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-star mR-10"></i>
|
||||
<span>Star</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="peer">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-right"></i>
|
||||
</button>
|
||||
<div class="peer">
|
||||
Showing <span id="ticketCount" class="fw-bolder"></span> Results
|
||||
<!-- <div class="btn-group" role="group">
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-right"></i>
|
||||
</button>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layer w-100">
|
||||
<div class="bdT bdB">
|
||||
<input type="text" class="form-control m-0 bdw-0 pY-15 pX-20 bdrs-0" placeholder="Search...">
|
||||
<input type="text" class="form-control m-0 bdw-0 pY-15 pX-20 bdrs-0" placeholder="Search...">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -187,50 +163,25 @@
|
||||
<div class="bgc-grey-100 peers ai-c jc-sb p-20 fxw-nw d-n@md+">
|
||||
<div class="peer">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" class="back-to-mailbox btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-folder"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-tag"></i>
|
||||
</button>
|
||||
<div class="btn-group" role="group">
|
||||
<button id="btnGroupDrop1" type="button" class="btn cur-p bgc-white no-after dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="ti-more-alt"></i>
|
||||
<button type="button" class="back-to-mailbox btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p" onclick="javascript:loadAllTickets();">
|
||||
<i class="fa fa-refresh"></i>
|
||||
</button>
|
||||
<button type="button" class="btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-more-alt"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu fsz-sm" aria-labelledby="btnGroupDrop1">
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-trash mR-10"></i>
|
||||
<span>Delete</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-alert mR-10"></i>
|
||||
<span>Mark as Spam</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="" class="d-b td-n pY-5 pX-10 bgcH-grey-100 c-grey-700">
|
||||
<i class="ti-star mR-10"></i>
|
||||
<span>Star</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="peer">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-right"></i>
|
||||
</button>
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-left"></i>
|
||||
</button>
|
||||
<button type="button" class="fsz-xs btn bgc-white bdrs-2 mR-3 cur-p">
|
||||
<i class="ti-angle-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -247,7 +198,7 @@
|
||||
<div id="ticketBadges" style="display: none;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="peer">
|
||||
<!-- <div class="peer">
|
||||
<div class="btn-group" role="group">
|
||||
<button id="btnGroupDrop2" class="btn btn-danger c-white bdrs-50p p-15 lh-0" style="display: none;" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="ti-menu"></i>
|
||||
@ -256,7 +207,7 @@
|
||||
test
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
@ -494,12 +445,8 @@
|
||||
|
||||
function loadFilterCounts() {
|
||||
$.ajax({
|
||||
url: "{% url 'ticket-getfiltercounts' %}",
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
data: {
|
||||
csrfmiddlewaretoken: "{{ csrf_token }}"
|
||||
},
|
||||
url: "{% url 'api:filter-counts' %}",
|
||||
type: "GET",
|
||||
success: function(data) {
|
||||
console.log(JSON.stringify(data, null, 4));
|
||||
|
||||
@ -507,6 +454,7 @@
|
||||
updateFilterCounts('tag', data);
|
||||
updateFilterCounts('department', data);
|
||||
$("#filterPriorityAll .badge").text(data.ticket_count);
|
||||
$("#ticketCount").text(data.ticket_count)
|
||||
|
||||
},
|
||||
error: function(data) {
|
||||
@ -517,19 +465,17 @@
|
||||
|
||||
function loadAllTickets() {
|
||||
$("#ticketsContainer").empty();
|
||||
// alert(JSON.stringify(filters, null, 4));
|
||||
|
||||
$.ajax({
|
||||
url: "{% url 'ticket-getmany' %}",
|
||||
type: "POST",
|
||||
url: "{% url 'api:ticket' %}",
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
data: {
|
||||
csrfmiddlewaretoken: "{{ csrf_token }}",
|
||||
filters: JSON.stringify(filters)
|
||||
},
|
||||
data: filters,
|
||||
success: function(data) {
|
||||
console.log(JSON.stringify(data, null, 4))
|
||||
|
||||
data.tickets.forEach(function(ticket) {
|
||||
data.forEach(function(ticket) {
|
||||
var timestamp = new Date(ticket.timestamp);
|
||||
var formattedTime;
|
||||
|
||||
@ -583,10 +529,10 @@
|
||||
});
|
||||
},
|
||||
error: function(data) {
|
||||
alert(JSON.stringify(data, null, 4))
|
||||
alert(JSON.stringify(data, null, 4));
|
||||
console.error(`${data.responseJSON.error}\n${data.responseJSON.detail}`);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function displayTicket(ticketElement) {
|
||||
@ -621,17 +567,16 @@
|
||||
displayedTicketID = ticketID;
|
||||
|
||||
$.ajax({
|
||||
url: `{% url 'ticket-getone' %}`,
|
||||
type: 'POST',
|
||||
url: `{% url 'api:ticket' %}`,
|
||||
type: 'get',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
csrfmiddlewaretoken: '{{ csrf_token }}',
|
||||
ticket_uuid: ticketID
|
||||
uuid__in: [ticketID]
|
||||
},
|
||||
success: function (data) {
|
||||
console.log(JSON.stringify(data, null, 4));
|
||||
|
||||
var ticket = data.ticket;
|
||||
var ticket = data[0];
|
||||
var author = ticket.author;
|
||||
var department = author.department;
|
||||
var priority = ticket.priority;
|
||||
|
Loading…
x
Reference in New Issue
Block a user