+ {% for payment in order.payments.all %}
+
-
Внесено платежей:
+
Всего внесено:
- 0.00 руб.
+ {{ order.amount_paid|default:"0.00"|floatformat:2 }} руб.
@@ -1631,20 +1630,29 @@ document.addEventListener('DOMContentLoaded', function() {
// Функция для расчета итоговой суммы платежей
function calculatePaymentsTotal() {
+ // 1. Считаем уже сохраненные платежи (информационные блоки)
+ let existingTotal = 0;
+ const existingPayments = document.querySelectorAll('.bg-light .text-success');
+ existingPayments.forEach((el) => {
+ const text = el.textContent.replace(/[^0-9.,]/g, '').replace(',', '.');
+ const amount = parseFloat(text) || 0;
+ existingTotal += amount;
+ });
+
+ // 2. Считаем новые платежи в formset
const visiblePaymentForms = Array.from(document.querySelectorAll('.payment-form'))
.filter(form => !form.classList.contains('deleted'));
- let total = 0;
-
+ let newTotal = 0;
visiblePaymentForms.forEach((form) => {
const amountField = form.querySelector('[name$="-amount"]');
if (amountField) {
const amount = parseFloat(amountField.value.replace(',', '.')) || 0;
- total += amount;
+ newTotal += amount;
}
});
- return total;
+ return existingTotal + newTotal;
}
function updatePaymentsTotal() {
@@ -1735,19 +1743,6 @@ document.addEventListener('DOMContentLoaded', function() {
addPaymentBtn.addEventListener('click', addNewPayment);
}
- // Добавляем обработчики удаления для существующих платежей
- paymentsContainer.querySelectorAll('.remove-payment-btn').forEach(btn => {
- btn.addEventListener('click', function() {
- const form = this.closest('.payment-form');
- removePayment(form);
- });
- });
-
- // Добавляем обработчики для автоматического пересчета для существующих форм
- paymentsContainer.querySelectorAll('[name$="-amount"]').forEach(field => {
- field.addEventListener('input', updatePaymentsTotal);
- });
-
// Инициализируем итоговую сумму
updatePaymentsTotal();
diff --git a/myproject/orders/views.py b/myproject/orders/views.py
index c905f5e..472285b 100644
--- a/myproject/orders/views.py
+++ b/myproject/orders/views.py
@@ -157,6 +157,31 @@ def order_update(request, order_number):
order = get_object_or_404(Order, order_number=order_number)
if request.method == 'POST':
+ # Обработка удаления существующего платежа
+ delete_payment_id = request.POST.get('delete_payment_id')
+ if delete_payment_id:
+ try:
+ from orders.models import Payment
+ from customers.services.wallet_service import WalletService
+
+ payment = Payment.objects.get(pk=delete_payment_id, order=order)
+
+ # Если это платеж из кошелька - возвращаем средства
+ if payment.payment_method and payment.payment_method.code == 'account_balance':
+ WalletService.refund_wallet_payment(order, payment.amount, request.user)
+
+ payment.delete()
+
+ # Пересчитываем сумму оплаты
+ order.amount_paid = sum(p.amount for p in order.payments.all())
+ order.update_payment_status()
+
+ messages.success(request, 'Платеж успешно удален.')
+ return redirect('orders:order-update', order_number=order.order_number)
+ except Payment.DoesNotExist:
+ messages.error(request, 'Платеж не найден.')
+ return redirect('orders:order-update', order_number=order.order_number)
+
form = OrderForm(request.POST, instance=order)
formset = OrderItemFormSet(request.POST, instance=order)
payment_formset = PaymentFormSet(request.POST, instance=order, prefix='payments')