Программирование. Доработка существующего продукта. Введение В интернет-магазине уже реализован функционал аренды, работающий на основе WooCommerce и вариационных товаров. Что уже сделано: - Вариационные товары используются для аренды с разными типами активации. - В заказах присутствует метаполе _rental_end_date, которое хранит дату окончания аренды. - Заказы, связанные с арендой, имеют статус «Обработка» (processing), переименованный в «В аренде». - Автоматически устанавливается дата завершения аренды при оформлении заказа. - Уже работают напоминания о сдаче аренды и смена статуса заказа. Вся логика аренды уже протестирована и успешно работает. Есть прототип всего этого функционала. Я его разработал с новой моделью ChatGPT o3-mini-hight, который на процентов 90 справляется c поставленной задачей, но есть проблемы с оплатой. Нужно посмотреть взглядом специалиста и внести необходимые изменения. 1. Общая задача Вкратце что требуется? Добавить функционал платного продления аренды без изменения текущей логики заказов. Продление должно выполняться в рамках уже существующего заказа, а не через создание нового. 2. Функциональные требования 2.1. Условия продления Продление доступно на странице деталей заказа в личном кабинете, если: - Заказ в статусе «Обработка» (processing). - В заказе есть хотя бы один вариационный товар. - Продление возможно только для вариационных товаров. 2.2. Расчёт суммы продления - Срок продления — 7 дней. - Цена за неделю берётся из регулярной или текущей цены товара. - Итоговая сумма — сумма продления для всех вариационных товаров. - Если сумма = 0, продление недоступно. 2.3. Процесс продления Инициирование: - Кнопка «Продлить аренду (на 7 дней)» на странице заказа. - Проверка (nonce, авторизация, принадлежность заказа). - Расчёт суммы продления и переход на страницу оплаты. Оплата и обновление заказа: - Страница оплаты отображает сумму и форму оплаты. После успешного платежа: - К заказу прибавляется сумма продления. - _rental_end_date увеличивается на 7 дней. - Добавляется примечание о продлении. - Статус заказа остаётся «Обработка». - Пользователь получает уведомление. 3. Технические детали 3.1. Интеграция в личный кабинет - Кнопка продления добавляется думаю через woocommerce_order_details_after_order_table. - Отображается только при статусе «Обработка» и наличии вариационных товаров. 3.2. Обработка запроса на продление - Проверка пользователя, nonce и статуса заказа. - Расчёт суммы продления. - Сохранение данных во временное хранилище (сессия WooCommerce). 3.3. Страница оплаты (Думаю проще создать кастомную, но приобретение конечно это всё сделать через штатный функционал) Шорткод [extend_rental_payment] выводит сумму и форму оплаты. После успешной оплаты: - Обновляется _rental_end_date и сумма заказа. - Добавляется примечание о продлении. - Очищается временное хранилище. 3.4. Безопасность - Использование nonce-защиты. - Проверка владельца заказа. - Обработка ошибок (например, если сумма продления = 0). 3.5. Интеграция с WooCommerce - Корректное обновление заказов без создания новых. - Использование стандартных методов WC_Order для изменения суммы заказа и даты аренды. 4. Ожидаемый результат - Кнопка продления отображается в заказах со статусом «Обработка». - Пользователь может оплатить продление на 7 дней. - Заказ обновляется: добавляется сумма, изменяется дата аренды, статус остаётся «Обработка». - В заказе фиксируются изменения, пользователь получает уведомление. 5. Дополнительно - Желательно реализовать оплату через стандартные методы WooCommerce. - Обязательное тестирование на тестовых заказах. - Логирование действий для отладки возможных ошибок.