Modified: views and and urlconf
This commit is contained in:
parent
89acf8e8bb
commit
941a4979f8
@ -32,15 +32,20 @@ $(function () {
|
||||
$("#ticket-state").click(function () {
|
||||
console.log('Press');
|
||||
let resolved = false;
|
||||
if ($(this).attr("checked")) {
|
||||
let ticket_state_url = $(this).attr("ticket-state-url")
|
||||
if ($(this).attr("ticket-state-switch") === "1") {
|
||||
console.log('Find it!!!')
|
||||
resolved = true;
|
||||
$(this).attr("ticket-state-switch", "0"); // disable
|
||||
|
||||
} else {
|
||||
resolved = false;
|
||||
$(this).attr("ticket-state-switch", "1"); // enable
|
||||
}
|
||||
console.log(resolved)
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: $(this).attr("ticket-state-url"),
|
||||
url: ticket_state_url,
|
||||
headers: {
|
||||
"X-CSRFToken":CSRF,
|
||||
"Content-Type":"application/json"
|
||||
|
@ -20,7 +20,8 @@
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
id="ticket-state"
|
||||
ticket-state-url="{% url 'ticket' ticket.platform ticket.number %}"
|
||||
ticket-state-url="{% url 'ajax_update_state_ticket' ticket.platform ticket.number %}"
|
||||
{% if ticket.resolved %} ticket-state-switch="1" {% endif %}
|
||||
{% if ticket.resolved %} checked {% endif %}>
|
||||
</div>
|
||||
<div class="col-xl-6 mb-2">
|
||||
@ -156,7 +157,7 @@
|
||||
>Cancel</button>
|
||||
<a
|
||||
type="button"
|
||||
href="{% url 'delete' ticket.number %}"
|
||||
href="{% url 'ajax_delete_ticket' ticket.number %}"
|
||||
class="btn btn-danger btn-ticket-del"
|
||||
data-bs-dismiss="modal"
|
||||
data-jq-ticket-del-redirect="{% url 'tickets' %}"
|
||||
|
@ -4,6 +4,12 @@ from . import views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
# █░█░█ █▀▀ █▄▄
|
||||
# ▀▄▀▄▀ ██▄ █▄█
|
||||
# -- -- -- -- --
|
||||
|
||||
# READ:
|
||||
path(
|
||||
'',
|
||||
views.ListAllTickets.as_view(),
|
||||
@ -24,14 +30,26 @@ urlpatterns = [
|
||||
views.DetailTicket.as_view(),
|
||||
name='ticket'
|
||||
),
|
||||
path(
|
||||
'tickets/delete/<int:ticket>/',
|
||||
views.AjaxDeleteTicketHandler.as_view(),
|
||||
name='delete'
|
||||
),
|
||||
path(
|
||||
'archives/<path:path>',
|
||||
views.ArchiveHandlerView.as_view(),
|
||||
name="download"
|
||||
),
|
||||
|
||||
# ▄▀█ ░░█ ▄▀█ ▀▄▀
|
||||
# █▀█ █▄█ █▀█ █░█
|
||||
# -- -- -- -- --
|
||||
|
||||
# UPDATE:
|
||||
path(
|
||||
'ajax/tickets/update/<slug:platform>/<int:ticket>/',
|
||||
views.UpdateTicketStateHandler.as_view(),
|
||||
name='ajax_update_state_ticket'
|
||||
),
|
||||
# DELETE:
|
||||
path(
|
||||
'ajax/tickets/delete/<int:ticket>/',
|
||||
views.DeleteTicketHandler.as_view(),
|
||||
name='ajax_delete_ticket'
|
||||
),
|
||||
]
|
||||
|
@ -19,5 +19,5 @@ def get_file_size(file_path, unit='bytes'):
|
||||
|
||||
|
||||
def is_ajax(request):
|
||||
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
|
||||
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
||||
return True
|
||||
|
@ -1,9 +1,8 @@
|
||||
import json
|
||||
# from django.shortcuts import render, redirect
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.http import FileResponse, HttpResponseNotAllowed, JsonResponse
|
||||
from django.http import FileResponse, JsonResponse
|
||||
from django.views import generic
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
from django.urls import reverse_lazy
|
||||
|
||||
from rest_framework import status
|
||||
@ -13,30 +12,20 @@ from .models import Archive, Ticket, Platform
|
||||
from .utils import is_ajax
|
||||
|
||||
|
||||
class ArchiveHandlerView(LoginRequiredMixin, generic.View):
|
||||
class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View):
|
||||
model = Archive
|
||||
slug_field = 'file'
|
||||
slug_url_kwarg = 'path'
|
||||
|
||||
def get(self, request, path):
|
||||
file = get_object_or_404(Archive, file=path)
|
||||
return FileResponse(file.file)
|
||||
self.object = self.get_object()
|
||||
return FileResponse(self.object.file)
|
||||
|
||||
def delete(self, request, path):
|
||||
try:
|
||||
file = Archive.objects.get(file=path)
|
||||
file.delete()
|
||||
return JsonResponse(
|
||||
{
|
||||
'file': path,
|
||||
'status': status.HTTP_200_OK
|
||||
},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
except Archive.DoesNotExist:
|
||||
return JsonResponse(
|
||||
{
|
||||
'file': path,
|
||||
'status': status.HTTP_204_NO_CONTENT
|
||||
},
|
||||
status=status.HTTP_204_NO_CONTENT
|
||||
)
|
||||
if is_ajax(request):
|
||||
self.object = self.get_object()
|
||||
self.object.delete()
|
||||
return JsonResponse({'file': path}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ListAllTickets(generic.ListView):
|
||||
@ -76,25 +65,6 @@ class DetailTicket(generic.DetailView):
|
||||
slug_field = 'number'
|
||||
slug_url_kwarg = 'ticket'
|
||||
|
||||
def post(self, request, **kwargs):
|
||||
if is_ajax(request):
|
||||
model = self.get_object()
|
||||
if request.body:
|
||||
data = json.loads(request.body)
|
||||
resolved_field = data.get('resolved')
|
||||
if isinstance(resolved_field, bool):
|
||||
model.resolved = not resolved_field
|
||||
model.save()
|
||||
return JsonResponse(
|
||||
{'resolved': not resolved_field},
|
||||
status=status.HTTP_201_CREATED
|
||||
)
|
||||
return JsonResponse(
|
||||
{'resolved': 'must be a boolean'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
return HttpResponseNotAllowed(permitted_methods=['GET'])
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['platforms'] = Platform.objects.all()
|
||||
@ -109,27 +79,49 @@ class DeleteTicket(generic.DeleteView):
|
||||
slug_url_kwarg = 'ticket'
|
||||
success_url = reverse_lazy('tickets')
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
|
||||
class UpdateTicketStateHandler(SingleObjectMixin, generic.View):
|
||||
model = Ticket
|
||||
slug_field = 'number'
|
||||
slug_url_kwarg = 'ticket'
|
||||
|
||||
def post(self, request, **kwargs):
|
||||
if is_ajax(request):
|
||||
self.object = self.get_object()
|
||||
if request.body:
|
||||
data = json.loads(request.body)
|
||||
resolved_field = data.get('resolved')
|
||||
if isinstance(resolved_field, bool):
|
||||
self.object.resolved = not resolved_field
|
||||
self.object.save()
|
||||
return JsonResponse(
|
||||
{'resolved': not resolved_field},
|
||||
status=status.HTTP_201_CREATED
|
||||
)
|
||||
return JsonResponse(
|
||||
{'resolved': 'must be a boolean'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
return JsonResponse(
|
||||
{'error': 'header XMLHttpRequest is required'},
|
||||
status=status.HTTP_406_NOT_ACCEPTABLE
|
||||
)
|
||||
|
||||
|
||||
class DeleteTicketHandler(SingleObjectMixin, generic.View):
|
||||
model = Ticket
|
||||
slug_field = 'number'
|
||||
slug_url_kwarg = 'ticket'
|
||||
|
||||
def delete(self, request, ticket):
|
||||
if is_ajax(request):
|
||||
print("HELLO FROM AJAX")
|
||||
self.object = self.get_object()
|
||||
self.object.delete()
|
||||
return JsonResponse(
|
||||
{'status': status.HTTP_200_OK},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
response = super().delete(self, request, *args, **kwargs)
|
||||
return response
|
||||
|
||||
|
||||
class AjaxDeleteTicketHandler(generic.View):
|
||||
|
||||
def delete(self, request, ticket):
|
||||
if is_ajax(request):
|
||||
print("HELLO FROM AJAX")
|
||||
obj = Ticket.objects.get(number=ticket)
|
||||
obj.delete()
|
||||
return JsonResponse(
|
||||
{'status': status.HTTP_200_OK},
|
||||
status=status.HTTP_200_OK
|
||||
{'error': 'header XMLHttpRequest is required'},
|
||||
status=status.HTTP_406_NOT_ACCEPTABLE
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user