Compare commits

..

No commits in common. "3e969de57f493dd1bbc2fb68b3b66d72ec2c9071" and "95352ff5f0bce01e2e151e9883dfc356e718d5b9" have entirely different histories.

5 changed files with 8 additions and 82 deletions

View File

@ -1,24 +0,0 @@
from rest_framework import serializers
from .models import Archive, Ticket
class ArchiveUploadSerializer(serializers.ModelSerializer):
ticket_number = serializers.ReadOnlyField(source='ticket.number')
class Meta:
model = Archive
fields = ['file', 'ticket', 'ticket_number']
def to_internal_value(self, data):
try:
ticket = Ticket.objects.get(number=data['ticket'])
data['ticket'] = ticket.id
return super().to_internal_value(data)
except Exception:
return super().to_internal_value(data)
def to_representation(self, instance):
data = super().to_representation(instance)
data['ticket'] = data.pop('ticket_number')
return data

View File

@ -68,19 +68,14 @@
<!-- Search --> <!-- Search -->
<ul class="navbar-nav flex-row flex-wrap me-md-auto"> <ul class="navbar-nav flex-row flex-wrap me-md-auto">
<li class="nav-item py-2 col-12 col-lg-auto"> <li class="nav-item py-2 col-12 col-lg-auto">
<form class="d-flex" role="search" action="{% url 'collector:tickets' %}"> <form class="d-flex" role="search">
<input <input
class="form-control me-2" class="form-control me-2"
type="search" type="search"
placeholder="Search" placeholder="Search"
aria-label="Search" aria-label="Search"
name="search"
/> />
<button <button class="btn btn-outline-success" type="submit"><i class="bi bi-search"></i></button>
class="btn btn-outline-success"
type="submit">
<i class="bi bi-search"></i>
</button>
</form> </form>
</li> </li>
</ul> </ul>

View File

@ -7,7 +7,8 @@
{% csrf_token %} {% csrf_token %}
<!-- Ticket --> <!-- Ticket -->
{% for ticket in tickets %} {% for ticket in tickets %}
<div id="div-ticket-{{ ticket.number }}" class="list-group mb-2"> <div class="row">
<div id="div-ticket-{{ ticket.number }}" class="list-group mb-2 ms-1">
<div class="list-group-item list-group-item-action disable" aria-current="true"> <div class="list-group-item list-group-item-action disable" aria-current="true">
{% include 'collector/includes/ticket_info.html' %} {% include 'collector/includes/ticket_info.html' %}
<div class="col-xl-6 mt-1 mb-2"> <div class="col-xl-6 mt-1 mb-2">
@ -15,6 +16,7 @@
{% if ticket.note %} {% if ticket.note %}
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button <button
class="accordion-button collapsed" class="accordion-button collapsed"
type="button" data-bs-toggle="collapse" type="button" data-bs-toggle="collapse"
@ -76,6 +78,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- Modal ticket --> <!-- Modal ticket -->
{% include 'collector/includes/modal_ticket.html' %} {% include 'collector/includes/modal_ticket.html' %}
<!-- Modal archive --> <!-- Modal archive -->

View File

@ -1,14 +1,8 @@
from django.urls import path, include from django.urls import path
from rest_framework import routers
from . import views from . import views
app_name = 'collector' app_name = 'collector'
router = routers.DefaultRouter()
router.register(r'archives', views.ArchiveUploadViewSet)
urlpatterns = [ urlpatterns = [
# █░█░█ █▀▀ █▄▄ # █░█░█ █▀▀ █▄▄
@ -70,12 +64,4 @@ urlpatterns = [
views.DeleteTicketHandler.as_view(), views.DeleteTicketHandler.as_view(),
name='ajax_delete_ticket' name='ajax_delete_ticket'
), ),
# ▄▀█ █▀█ █
# █▀█ █▀▀ █
# -- -- --
# CREATE:
path('api/v1/', include(router.urls))
] ]

View File

@ -4,20 +4,14 @@ from django.http import FileResponse, JsonResponse
from django.views import generic from django.views import generic
from django.views.generic.detail import SingleObjectMixin from django.views.generic.detail import SingleObjectMixin
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.db.models import Q
from rest_framework import status from rest_framework import status
from rest_framework.parsers import FormParser, MultiPartParser # from rest_framework.response import Response
from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from .models import Archive, Ticket from .models import Archive, Ticket
from .forms import TicketForm from .forms import TicketForm
from .utils import PageTitleViewMixin, is_ajax from .utils import PageTitleViewMixin, is_ajax
from .serializers import ArchiveUploadSerializer
class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View): class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View):
model = Archive model = Archive
@ -59,7 +53,6 @@ class UpdateTicket(LoginRequiredMixin, PageTitleViewMixin, generic.UpdateView):
return f'{self.title} - {self.kwargs.get("ticket", "update")}' return f'{self.title} - {self.kwargs.get("ticket", "update")}'
def form_valid(self, form): def form_valid(self, form):
print(self.request.user)
form.instance.user = self.request.user form.instance.user = self.request.user
return super().form_valid(form) return super().form_valid(form)
@ -71,23 +64,6 @@ class ListAllTickets(PageTitleViewMixin, generic.ListView):
paginate_by = 5 paginate_by = 5
title = 'Collector - tickets' title = 'Collector - tickets'
def get_queryset(self):
search_query = self.request.GET.get('search', '')
if search_query:
query_list = []
try:
for item in search_query.split(','):
query_list.append(int(item))
except ValueError:
return super().get_queryset()
queryset = self.model.objects.filter(
Q(number__in=query_list) | Q(number__icontains=query_list[0])
)
self.paginate_by = 100 # fake disable pagination)
return queryset
return super().get_queryset()
class ListPlatformTickets(PageTitleViewMixin, generic.ListView): class ListPlatformTickets(PageTitleViewMixin, generic.ListView):
model = Ticket model = Ticket
@ -170,13 +146,3 @@ class DeleteTicketHandler(SingleObjectMixin, generic.View):
{'error': 'header XMLHttpRequest is required'}, {'error': 'header XMLHttpRequest is required'},
status=status.HTTP_406_NOT_ACCEPTABLE status=status.HTTP_406_NOT_ACCEPTABLE
) )
class ArchiveUploadViewSet(mixins.CreateModelMixin, GenericViewSet):
queryset = Archive.objects.order_by('-time_create')
serializer_class = ArchiveUploadSerializer
parser_classes = (MultiPartParser, FormParser)
# permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(user=self.request.user)