Files
we_pro_dock/BACKEND/TENANTS.md
2024-05-14 16:58:27 +03:00

12 KiB
Raw Blame History

Кортеж типа организации

INDIVIDUAL = 'individual'
LEGAL_ENTITY = 'legal_entity'

TENANT_TYPES = [
(INDIVIDUAL, 'Физическое лицо'),
(LEGAL_ENTITY, 'Юридическое лицо'),
]
ORGANIZATION_SUBTYPE_CHOICES = (
('NULL', '-------'),
('llc', 'ООО (Общество с ограниченной ответственностью)'),
('jsc', 'ЗАО (Закрытое акционерное общество)'),
('ojsc', 'ОАО (Открытое акционерное общество)'),
('sole_proprietorship', 'ИП (Индивидуальный предприниматель)'),
('self_employed', 'Самозанятый'),
)

Модель арендаторах

  1. tenant_type (CharField): Тип арендатора (INDIVIDUAL, LEGAL_ENTITY).
  2. organization_type (CharField): Тип организации (llc, jsc, ojsc, sole_proprietorship, self_employed).
  3. trade_name (CharField): Торговое наименование арендатора.
  4. Поля для физического лица:
    1. tenant_name (CharField): Имя арендатора (максимум 255 символов).
    2. tenant_surname (CharField): Фамилия арендатора (максимум 255 символов).
    3. tenant_patronymic (CharField): Отчество арендатора (максимум 255 символов).
    4. tenant_passport_series (CharField): Серия паспорта арендатора (4 символа, обязательное поле).
    5. tenant_passport_number (CharField): Номер паспорта арендатора (6 символов, обязательное поле).
    6. tenant_passport_issued_by (CharField): Кем выдан паспорт арендатора (максимум 255 символов).
    7. tenant_passport_issued_date (DateField): Дата выдачи паспорта арендатора.
    8. tenant_registration (TextField): Прописка арендатора (большой текстовый блок для детального описания).
  5. Поля для юридического лица:
    1. tenant_company_name (CharField): Название организации (максимум 255 символов).
    2. tenant_inn (CharField): ИНН организации (12 символов, обязательное поле).
    3. kpp (CharField): КПП организации (9 символов).
    4. tenant_ogrn (CharField): ОГРН организации (15 символов).
    5. bank_details (TextField): Реквизиты банка организации (большой текстовый блок для детального описания).
  6. additional_info (TextField): Дополнительная информация об арендаторе.
  7. tenant_file (ManyToManyField): Связь со сканами документов арендатора.
  8. history (HistoricalRecords): История изменений модели.

Модель контактной информации

  1. contact_type (CharField): Тип контакта (email, phone).
  2. attitude_contact_type (CharField): Атрибут контакта (Worker, private, Other_type).
  3. value (CharField): Значение контакта.
  4. tenant (ForeignKey): Ссылка на объект арендатора.
  5. first_name, last_name, organization, job_title, address (CharField): Дополнительные данные контакта.
  6. history (HistoricalRecords): История изменений модели.

Сериализатор

  1. TenantSerializer:

    • tenantType (CharField): Тип арендатора.
    • organizationType (CharField): Тип организации (юридического лица).
    • tradeName (CharField): Название арендуемой организацией единицы недвижимости.
    • tenantName (CharField): Имя арендатора (физического лица).
    • tenantSurname (CharField): Фамилия арендатора (физического лица).
    • tenantPatronymic (CharField): Отчество арендатора (физического лица).
    • tenantPassportSeries (CharField): Серия паспорта арендатора (физического лица).
    • tenantPassportNumber (CharField): Номер паспорта арендатора (физического лица).
    • tenantPassportIssuedBy (CharField): Кем выдан паспорт арендатора (физического лица).
    • tenantPassportIssuedDate (DateField): Дата выдачи паспорта арендатора (физического лица).
    • tenantRegistration (TextField): Прописка арендатора (физического лица) или дополнительная информация (юридического лица).
    • tenantCompanyName (CharField): Название организации арендатора (юридического лица).
    • tenantInn (CharField): ИНН организации арендатора (юридического лица).
    • KPP (CharField): КПП организации арендатора (юридического лица).
    • tenantOgrn (CharField): ОГРН организации арендатора (юридического лица).
    • bankDetails (CharField): Реквизиты банка организации арендатора (юридического лица).
    • additionalInfo (TextField): Дополнительная информация о арендаторе.
    • tenantFile (FileField): Скан документов арендатора.
    • author (AuthorSerializer): Информация об авторе.
    • createdAt (DateTimeField): Дата создания записи.
    • updatedAt (DateTimeField): Дата обновления записи.
  2. ContactSerializer:

    • contactTypeTenant (CharField): Тип контакта арендатора.
    • attitudeContactTypeTenant (CharField): Атрибут контакта арендатора.
    • valueTenant (CharField): Значение контакта арендатора.
    • firstNameTenant (CharField): Имя арендатора (физического лица).
    • lastNameTenant (CharField): Фамилия арендатора (физического лица).
    • organizationTenant (CharField): Название организации арендатора (юридического лица).
    • jobTitleTenant (CharField): Должность арендатора (юридического лица).
    • addressTenant (CharField): Адрес арендатора.
    • author (AuthorSerializer): Информация об авторе.
    • createdAt (DateTimeField): Дата создания записи.
    • updatedAt (DateTimeField): Дата обновления записи.

