order.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. class OrdersListView(UserPassesTestMixin, SingleTableView):
  24. table_class = OrdersTable
  25. queryset = Orders.objects.all()
  26. template_name = 'sharix_admin/order_local.html'
  27. def get_context_data(self, **kwargs):
  28. context = super().get_context_data(**kwargs)
  29. context.update({
  30. 'title': _('Orders'),
  31. 'object_list': context['object_list'],
  32. })
  33. return context
  34. def get_queryset(self):
  35. queryset = super().get_queryset()
  36. search_query = self.request.GET.get('q', '').strip()
  37. if search_query:
  38. queryset = queryset.filter(
  39. Q(id__icontains=search_query) |
  40. Q(user__first_name__icontains=search_query) |
  41. Q(user__first_name__icontains=search_query) |
  42. Q(status__icontains=search_query)
  43. ).distinct()
  44. return queryset
  45. def test_func(self) -> bool or None:
  46. return True
  47. @login_required
  48. @group_required('PARTNER-ADMIN')
  49. def change_order_local_status(request):
  50. if request.method == 'POST':
  51. order_id = request.POST.get('order_local')
  52. new_status = request.POST.get('new_status')
  53. try:
  54. order = Orders.objects.get(pk=order_id)
  55. order.status = new_status
  56. order.save()
  57. return JsonResponse({'status': 'success'})
  58. except Orders.DoesNotExist:
  59. return JsonResponse({'status': 'error', 'message': 'Order not found'}, status=404)
  60. return JsonResponse({'status': 'error'}, status=400)
  61. class OrdersEditView(BaseView, FormView):
  62. form_class = OrderForm
  63. template_name = "sharix_admin/order_local.html"
  64. success_url = reverse_lazy("sharix_admin:order_local")
  65. page_title = 'Изменить заказ'
  66. page_name = 'order_edit'
  67. def test_func(self):
  68. return "PARTNER-ADMIN" in self.user_groups
  69. def form_valid(self, form):
  70. with transaction.atomic():
  71. instance = form.save(commit=False)
  72. instance.repr = self.request.user
  73. instance.save()
  74. instance.ticket_status = create_ticket_order_local_activation_by_metaservice_supervisor(self.request.user, instance)
  75. instance.save()
  76. doc_codes = parse_requirements(instance.requirements)
  77. Documents.objects.bulk_create([
  78. Documents(
  79. order_local=instance,
  80. user=self.request.user,
  81. doc_type=doc_code
  82. ) for doc_code in doc_codes
  83. ])
  84. messages.success(self.request, 'Заказ успешно обновлён!')
  85. return super().form_valid(form)
  86. class OrdersCreate(BaseView, FormView):
  87. form_class = OrderForm
  88. template_name = "sharix_admin/order_local.html"
  89. success_url = reverse_lazy("sharix_admin:order_local")
  90. page_title = 'Добавить заказ'
  91. page_name = 'order_local/add/'
  92. def test_func(self):
  93. return not "PARTNER-ADMIN" in self.user_groups
  94. def form_valid(self, form):
  95. with transaction.atomic():
  96. instance = form.save(commit=False)
  97. instance.repr = self.request.user
  98. instance.save()
  99. instance.ticket_status = create_ticket_order_local_activation_by_metaservice_supervisor(self.request.user, instance)
  100. create_ticket_order_local_activation_by_partner_admin(self.request.user, instance)
  101. instance.save()
  102. doc_codes = parse_requirements(instance.requirements)
  103. Documents.objects.bulk_create([
  104. Documents(
  105. order_local=instance,
  106. user=self.request.user,
  107. doc_type=doc_code
  108. ) for doc_code in doc_codes
  109. ])
  110. messages.success(self.request, 'Заказ успешно создан!')
  111. return super().form_valid(form)
  112. class OrdersDetailView(DetailView):
  113. model = Orders
  114. template_name = 'sharix_admin/order_local.html'
  115. context_object_name = 'order'
  116. def get_context_data(self, **kwargs):
  117. context = super().get_context_data(**kwargs)
  118. context['title'] = _('Order Details')
  119. return context