order_local.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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.views import OrdersListView, OrderCreateView, OrderDetailView, OrderEditView
  9. from sharix_admin.utils import group_required
  10. from datetime import datetime, timedelta
  11. from dbsynce.lib.core import parse_requirements, get_admin_url
  12. from dbsynce.models import Documents
  13. from django.contrib import messages
  14. from django.db import transaction
  15. from django.urls import reverse_lazy
  16. from django.views.generic.edit import FormView
  17. from django.views.generic import DetailView
  18. from tickets.models import Ticket, TicketList
  19. from sharix_admin.forms import OrderForm
  20. from sharix_admin.utils import *
  21. from dbsynce.lib.data import *
  22. from sharix_admin.views import BaseView
  23. from django.db.models import Q
  24. from django.contrib.auth import get_user_model
  25. class OrdersLocalListView(OrdersListView):
  26. #class OrdersListView(UserPassesTestMixin, SingleTableView):
  27. # table_class = OrdersTable
  28. # queryset = Orders.objects.all()
  29. template_name = 'webservice_running/orders_local.html'
  30. # page_title = 'Заказы'
  31. page_name = 'orders_local'
  32. def get_context_data(self, **kwargs):
  33. context = super().get_context_data(**kwargs)
  34. context.update({
  35. 'title': _('Orders'),
  36. 'object_list': context['object_list'],
  37. })
  38. return context
  39. def get_queryset(self):
  40. queryset = super().get_queryset()
  41. search_query = self.request.GET.get('q', '').strip()
  42. if search_query:
  43. queryset = queryset.filter(
  44. Q(id__icontains=search_query) |
  45. Q(user__first_name__icontains=search_query) |
  46. Q(user__first_name__icontains=search_query) |
  47. Q(status__icontains=search_query)
  48. ).distinct()
  49. return queryset
  50. def testing(self, queryset, is_descending):
  51. queryset = queryset.annotate.order_by("-" if is_descending else "")
  52. return (queryset, True)
  53. def test_func(self) -> bool or None:
  54. return True
  55. @login_required
  56. @group_required('PARTNER-SUPERVISOR')
  57. def change_order_local_status(request):
  58. if request.method == 'POST':
  59. order_id = request.POST.get('order_local')
  60. new_status = request.POST.get('new_status')
  61. try:
  62. order = Orders.objects.get(pk=order_id)
  63. order.status = new_status
  64. order.save()
  65. return JsonResponse({'status': 'success'})
  66. except Orders.DoesNotExist:
  67. return JsonResponse({'status': 'error', 'message': 'Order not found'}, status=404)
  68. return JsonResponse({'status': 'error'}, status=400)
  69. class OrderLocalEditView(OrderEditView):
  70. # form_class = OrderForm
  71. template_name = "webservice_running/order_local.html"
  72. success_url = reverse_lazy("webservice_running:orders_local")
  73. # page_title = 'Изменить заказ'
  74. page_name = 'order_local_edit'
  75. def test_func(self):
  76. return "CLIENT" in self.user_groups
  77. def form_valid(self, form):
  78. with transaction.atomic():
  79. instance = form.save(commit=False)
  80. instance.repr = self.request.user
  81. instance.save()
  82. instance.save()
  83. doc_codes = parse_requirements(instance.requirements)
  84. messages.success(self.request, 'Заказ успешно обновлён!')
  85. return super().form_valid(form)
  86. class OrderLocalCreateView(OrderCreateView):
  87. template_name = "webservice_running/order_local.html"
  88. success_url = reverse_lazy("webservice_running:orders_local")
  89. page_name = 'order_local/add/'
  90. def test_func(self):
  91. return "CLIENT" in self.user_groups
  92. #return not "CLIENT" in self.user_groups
  93. def form_valid(self, form):
  94. with transaction.atomic():
  95. instance = form.save(commit=False)
  96. instance.repr = self.request.user
  97. instance.save()
  98. instance.ticket_status = create_ticket_order(self.request.user, instance)
  99. instance.save()
  100. messages.success(self.request, 'Заказ успешно создан!')
  101. return super().form_valid(form)
  102. class OrderLocalDetailView(OrderDetailView):
  103. # model = Orders
  104. template_name = 'webservice_running/order_local.html'
  105. context_object_name = 'order_local'
  106. def get_context_data(self, **kwargs):
  107. context = super().get_context_data(**kwargs)
  108. context['title'] = _('Order Local Details')
  109. return context