Удален метод add_overpayment - больше не используется
This commit is contained in:
@@ -23,52 +23,6 @@ class WalletService:
|
|||||||
Все операции атомарны и блокируют запись клиента для избежания race conditions.
|
Все операции атомарны и блокируют запись клиента для избежания race conditions.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@transaction.atomic
|
|
||||||
def add_overpayment(order, user):
|
|
||||||
"""
|
|
||||||
Обработка переплаты по заказу.
|
|
||||||
Переносит излишек в кошелёк клиента и нормализует amount_paid заказа.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
order: Заказ с переплатой
|
|
||||||
user: Пользователь, инициировавший операцию
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Decimal: Сумма переплаты или None, если переплаты нет
|
|
||||||
"""
|
|
||||||
from customers.models import Customer, WalletTransaction
|
|
||||||
|
|
||||||
overpayment = order.amount_paid - order.total_amount
|
|
||||||
if overpayment <= 0:
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Блокируем запись клиента для обновления
|
|
||||||
customer = Customer.objects.select_for_update().get(pk=order.customer_id)
|
|
||||||
|
|
||||||
# Округляем переплату до 2 знаков
|
|
||||||
overpayment = _quantize(overpayment)
|
|
||||||
|
|
||||||
# Увеличиваем баланс кошелька
|
|
||||||
customer.wallet_balance = _quantize(customer.wallet_balance + overpayment)
|
|
||||||
customer.save(update_fields=['wallet_balance'])
|
|
||||||
|
|
||||||
# Создаём транзакцию для аудита
|
|
||||||
WalletTransaction.objects.create(
|
|
||||||
customer=customer,
|
|
||||||
amount=overpayment,
|
|
||||||
transaction_type='deposit',
|
|
||||||
order=order,
|
|
||||||
description=f'Переплата по заказу #{order.order_number}',
|
|
||||||
created_by=user
|
|
||||||
)
|
|
||||||
|
|
||||||
# Нормализуем amount_paid заказа до total_amount
|
|
||||||
order.amount_paid = order.total_amount
|
|
||||||
order.save(update_fields=['amount_paid'])
|
|
||||||
|
|
||||||
return overpayment
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def pay_with_wallet(order, amount, user):
|
def pay_with_wallet(order, amount, user):
|
||||||
|
|||||||
Reference in New Issue
Block a user