Рефакторинг: убрана финализация черновиков и улучшены шаблоны заказов

- Убран черновик как отдельная сущность с процессом финализации
- Черновик теперь просто обычный OrderStatus
- Удалены кнопки 'Сохранить как черновик' и 'Финализировать черновик'
- Унифицирована логика сохранения/обновления заказов для всех статусов

Улучшения шаблонов:
- Стандартизировано форматирование валюты через floatformat:2
- Исправлено отображение статуса (используется OrderStatus.label и color)
- Исправлено отображение способа оплаты (корректное использование ForeignKey)
- Добавлены иконки к заголовкам секций для лучшего UX
- Удалены избыточные console.log (~160 строк)
- Очищены комментарии и улучшена читаемость кода
- Убрано использование переменной is_draft в контексте
- Добавлена визуальная согласованность между шаблонами заказов
This commit is contained in:
2025-11-29 01:49:48 +03:00
parent 9415aca63d
commit a97fc39a2c
4 changed files with 228 additions and 383 deletions

View File

@@ -139,6 +139,46 @@ class WalletService:
return usable_amount
@staticmethod
@transaction.atomic
def refund_wallet_payment(order, amount, user):
"""
Возврат средств в кошелёк при удалении платежа.
Увеличивает баланс кошелька и создаёт транзакцию deposit.
Args:
order: Заказ, по которому был платёж
amount: Сумма возврата
user: Пользователь, инициировавший возврат
Returns:
Decimal: Возвращённая сумма
"""
from customers.models import Customer, WalletTransaction
amount = _quantize(amount)
if amount <= 0:
return None
# Блокируем запись клиента
customer = Customer.objects.select_for_update().get(pk=order.customer_id)
# Увеличиваем баланс
customer.wallet_balance = _quantize(customer.wallet_balance + amount)
customer.save(update_fields=['wallet_balance'])
# Создаём транзакцию возврата
WalletTransaction.objects.create(
customer=customer,
amount=amount,
transaction_type='deposit',
order=order,
description=f'Возврат платежа по заказу #{order.order_number}',
created_by=user
)
return amount
@staticmethod
@transaction.atomic
def adjust_balance(customer_id, amount, description, user):