Маршрутизатор

  1. URL для списка и деталей арендаторов:
    • '': Пустая строка указывает на корневой URL приложения. Он включает в себя все URL из tenant_router.
  2. URL для контактов арендаторов:
    • '<int:id>/contacts': Этот URL позволяет получить список контактов для определенного арендатора с идентификатором id. Он ссылается на представление ContactTenantViewSet.
  3. URL для удаления контакта арендатора:
    • '<int:tenant_id>/contacts/<int:contact_id>/': Этот URL используется для удаления конкретного контакта для арендатора с идентификатором tenant_id и идентификатором контакта contact_id. Он ссылается на представление DeleteContactTenantView.

Контроллер

  1. TenantView:

    • Основной viewset для модели Tenant.
    • queryset: Устанавливает все объекты Tenant в качестве запроса по умолчанию.
    • serializer_class: Использует TenantSerializer для сериализации и десериализации данных.
    • permission_classes: Устанавливает разрешения для доступа к представлениям (в данном случае, только аутентифицированные пользователи с правами владельца и администратора).
    • lookup_field: Поле, используемое для поиска объектов Tenant.
    • filterset_class: Фильтры для списка арендаторов.
    • http_method_names: Определяет доступные методы HTTP (GET, POST, PUT, DELETE).
  2. Методы TenantView:

    • list: Получает список арендаторов.
    • create: Создает нового арендатора.
    • retrieve: Получает детали конкретного арендатора.
    • update: Обновляет данные арендатора.
    • destroy: Удаляет арендатора.
  3. ContactTenantViewSet:

    • Представление для работы с контактами арендаторов.
    • queryset: Устанавливает все объекты Contact в качестве запроса по умолчанию.
    • serializer_class: Использует ContactSerializer для сериализации и десериализации данных.
    • permission_classes: Устанавливает разрешения для доступа к представлениям (в данном случае, только аутентифицированные пользователи).
  4. Методы ContactTenantViewSet:

    • list: Получает список контактов для конкретного арендатора.
    • post: Создает новый контакт для арендатора.
  5. DeleteContactTenantView:

    • Представление для удаления контакта арендатора.
    • destroy: Удаляет контакт.

Права доступа и разрешения

  1. IsOwnerOrCollaborator:

    • Разрешение для проверки доступа к объектам на основе их владельца или участника.
    • has_object_permission: Метод, который проверяет разрешение на доступ к конкретному объекту.
      • Разрешает доступ только для безопасных методов (GET, HEAD, OPTIONS) или если пользователь является владельцем объекта.
  2. IsOwnerAndAdmin:

    • Разрешение, позволяющее только авторам объектов Tenant и пользователям с группой 'admin' доступ к операциям CRUD.
    • has_permission: Метод, который проверяет разрешение на доступ к представлению (view), основанное на группе пользователя.
      • Разрешает доступ только для аутентифицированных пользователей с группой 'admin'.
    • has_object_permission: Метод, который проверяет разрешение на доступ к конкретному объекту.
      • Разрешает доступ для владельца объекта или для пользователя с группой 'admin'.