Advertisement
Mochinov

Untitled

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