partner.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from django.views.generic import DetailView
  2. from django.views.generic.edit import FormView
  3. from django.urls import reverse_lazy
  4. from django.shortcuts import get_object_or_404, redirect
  5. from django.utils.translation import gettext as _
  6. from django.contrib.auth.mixins import UserPassesTestMixin
  7. from django.contrib import messages
  8. from django.db import transaction
  9. from dbsynce.models import Company, Documents
  10. from SharixAdmin.forms import CompanyForm, DocumentUploadForm
  11. from SharixAdmin.utils import *
  12. from .base import BaseView
  13. class PartnerBaseView(UserPassesTestMixin, BaseView):
  14. page_name = 'partner'
  15. # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
  16. def test_func(self):
  17. return self.request.user.groups.filter(name='PARTNER-ADMIN').exists()
  18. class PartnerDetailView(PartnerBaseView, DetailView):
  19. model = Company
  20. template_name = 'SharixAdmin/partner.html'
  21. context_object_name = 'company'
  22. page_title = _('О партнере')
  23. def get_object(self, queryset=None):
  24. return get_object_or_404(Company, repr_id=self.request.user)
  25. def get_context_data(self, **kwargs):
  26. context = super().get_context_data(**kwargs)
  27. docs = Documents.objects.filter(
  28. user_id=self.request.user,
  29. company_id=self.object
  30. ).prefetch_related('files').order_by('doc_type')
  31. context.update({ "docs": docs })
  32. return context
  33. class PartnerEditView(PartnerBaseView, FormView):
  34. template_name = 'SharixAdmin/partner_edit.html'
  35. form_class = CompanyForm
  36. success_url = reverse_lazy('partner_detail')
  37. page_title = _('Изменение данных партнера')
  38. def get_form_kwargs(self):
  39. kwargs = super().get_form_kwargs()
  40. kwargs['instance'] = get_object_or_404(Company, repr_id=self.request.user)
  41. return kwargs
  42. def form_valid(self, form):
  43. with transaction.atomic():
  44. # Сохраняем изменения
  45. form.save()
  46. # Получаем текущий объект компании и деактивируем ее
  47. current_company = form.instance
  48. current_company.deactivate()
  49. # Выполняем пересоздание тикета на активацию партнера
  50. current_company.ticket_status.archive()
  51. create_ticket_partner_activation(self.request.user, current_company)
  52. # Отправляем полAьзователю уведомление на страницу об успехе операции
  53. messages.success(self.request, 'Данные успешно изменены и теперь проходят проверку!')
  54. return super().form_valid(form)
  55. class PartnerDocEditView(PartnerBaseView, FormView):
  56. template_name = 'SharixAdmin/partner_doc.html'
  57. form_class = DocumentUploadForm
  58. success_url = reverse_lazy('partner_detail')
  59. def dispatch(self, request, *args, **kwargs):
  60. self.doc_code = kwargs.get("doc_code")
  61. self.doc_name = Documents.DOC_TYPES_DICT[self.doc_code]
  62. self.page_title = _("Изменение документа партнера: ") + self.doc_name
  63. self.company = get_object_or_404(Company, repr_id=self.request.user)
  64. return super().dispatch(request, *args, **kwargs)
  65. def form_valid(self, form):
  66. with transaction.atomic():
  67. doc_file = self.request.FILES.getlist("doc_file")
  68. for file in doc_file:
  69. print(file)
  70. create_ticket_partner_docs_verification(self.request.user, self.company, self.doc_name, self.doc_code)
  71. # Отправляем полAьзователю уведомление на страницу об успехе операции
  72. messages.success(self.request, f'Файлы документа "{self.doc_name}" успешно загружены и теперь проходят проверку!')
  73. return super().form_valid(form)