From 65ab153f9ea9322d03b52a0989e35ec63906d157 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sat, 29 Nov 2025 02:07:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C:=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D1=8B=20(=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=B4?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=D0=BD=D1=8B=D0=BC=20=D0=B2=D0=BE=D0=B7=D0=B2?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BE=D0=BC=20=D0=B2=20=D0=BA=D0=BE=D1=88?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ПРОБЛЕМА: При оплате заказа с переплатой (например, 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 раз. --- myproject/orders/views.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/myproject/orders/views.py b/myproject/orders/views.py index dbf98e6..c905f5e 100644 --- a/myproject/orders/views.py +++ b/myproject/orders/views.py @@ -117,9 +117,6 @@ def order_create(request): order.amount_paid = sum(p.amount for p in order.payments.all()) 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) @@ -218,9 +215,6 @@ def order_update(request, order_number): order.amount_paid = sum(p.amount for p in order.payments.all()) 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)