From a7ccbbec4893192621c22bcc75418370acaf1aa0 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sat, 29 Nov 2025 20:23:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BF=D0=BB=D0=B0=D1=82=D0=BE=D0=B9=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=81=D1=83=D0=BC=D0=BC=D1=8B=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблема: - Создан заказ на 150 руб, оплачено 300 руб → 150 руб в кошелёк - Изменены товары, сумма стала 100 руб - amount_paid остался 300, total_amount стал 100 - Новая переплата 200 руб НЕ переносилась в кошелёк автоматически Решение: - В Order.calculate_total() добавлена проверка переплаты после пересчёта суммы - Если amount_paid > total_amount, вызывается WalletService.add_overpayment() - Излишек автоматически переносится в кошелёк, amount_paid нормализуется до total_amount - Создаётся WalletTransaction для аудита Теперь при уменьшении суммы заказа переплата корректно возвращается клиенту --- myproject/orders/models/order.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/myproject/orders/models/order.py b/myproject/orders/models/order.py index c11a2cc..5bfadfe 100644 --- a/myproject/orders/models/order.py +++ b/myproject/orders/models/order.py @@ -328,6 +328,12 @@ class Order(models.Model): # Сохраняем изменения в БД self.save(update_fields=['total_amount', 'delivery_cost', 'is_custom_delivery_cost']) + # Проверяем переплату после изменения суммы заказа + if self.amount_paid > self.total_amount: + from customers.services.wallet_service import WalletService + # Переносим переплату в кошелёк (пользователь - modified_by или None) + WalletService.add_overpayment(self, self.modified_by) + return self.total_amount def recalculate_amount_paid(self):