Advertisement
Mochinov

Untitled

Apr 11th, 2022
1,059
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.27 KB | None | 0 0
  1.  
  2.  
  3. @permission_classes((permissions.AllowAny,))
  4. class ActivityHistoryTabForUserElementView(GenericApiSingleView):
  5.     """Определяет структуру и содержание ответа на запросы к данным элемента User (Таб с историей активности)."""
  6.  
  7.     table_name = 'ActivityHistory'
  8.     element_verbose = 'История активности'
  9.  
  10.     PERMISSIONS = {
  11.         'view': 'users.crm_users_can_view_employee',
  12.         'view_all': 'users.crm_users_can_view_and_edit_all',
  13.     }
  14.  
  15.     def get_queryset(self, context: dict, user: User) -> QuerySet:
  16.         """Возвращает базовый (до фильтрации и пагинации) QuerySet."""
  17.  
  18.         return User.objects.all()
  19.  
  20.     def additional_permission_check(self, obj: Any, request: Union[HttpRequest, Request]) -> bool:
  21.         """Дополнительные проверки на разрешения."""
  22.  
  23.         user = request.user
  24.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  25.             set_of_user = User.objects.get_set_of_subordinates_user(user=user)
  26.             if obj not in set_of_user:
  27.                 return False
  28.         return True
  29.  
  30.     def prepare_tabs_args(self, request: Union[HttpRequest, Request], obj: Any, pk: Optional[int] = -1,
  31.                           parent_id: Optional[int] = None) -> dict:
  32.         """Подготавливает словарь аргументов для табов."""
  33.  
  34.         return {
  35.             'user_id': pk,
  36.             'personnel_accounting_id': (
  37.                 obj.record_in_personnel_accounting.id
  38.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  39.             ),
  40.             'billing_information_user_id': pk,
  41.             'additional_information_user_id': pk,
  42.             'referrals_tab_for_user_id': pk,
  43.             'activity_history_tab_for_user_id': pk,
  44.             'user_changes_tab_for_user_id': pk,
  45.             'access_and_property_tab_for_user_id': pk,
  46.         }
  47.  
  48.     @staticmethod
  49.     def additional_check_for_tab(tab_name: str, user: User, context: dict, obj: Optional[Any] = None) -> bool:
  50.         """
  51.        Дополнительная проверка для таба
  52.  
  53.        Возвращает логическое значения, разрешать ли выводит таб или нет
  54.  
  55.        Пока решил не делать проверку каждого таба на права (у которых не делал, одинаковые права как и у этого таба),
  56.        тк метод has_view_permission и сама работа с пермишенами, скорее всего, будут изменятся
  57.        """
  58.  
  59.         from crm_control.views.personnel_accounting import PersonnelAccountingElementView
  60.  
  61.         if tab_name == 'personnel_accounting':
  62.             personnel_accounting_obj = (
  63.                 obj.record_in_personnel_accounting.id
  64.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  65.             )
  66.             return PersonnelAccountingElementView.has_view_permission(
  67.                 user=user, context=context, obj=personnel_accounting_obj
  68.             )
  69.  
  70.         return True
  71.  
  72.     def get_tables(self, context: dict, user: User, obj: Any, pk: int) -> list:
  73.         """Возвращает встроенные таблицы."""
  74.  
  75.         activity_history_table_style = TableStyle.get_table_style(mode=TableStyle.TableStyleMode.NORMAL,
  76.                                                                   hide_options=False, hide_clear_button=False,
  77.                                                                   hide_create_button=True, hide_pagination_info=True)
  78.         tables = []
  79.         if obj:
  80.             tables = [
  81.                 {
  82.                     'name': 'ActivityHistory',
  83.                     'verbose': 'История активности',
  84.                     'url': reverse('activity_history_list'),
  85.                     'prefilters': {
  86.                         'table_style': activity_history_table_style,
  87.                         'user_id_field': str(pk),
  88.                     },
  89.                 },
  90.             ]
  91.         return tables
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement