Упрощена логика обработки переплаты - убрана автоматика из calculate_total
Проблема: - calculate_total() пытался автоматически обрабатывать переплату - Это приводило к дублированию логики и сложной отладке - Нарушался принцип единственной ответственности Решение: - Удалена автоматическая обработка переплаты из Order.calculate_total() - Теперь calculate_total() ТОЛЬКО считает сумму - всё - Переплата обрабатывается ТОЛЬКО в TransactionService при создании платежей/возвратов - Добавлено предупреждение в UI о переплате с инструкцией Как работает теперь: 1. При оплате - TransactionService автоматически вызывает add_overpayment() 2. При изменении товаров - calculate_total() только пересчитывает сумму 3. Если появилась переплата - оператор видит предупреждение 4. Оператор вручную создаёт возврат в кошелёк через форму Преимущества: - Одно место ответственности за переплаты - Прозрачность для оператора - Нет скрытых автоматизмов - Легко обслуживать и отлаживать - Стандартный подход для e-commerce
This commit is contained in:
@@ -609,6 +609,22 @@
|
||||
|
||||
<!-- Блок статистики -->
|
||||
{% if order.pk %}
|
||||
|
||||
<!-- Предупреждение о переплате -->
|
||||
{% if order.amount_paid > order.total_amount %}
|
||||
{% with overpayment=order.amount_paid|add:"-"|add:order.total_amount %}
|
||||
<div class="alert alert-warning mb-3">
|
||||
<i class="bi bi-exclamation-triangle-fill"></i> <strong>Обнаружена переплата!</strong><br>
|
||||
<small>
|
||||
Оплачено <strong>{{ order.amount_paid|floatformat:2 }} руб.</strong>,
|
||||
сумма заказа <strong>{{ order.total_amount|floatformat:2 }} руб.</strong><br>
|
||||
Переплата: <strong class="text-danger">{{ overpayment|floatformat:2 }} руб.</strong><br>
|
||||
Создайте возврат в кошелёк клиента во вкладке «Создать возврат» ниже.
|
||||
</small>
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="card border-primary">
|
||||
|
||||
Reference in New Issue
Block a user