Advertisement
Mochinov

Untitled

Apr 13th, 2022
1,034
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.04 KB | None | 0 0
  1. from typing import Union
  2.  
  3. from django.db.models import QuerySet
  4. from django.http import HttpRequest
  5. from django.urls import reverse
  6. from users.models.user import User
  7. from users.models.user_access import ConnectingUserToAccess
  8. from users.models import UserAccess
  9. from rest_framework import permissions
  10. from rest_framework.decorators import permission_classes
  11. from rest_framework.request import Request
  12. from rest_framework.response import Response
  13.  
  14. from misc.to_int import safe_to_int
  15. from misc.views.generic_api_view import GenericApiView
  16. from misc.views.generic_api_single_view import GenericApiSingleView
  17. from misc.views.generic_filters import GenericFilters
  18. from misc.views.generic_responces import get_status_response
  19.  
  20. @permission_classes((permissions.AllowAny,))
  21. class ConnectingUserToAccessTableView(GenericApiView):
  22.     """Определяет структуру и содержание ответа на запросы к данным таблицы ConnectingUserToAccess."""
  23.  
  24.     table_name = 'ConnectingUserToAccess'
  25.  
  26.     class Filters(GenericFilters):
  27.         pass
  28.    
  29.     FIELDS_FILTERS = [
  30.         GenericApiView.get_filter(
  31.             filter_name='id_field',
  32.             field_name='id',
  33.             filer_method=Filters.generic_int_equal_filter,
  34.         ),
  35.         GenericApiView.get_filter(
  36.             filter_name='transfer_date_field',
  37.             field_name='transfer_date',
  38.             filer_method=Filters.generic_str_contains_filter,
  39.         ),
  40.         GenericApiView.get_filter(
  41.             filter_name='return_date_field',
  42.             field_name='return_date',
  43.             filer_method=Filters.generic_str_contains_filter,
  44.         ),
  45.         GenericApiView.get_filter(
  46.             filter_name='comment_field',
  47.             field_name='comment',
  48.             filer_method=Filters.generic_str_contains_filter,
  49.         ),
  50.         GenericApiView.get_filter(
  51.             filter_name='user_access_field',
  52.             field_name='user_access',
  53.             filer_method=Filters.generic_str_contains_filter,
  54.         ),
  55.         GenericApiView.get_filter(
  56.             filter_name='user_field',
  57.             field_name='user',
  58.             filer_method=Filters.generic_str_contains_filter,
  59.         ),
  60.     ]
  61.  
  62.     PERMISSIONS = {
  63.         'create': 'users.crm_users_can_edit_employee',
  64.         'view': 'users.crm_users_can_view_employee',
  65.         'edit': 'users.crm_users_can_edit_employee',
  66.         'delete': 'users.crm_users_can_edit_employee',
  67.         'view_all': 'users.crm_users_can_view_and_edit_all',
  68.     }
  69.  
  70.     def get_queryset(self, context: dict, user: 'UserAccess') -> QuerySet:
  71.         """Возвращает базовый (до фильтрации и пагинации) QuerySet для таблицы."""
  72.  
  73.         user_id = context.get('user_id_field', -1)
  74.         return ConnectingUserToAccess.objects.filter(user__id=user_id, status=ConnectingUserToAccess.Status.ACTIVE)
  75.  
  76.     @classmethod
  77.     def get_actions(cls) -> list:
  78.         """Возвращает список со списком действий, применимый к набору данных. """
  79.  
  80.         actions = [
  81.             cls.get_action(
  82.                 name='edit',
  83.                 verbose='Сохранить изменения',
  84.                 url=reverse('user_access_list'),
  85.             ),
  86.         ]
  87.         return actions
  88.  
  89.     @staticmethod
  90.     def get_field_dict(context: dict, user: User) -> dict:
  91.         """Распаковывает ответ и возвращает словарь со значениями полей"""
  92.  
  93.         user_id_field = ConnectingUserToAccessTableView.get_unpack_value(context.get('user_field'))
  94.         user_id_field = safe_to_int(user_id_field, -1)
  95.         user_field = User.objects.filter(id=user_id_field).first()
  96.  
  97.         user_access_id_field = ConnectingUserToAccessTableView.get_unpack_value(context.get('user_access_field'))
  98.         user_access_id_field = safe_to_int(user_access_id_field, -1)
  99.         user_access_field = UserAccess.objects.filter(id=user_access_id_field).first()
  100.  
  101.         data = {
  102.             'user': user_field,
  103.             'user_access': user_access_field,
  104.             'transfer_date': ConnectingUserToAccessTableView.get_unpack_value(context.get('transfer_date_field')),
  105.             'return_date': ConnectingUserToAccessTableView.get_unpack_value(context.get('return_date_field')),
  106.             'comment': ConnectingUserToAccessTableView.get_unpack_value(context.get('comment_field')),
  107.         }
  108.         return data
  109.    
  110.     def get_action_methods(self) -> dict:
  111.         """Возвращает словарь соотношений названий действий с их методом."""
  112.  
  113.         return {
  114.             'edit': self.edit_elements,
  115.         }
  116.  
  117.     def get_empty_item_prefilled_fields(self, context: dict) -> dict:
  118.         """Возвращает список предзаполненных полей для пустого элемента."""
  119.  
  120.         user_field = context.get('user_id_field')
  121.         prefilled_fields = {'user_field': user_field}
  122.  
  123.         return prefilled_fields
  124.  
  125. @permission_classes((permissions.AllowAny,))
  126. class ConnectingUserToAccessElementView(GenericApiSingleView):
  127.     """
  128.    Определяет структуру и содержание ответа на запросы к данным элемента ConnectingUserToAccess.
  129.  
  130.    В данный момент используется только для работы с методом DELETE
  131.    """
  132.  
  133.     table_name = 'UserProperty'
  134.     element_verbose = 'Доступы у сотрудника'
  135.     table_view_model = ConnectingUserToAccessTableView
  136.  
  137.     PERMISSIONS = {
  138.         # 'create': 'users.crm_users_can_edit_employee',
  139.         # 'view': 'users.crm_users_can_view_employee',
  140.         # 'edit': 'users.crm_users_can_edit_employee',
  141.         'delete': 'users.crm_users_can_edit_employee',
  142.         'view_all': 'users.crm_users_can_view_and_edit_all',
  143.         'edit_current_user_personal_information': 'users.crm_users_edit_current_user_personal_information',
  144.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement