order.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. from dbsynce.models import Orders
  2. from django.contrib.auth.decorators import login_required
  3. from django.contrib.auth.mixins import UserPassesTestMixin
  4. from django.http import JsonResponse
  5. from django.utils.translation import gettext as _
  6. from django_tables2 import SingleTableView
  7. from sharix_admin.tables import OrdersTable
  8. from sharix_admin.utils import group_required
  9. from datetime import datetime, timedelta
  10. from dbsynce.lib.core import parse_requirements, get_admin_url
  11. from dbsynce.models import Documents
  12. from django.contrib import messages
  13. from django.db import transaction
  14. from django.urls import reverse_lazy
  15. from django.views.generic.edit import FormView
  16. from django.views.generic import DetailView
  17. from tickets.models import Ticket, TicketList
  18. from sharix_admin.forms import OrderForm
  19. from sharix_admin.utils import *
  20. from dbsynce.lib.data import *
  21. from .base import BaseView
  22. from django.db.models import Q
  23. from django.contrib.auth import get_user_model
  24. from dbsynce.docs.database.orders import Orders as OrdersHelpTexts
  25. from dbsynce.docs.verbose_names.orders import Orders as OrdersVerboseNames
  26. class OrdersListView(BaseView, SingleTableView):
  27. #class OrdersListView(UserPassesTestMixin, SingleTableView):
  28. table_class = OrdersTable
  29. queryset = Orders.objects.all()
  30. template_name = 'sharix_admin/orders.html'
  31. page_title = 'Заказы'
  32. page_name = 'orders'
  33. def get_context_data(self, **kwargs):
  34. context = super().get_context_data(**kwargs)
  35. context.update({
  36. 'title': _('Orders'),
  37. 'object_list': context['object_list'],
  38. })
  39. return context
  40. def get_queryset(self):
  41. queryset = super().get_queryset()
  42. search_query = self.request.GET.get('q', '').strip()
  43. if search_query:
  44. queryset = queryset.filter(
  45. Q(id__icontains=search_query) |
  46. Q(user__first_name__icontains=search_query) |
  47. Q(user__first_name__icontains=search_query) |
  48. Q(status__icontains=search_query)
  49. ).distinct()
  50. return queryset
  51. def testing(self, queryset, is_descending):
  52. queryset = queryset.annotate.order_by("-" if is_descending else "")
  53. return (queryset, True)
  54. def test_func(self) -> bool or None:
  55. return True
  56. @login_required
  57. @group_required('PARTNER-SUPERVISOR')
  58. def change_order_local_status(request):
  59. if request.method == 'POST':
  60. order_id = request.POST.get('order_local')
  61. new_status = request.POST.get('new_status')
  62. try:
  63. order = Orders.objects.get(pk=order_id)
  64. order.status = new_status
  65. order.save()
  66. return JsonResponse({'status': 'success'})
  67. except Orders.DoesNotExist:
  68. return JsonResponse({'status': 'error', 'message': 'Order not found'}, status=404)
  69. return JsonResponse({'status': 'error'}, status=400)
  70. class OrderEditView(BaseView, FormView):
  71. form_class = OrderForm
  72. template_name = "sharix_admin/order.html"
  73. success_url = reverse_lazy("sharix_admin:orders")
  74. page_title = 'Изменить заказ'
  75. page_name = 'order_edit'
  76. def test_func(self):
  77. return "METASERVICE-CLIENT" in self.user_groups
  78. def form_valid(self, form):
  79. with transaction.atomic():
  80. instance = form.save(commit=False)
  81. instance.repr = self.request.user
  82. instance.save()
  83. #instance.ticket_status = create_ticket_order_local_activation_by_metaservice_supervisor(self.request.user, instance)
  84. instance.save()
  85. doc_codes = parse_requirements(instance.requirements)
  86. # Documents.objects.bulk_create([
  87. # Documents(
  88. # order_local=instance,
  89. # user=self.request.user,
  90. # doc_type=doc_code
  91. # ) for doc_code in doc_codes
  92. # ])
  93. messages.success(self.request, 'Заказ успешно обновлён!')
  94. return super().form_valid(form)
  95. class OrderCreateView(BaseView, FormView):
  96. form_class = OrderForm
  97. template_name = "sharix_admin/order.html"
  98. success_url = reverse_lazy("sharix_admin:orders")
  99. page_title = 'Добавить заказ'
  100. page_name = 'order/add/'
  101. def test_func(self):
  102. return "METASERVICE-CLIENT" in self.user_groups
  103. #return not "METASERVICE-CLIENT" in self.user_groups
  104. def form_valid(self, form):
  105. with transaction.atomic():
  106. instance = form.save(commit=False)
  107. instance.repr = self.request.user
  108. instance.save()
  109. instance.ticket_status = create_ticket_order(self.request.user, instance)
  110. #create_ticket_order_local_activation_by_partner_admin(self.request.user, instance)
  111. instance.save()
  112. # doc_codes = parse_requirements(instance.requirements)
  113. # Documents.objects.bulk_create([
  114. # Documents(
  115. # order_local=instance,
  116. # user=self.request.user,
  117. # doc_type=doc_code
  118. # ) for doc_code in doc_codes
  119. # ])
  120. messages.success(self.request, 'Заказ успешно создан!')
  121. return super().form_valid(form)
  122. class OrderDetailView(BaseView, DetailView):
  123. model = Orders
  124. template_name = 'sharix_admin/order_detail.html'
  125. context_object_name = 'order'
  126. page_title = 'Детали заказа'
  127. page_name = 'order_detail'
  128. def detail_view(request, primary_key):
  129. try:
  130. order = Order.objects.get(pk=primary_key)
  131. except Order.DoesNotExist:
  132. raise Http404('Company does not exist')
  133. return render(request, template_name, context={
  134. #'order': order,
  135. #'test1': "test1",
  136. #'order': order,
  137. 'orders_help_texts': OrdersHelpTexts,
  138. 'captions': OrdersVerboseNames,
  139. })
  140. #class OrderDetailView(BaseView, DetailView):
  141. # model = Orders
  142. # template_name = 'sharix_admin/order.html'
  143. # context_object_name = 'order'
  144. #
  145. def get_context_data(self, **kwargs):
  146. context = super().get_context_data(**kwargs)
  147. context['orders_help_texts'] = OrdersHelpTexts
  148. context['captions'] = OrdersVerboseNames
  149. #context['title'] = _('Order Details')
  150. return context