Исправлена двойная обработка переплаты при изменении суммы заказа
Проблема: - add_overpayment вызывался дважды: 1. При оплате 300 руб (заказ 150) → +150 в кошелёк 2. При изменении суммы до 100 → +200 в кошелёк - Итого: 350 руб вместо правильных 200 руб Причина: - calculate_total() вызывал add_overpayment при любой переплате - Не учитывалось, что переплата уже была обработана при оплате Решение: - Сохраняем old_total перед пересчётом - Вызываем add_overpayment ТОЛЬКО если: - old_total > 0 (заказ уже существовал) - total_amount < old_total (сумма УМЕНЬШИЛАСЬ) - amount_paid > total_amount (есть переплата) - Это предотвращает двойную обработку при первичной оплате Теперь переплата обрабатывается корректно только при изменении суммы заказа
This commit is contained in:
@@ -323,13 +323,16 @@ class Order(models.Model):
|
||||
# Пересчитываем стоимость доставки если она автоматическая
|
||||
self.recalculate_delivery_cost()
|
||||
|
||||
# Сохраняем старую сумму для проверки изменений
|
||||
old_total = self.total_amount
|
||||
self.total_amount = items_total + self.delivery_cost
|
||||
|
||||
# Сохраняем изменения в БД
|
||||
self.save(update_fields=['total_amount', 'delivery_cost', 'is_custom_delivery_cost'])
|
||||
|
||||
# Проверяем переплату после изменения суммы заказа
|
||||
if self.amount_paid > self.total_amount:
|
||||
# Проверяем переплату ТОЛЬКО если сумма заказа уменьшилась
|
||||
# (чтобы избежать двойной обработки при первоначальной оплате)
|
||||
if old_total > 0 and self.total_amount < old_total and self.amount_paid > self.total_amount:
|
||||
from customers.services.wallet_service import WalletService
|
||||
# Переносим переплату в кошелёк (пользователь - modified_by или None)
|
||||
WalletService.add_overpayment(self, self.modified_by)
|
||||
|
||||
Reference in New Issue
Block a user