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

137 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Кортеж типа организации
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'.