From 12282a8ce4d5a2aaa3227ebf0eff712b7ec0ccd9 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Wed, 3 Dec 2025 21:31:45 +0300 Subject: [PATCH] =?UTF-8?q?FIX:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=81?= =?UTF-8?q?=D1=83=D0=BC=D0=BC=D1=8B=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=BC?= =?UTF-8?q?=D0=B5=D1=88=D0=B0=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=BE=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=20+=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Убран параметр версии ?v=4 из подключения terminal.js (для разработки не нужен) 2. Исправлена логика автоподстановки суммы в PaymentWidget: - Теперь при выборе способа оплаты подставляется ОСТАТОЧНАЯ сумма - Остаток = amount_due - уже добавленные платежи - Добавлена подсказка "Осталось оплатить: X руб." Пример: - Заказ на 30 руб. - Добавили платеж 10 руб. наличными - Выбираем картой → автоматически подставится 20 руб. (а не 30!) Это предотвращает ошибки и переплаты при смешанной оплате. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- myproject/orders/static/orders/js/payment_widget.js | 11 +++++++---- myproject/pos/templates/pos/terminal.html | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/myproject/orders/static/orders/js/payment_widget.js b/myproject/orders/static/orders/js/payment_widget.js index eda750d..da6e18b 100644 --- a/myproject/orders/static/orders/js/payment_widget.js +++ b/myproject/orders/static/orders/js/payment_widget.js @@ -164,15 +164,18 @@ export class PaymentWidget { const amountInput = document.getElementById(`${this.containerId}-amount`); const hint = document.getElementById(`${this.containerId}-hint`); + // Вычисляем остаток с учетом уже добавленных платежей + const remaining = this.order.amount_due - this.getTotalPayments(); + if (this.selectedMethod.code === 'account_balance' && this.customer) { - const maxAmount = Math.min(this.order.amount_due, this.customer.wallet_balance); + const maxAmount = Math.min(remaining, this.customer.wallet_balance); amountInput.max = maxAmount; amountInput.value = maxAmount.toFixed(2); - hint.textContent = `Макс: ${maxAmount.toFixed(2)} руб.`; + hint.textContent = `Макс: ${maxAmount.toFixed(2)} руб. | Осталось: ${remaining.toFixed(2)} руб.`; } else { amountInput.removeAttribute('max'); - amountInput.value = this.order.amount_due.toFixed(2); - hint.textContent = ''; + amountInput.value = remaining.toFixed(2); + hint.textContent = `Осталось оплатить: ${remaining.toFixed(2)} руб.`; } } diff --git a/myproject/pos/templates/pos/terminal.html b/myproject/pos/templates/pos/terminal.html index 7c01bbe..325b8dc 100644 --- a/myproject/pos/templates/pos/terminal.html +++ b/myproject/pos/templates/pos/terminal.html @@ -504,5 +504,5 @@ } - + {% endblock %}