Advertisement
Mochinov

Untitled

Apr 18th, 2022
826
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.46 KB | None | 0 0
  1.  
  2. submission_request_property.py
  3.  
  4.  
  5.  
  6.  
  7. from datetime import timedelta
  8. from functools import reduce
  9. import logging
  10. from typing import Any, List, Union, Optional
  11.  
  12. from django.db.models import QuerySet, Q
  13. from django.http import HttpRequest
  14. from django.urls import reverse
  15. from django.utils import timezone
  16. from django.utils.crypto import get_random_string
  17. from rest_framework import permissions
  18. from rest_framework.decorators import permission_classes
  19. from rest_framework.request import Request
  20. from rest_framework.response import Response
  21.  
  22. from crm_notification.models import Notification
  23. from itrade import settings
  24. from misc.spliting import split_query
  25. from misc.to_int import safe_to_int
  26. from misc.views.generic_api_single_view import GenericApiSingleView
  27. from misc.views.generic_api_view import GenericApiView
  28. from misc.views.generic_filters import GenericFilters
  29. from misc.views.table_style import TableStyle
  30. from partners.systems import System
  31.  
  32. from users.models import (
  33.     SubmissionRequest,
  34.     AuthorizationInformationLV,
  35.     ResetPasswordPin,
  36.     User,
  37. )
  38.  
  39. log = logging.getLogger(__name__)
  40.  
  41.  
  42. @permission_classes((permissions.AllowAny,))
  43. class SubmissionRequestPropertyElementView(GenericApiSingleView):
  44.     """Определяет структуру и содержание ответа на запросы к данным элемента User (Таб с историей активности)."""
  45.  
  46.     table_name = 'SubmissionRequestProperty'
  47.     element_verbose = 'Запрос на имущество'
  48.  
  49.     PERMISSIONS = {
  50.         # 'create': 'users.crm_users_can_add_employee',
  51.         'view': 'users.crm_users_can_view_employee',
  52.         'edit': 'users.crm_users_can_edit_employee',
  53.         # 'delete': 'users.crm_users_can_delete_employee',
  54.         'view_all': 'users.crm_users_can_view_and_edit_all',
  55.         'edit_current_user_personal_information': 'users.crm_users_edit_current_user_personal_information',
  56.     }
  57.  
  58.     def get_queryset(self, context: dict, user: User) -> QuerySet:
  59.         """Возвращает базовый (до фильтрации и пагинации) QuerySet."""
  60.  
  61.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  62.             submission_request_queryset = SubmissionRequest.objects.filter(user=user)
  63.         else:
  64.             submission_request_queryset = SubmissionRequest.objects.all()
  65.  
  66.         return submission_request_queryset
  67.  
  68.     def additional_permission_check(self, obj: Any, request: Union[HttpRequest, Request]) -> bool:
  69.         """Дополнительные проверки на разрешения."""
  70.  
  71.         user = request.user
  72.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  73.             set_of_user = User.objects.get_set_of_subordinates_user(user=user)
  74.             if obj not in set_of_user:
  75.                 return False
  76.         return True
  77.  
  78.  
  79.     def prepare_tabs_args(self, request: Union[HttpRequest, Request], obj: Any, pk: Optional[int] = -1,
  80.                           parent_id: Optional[int] = None) -> dict:
  81.         """Подготавливает словарь аргументов для табов."""
  82.  
  83.         return {
  84.             'user_id': pk,
  85.             'submission_request_access_tab_for_user_id': pk,
  86.             'submission_request_property_tab_for_user_id': pk,
  87.         }
  88.  
  89.     @staticmethod
  90.     def additional_check_for_tab(tab_name: str, user: User, context: dict, obj: Optional[Any] = None) -> bool:
  91.         """
  92.        Дополнительная проверка для таба
  93.  
  94.        Возвращает логическое значения, разрешать ли выводит таб или нет
  95.  
  96.        Пока решил не делать проверку каждого таба на права (у которых не делал, одинаковые права как и у этого таба),
  97.        тк метод has_view_permission и сама работа с пермишенами, скорее всего, будут изменятся
  98.        """
  99.  
  100.         from crm_control.views.personnel_accounting import PersonnelAccountingElementView
  101.  
  102.         if tab_name == 'personnel_accounting':
  103.             personnel_accounting_obj = (
  104.                 obj.record_in_personnel_accounting.id
  105.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  106.             )
  107.             return PersonnelAccountingElementView.has_view_permission(
  108.                 user=user, context=context, obj=personnel_accounting_obj
  109.             )
  110.  
  111.         return True
  112.  
  113.     def get_tables(self, context: dict, user: User, obj: Any, pk: int) -> list:
  114.         """Возвращает встроенные таблицы."""
  115.  
  116.         user_property_access_table_style = TableStyle.get_table_style(
  117.             mode=TableStyle.TableStyleMode.SIMPLE,
  118.             hide_options=False,
  119.             hide_clear_button=False,
  120.             hide_create_button=True,
  121.             hide_pagination_info=True,
  122.         )
  123.  
  124.         tables = []
  125.         if obj:
  126.             tables = [
  127.                 {
  128.                     'name': 'UserProperty',
  129.                     'verbose': 'Имущество',
  130.                     'url': reverse('submission_request_property_list'),
  131.                     'prefilters': {
  132.                         'table_style': user_property_access_table_style,
  133.                         'user_id_field': str(pk),
  134.                     },
  135.                 },
  136.             ]
  137.         return tables
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement