Исправить: дублирование обработки переплаты (баг с двойным возвратом в кошелек)

ПРОБЛЕМА:
При оплате заказа с переплатой (например, 15000 руб за заказ 7770 руб),
сдача возвращалась в кошелек клиента дважды:
- 1 раз: 7230 руб (правильно)
- 2 раз: 7230 руб (дубль!)
- ИТОГО: 14460 руб вместо 7230 руб

ПРИЧИНА:
Обработка переплаты вызывалась в двух местах:
1. Payment.save() → вызывал WalletService.add_overpayment() ✓
2. order_create/order_update в views.py → еще раз вызывал add_overpayment() ✗

РЕШЕНИЕ:
Убраны дублирующие вызовы WalletService.add_overpayment() из views.py.
Теперь переплата обрабатывается ТОЛЬКО в Payment.save() - это правильное
место, т.к. переплата появляется именно при сохранении нового платежа.

ИЗМЕНЕНИЯ:
- orders/views.py (order_create): убран вызов add_overpayment
- orders/views.py (order_update): убран вызов add_overpayment

Теперь при переплате сдача возвращается ровно 1 раз.
This commit is contained in:
2025-11-29 02:07:36 +03:00
parent fa845ada29
commit 65ab153f9e

View File

@@ -118,9 +118,6 @@ def order_create(request):
order.calculate_total()
order.update_payment_status()
# Обрабатываем переплату (если amount_paid > total_amount)
WalletService.add_overpayment(order, request.user)
messages.success(request, f'Заказ #{order.order_number} успешно создан!')
return redirect('orders:order-detail', order_number=order.order_number)
else:
@@ -219,9 +216,6 @@ def order_update(request, order_number):
order.calculate_total()
order.update_payment_status()
# Обрабатываем переплату (если amount_paid > total_amount)
WalletService.add_overpayment(order, request.user)
messages.success(request, f'Заказ #{order.order_number} успешно обновлен!')
return redirect('orders:order-detail', order_number=order.order_number)
else: