Compare commits
	
		
			2 Commits
		
	
	
		
			95352ff5f0
			...
			3e969de57f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3e969de57f | |||
| 3b1b42d483 | 
							
								
								
									
										24
									
								
								logs_collector/collector/serializers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								logs_collector/collector/serializers.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | 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,14 +68,19 @@ | |||||||
|       <!-- 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"> |         <form class="d-flex" role="search" action="{% url 'collector:tickets' %}"> | ||||||
|           <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 class="btn btn-outline-success" type="submit"><i class="bi bi-search"></i></button> |           <button | ||||||
|  |             class="btn btn-outline-success" | ||||||
|  |             type="submit"> | ||||||
|  |               <i class="bi bi-search"></i> | ||||||
|  |           </button> | ||||||
|         </form> |         </form> | ||||||
|         </li> |         </li> | ||||||
|       </ul> |       </ul> | ||||||
|  | |||||||
| @ -7,8 +7,7 @@ | |||||||
|   {% csrf_token %} |   {% csrf_token %} | ||||||
|   <!-- Ticket --> |   <!-- Ticket --> | ||||||
|   {% for ticket in tickets %} |   {% for ticket in tickets %} | ||||||
|     <div class="row"> |     <div id="div-ticket-{{ ticket.number }}" class="list-group mb-2"> | ||||||
|     <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"> | ||||||
| @ -16,7 +15,6 @@ | |||||||
|               {% 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" | ||||||
| @ -78,7 +76,6 @@ | |||||||
|           </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,8 +1,14 @@ | |||||||
| from django.urls import path | from django.urls import path, include | ||||||
|  | 
 | ||||||
|  | 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 = [ | ||||||
| 
 | 
 | ||||||
|     # █░█░█ █▀▀ █▄▄ |     # █░█░█ █▀▀ █▄▄ | ||||||
| @ -64,4 +70,12 @@ 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,14 +4,20 @@ 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.response import Response | from rest_framework.parsers import FormParser, MultiPartParser | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
| @ -53,6 +59,7 @@ 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) | ||||||
| 
 | 
 | ||||||
| @ -64,6 +71,23 @@ 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 | ||||||
| @ -146,3 +170,13 @@ 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