Исправлена форма заказа: две колонки и корректная работа кнопки сохранения

- Разделен экран на две колонки: заказ слева, оплата справа
- Форма оплаты вынесена за пределы основной формы заказа (устранена проблема вложенных форм)
- Исправлен метод calculate_total() для сохранения итоговой суммы в БД
- Добавлена модель Transaction для учета платежей и возвратов
- Добавлена модель PaymentMethod для методов оплаты
- Удалена старая модель Payment, заменена на Transaction
- Добавлен TransactionService для управления транзакциями
- Обновлен интерфейс форм оплаты для правой колонки
- Кнопка 'Сохранить изменения' теперь работает корректно
This commit is contained in:
2025-11-29 14:33:23 +03:00
parent 438ca5d515
commit c1351e1f49
14 changed files with 1188 additions and 548 deletions

View File

@@ -1,17 +1,18 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.utils.html import format_html
from .models import Order, OrderItem, Payment, PaymentMethod, Address, OrderStatus
from .models import Order, OrderItem, Transaction, PaymentMethod, Address, OrderStatus
class PaymentInline(admin.TabularInline):
class TransactionInline(admin.TabularInline):
"""
Inline для управления платежами по заказу.
Inline для управления транзакциями по заказу.
"""
model = Payment
extra = 1
fields = ['amount', 'payment_method', 'payment_date', 'created_by', 'notes']
readonly_fields = ['payment_date']
model = Transaction
extra = 0
fields = ['transaction_type', 'amount', 'payment_method', 'transaction_date', 'created_by', 'reason', 'notes']
readonly_fields = ['transaction_date']
can_delete = False # Используйте refund вместо удаления
class OrderItemInline(admin.TabularInline):
@@ -110,7 +111,7 @@ class OrderAdmin(admin.ModelAdmin):
}),
)
inlines = [OrderItemInline, PaymentInline]
inlines = [OrderItemInline, TransactionInline]
actions = [
'mark_as_confirmed',
@@ -151,37 +152,41 @@ class OrderAdmin(admin.ModelAdmin):
mark_as_paid.short_description = 'Отметить как оплаченные'
@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
@admin.register(Transaction)
class TransactionAdmin(admin.ModelAdmin):
"""
Админ-панель для управления платежами.
Админ-панель для управления транзакциями.
"""
list_display = [
'order',
'transaction_type',
'amount',
'payment_method',
'payment_date',
'transaction_date',
'created_by',
'reason',
]
list_filter = [
'transaction_type',
'payment_method',
'payment_date',
'transaction_date',
]
search_fields = [
'order__order_number',
'reason',
'notes',
]
readonly_fields = ['payment_date']
readonly_fields = ['transaction_date']
fieldsets = (
('Информация о платеже', {
'fields': ('order', 'amount', 'payment_method', 'payment_date')
('Информация о транзакции', {
'fields': ('order', 'transaction_type', 'amount', 'payment_method', 'transaction_date')
}),
('Дополнительно', {
'fields': ('created_by', 'notes')
'fields': ('related_payment', 'reason', 'created_by', 'notes')
}),
)