## Модели 1. **Contract:** - **`contract_type`** (CharField): выбор типа договора (аренда, продажа). - **`number`** (CharField): уникальный номер договора. - **`start_date`** (DateField): дата начала договора. - **`end_date`** (DateField): дата окончания договора (может быть пустой). - **`esignature`** (BooleanField): указывает на наличие ЭЦП в договоре. - **`edo`** (BooleanField): указывает на наличие ЭДО в договоре. - **`tenant`** (ForeignKey): связь с моделью арендатора. - **`goods`** (ManyToManyField): связь с имуществом, связанным с договором. - **`related_objects`** (ManyToManyField): связь с объектами, связанными с договором. - **`contract_file`** (ManyToManyField): связь с файлами/сканами договора. - **`contract_photo_pp`** (ManyToManyField): связь с фотографиями при приеме-передаче недвижимости. 2. **Payment:** - **`payment_frequency`** (CharField): частота платежей (разовый, ежемесячно и т.д.). - **`payment_method`** (CharField): метод оплаты (постоплата, предоплата). - **`payment_type`** (CharField): тип оплаты (наличные, безналичные). - **`rent_cost`** (DecimalField): стоимость аренды. - **`rent_rate`** (DecimalField): арендная ставка. - **`compensation`** (CharField): информация о компенсации. - `**security_deposit**` (DecimalField): залог. - `**payment_duration**` (DateField): дата окончания оплаты. - **`is_paid`** (BooleanField): указывает на оплаченность платежа. - **`contract`** (ForeignKey): связь с моделью договора. ## Сериализатор 1. **ContractSerializer:** - `id`: Идентификатор договора. - `contractContractType`: Тип договора. - `contractnumber`: Номер договора. - `contractStartDate`: Дата начала договора. - `contractEndDate`: Дата окончания договора. - `contractEsignature`: Наличие ЭЦП в договоре. - `contractEdo`: Наличие ЭДО в договоре. - `tenant`: Внешний ключ на модель арендатора. - `goods`: Множественный внешний ключ на модель имущества. - `related_objects`: Множественный внешний ключ на модель объектов. - `contractFile`: Файл договора. - `contractPhotoPp`: Фотография при приеме-передаче недвижимости. - `author`: Информация об авторе (использует `AuthorSerializer`). - `createdAt`: Дата создания. - `updatedAt`: Дата обновления. 2. **PaymentSerializer:** - `id`: Идентификатор платежа. - `contract`: Внешний ключ на модель договора. - `paymentFrequency`: Частота платежей. - `paymentMethod`: Метод оплаты. - `paymentType`: Тип оплаты. - `paymentRentCost`: Стоимость аренды. - `paymentRentRate`: Арендная ставка. - `paymentCompensation`: Компенсация. - `paymentSecurityDeposit`: Залог. - `paymentPaymentDuration`: Дата окончания оплаты. - `paymentIsPaid`: Оплачено ли. - `author`: Информация об авторе (использует `AuthorSerializer`). - `createdAt`: Дата создания. - `updatedAt`: Дата обновления. ## Маршрутизатор 1. **URL для списка и деталей договоров:** - `''`: Этот URL указывает на корневой URL вашего приложения. - Включает все URL из `router`, который зарегистрирован для представления `ContractViewSet`. 2. **URL для списка платежей по договору и создания нового платежа:** - `contracts//payments`: Этот URL позволяет получить список платежей для определенного договора с идентификатором `id`. Он связан с представлением `PaymentContractViewSet`. 3. **URL для удаления платежа по договору:** - `contracts//payments//`: Этот URL используется для удаления конкретного платежа для договора с идентификатором `contract_id` и идентификатором платежа `payment_id`. Он связан с представлением `DeletePaymentContractView`. ## Контроллер 1. **ContractViewSet**: - `queryset`: Получает все объекты договоров (`Contract`). - `serializer_class`: Использует `ContractSerializer` для сериализации и десериализации данных. - `permission_classes`: Позволяет доступ только аутентифицированным пользователям. - `lookup_field`: Указывает поле, используемое для поиска объектов (в данном случае, идентификатор). - `http_method_names`: Определяет доступные методы HTTP. - **Методы**: - `list`: Получает список договоров. - `create`: Создает новый договор. - `retrieve`: Получает детали конкретного договора. - `update`: Обновляет данные договора. - `destroy`: Удаляет договор. 2. **PaymentViewSet**: - `queryset`: Получает все объекты платежей (`Payment`). - `serializer_class`: Использует `PaymentSerializer` для сериализации и десериализации данных. - `permission_classes`: Позволяет доступ только аутентифицированным пользователям. - `lookup_field`: Указывает поле, используемое для поиска объектов (в данном случае, идентификатор). - `http_method_names`: Определяет доступные методы HTTP. - **Методы**: - `list`: Получает список платежей. - `create`: Создает новый платеж. - `retrieve`: Получает детали конкретного платежа. - `update`: Обновляет данные платежа. - `destroy`: Удаляет платеж. 3. **PaymentContractViewSet**: - Представление для списка и создания платежей по договору. - `queryset`: Получает все объекты платежей (`Payment`). - `serializer_class`: Использует `PaymentSerializer` для сериализации и десериализации данных. - `permission_classes`: Позволяет доступ только аутентифицированным пользователям. - **Методы**: - `list`: Получает список платежей по конкретному договору. - `post`: Создает новый платеж для указанного договора. 4. **DeletePaymentContractView**: - Представление для удаления платежа по договору. - `destroy`: Удаляет указанный платеж по указанному договору.