Compare commits
	
		
			No commits in common. "3e969de57f493dd1bbc2fb68b3b66d72ec2c9071" and "95352ff5f0bce01e2e151e9883dfc356e718d5b9" have entirely different histories.
		
	
	
		
			3e969de57f
			...
			95352ff5f0
		
	
		
| @ -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 |  | ||||||
| @ -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> | ||||||
|  | |||||||
| @ -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 --> | ||||||
|  | |||||||
| @ -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)) |  | ||||||
| ] | ] | ||||||
|  | |||||||
| @ -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) |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user