Исправлен баг с переплатой при изменении суммы заказа
Проблема: - Создан заказ на 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:
@@ -328,6 +328,12 @@ class Order(models.Model):
|
|||||||
# Сохраняем изменения в БД
|
# Сохраняем изменения в БД
|
||||||
self.save(update_fields=['total_amount', 'delivery_cost', 'is_custom_delivery_cost'])
|
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
|
return self.total_amount
|
||||||
|
|
||||||
def recalculate_amount_paid(self):
|
def recalculate_amount_paid(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user