Исправлен баг с переплатой при изменении суммы заказа

Проблема:
- Создан заказ на 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 для аудита

Теперь при уменьшении суммы заказа переплата корректно возвращается клиенту
This commit is contained in:
2025-11-29 20:23:25 +03:00
parent 29e47e7248
commit a7ccbbec48

View File

@@ -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):