feat: Добавлена функциональность управления заказами и улучшен поиск товаров

Заказы:
- Добавлены миграции для исторических записей с полями оплаты и получателя
- Расширен admin для заказов с инлайнами товаров/комплектов
- Реализованы представления списка, создания, редактирования и удаления заказов
- Добавлен шаблон подтверждения удаления заказа
- Настроены URL-маршруты для работы с заказами

Клиенты:
- Добавлена миграция с новыми полями адресов и подтверждений
- Обновлена модель клиентов с дополнительными полями
- Улучшен admin для работы с клиентами

Товары:
- Значительно улучшен API поиска товаров с поддержкой фильтрации
- Добавлен Select2 виджет для динамического поиска товаров
- Создан статический JS файл для интеграции Select2
- Оптимизирована обработка запросов и ответов API

Прочее:
- Добавлены новые настройки в settings.py
- Обновлена навигация в navbar.html
- Обновлены URL-маршруты проекта

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-07 16:10:19 +03:00
parent a1dfb6a257
commit ec0557c8cf
15 changed files with 974 additions and 70 deletions

View File

@@ -1,6 +1,16 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from .models import Order, OrderItem
from .models import Order, OrderItem, Payment
class PaymentInline(admin.TabularInline):
"""
Inline для управления платежами по заказу.
"""
model = Payment
extra = 1
fields = ['amount', 'payment_method', 'payment_date', 'created_by', 'notes']
readonly_fields = ['payment_date']
class OrderItemInline(admin.TabularInline):
@@ -27,18 +37,19 @@ class OrderAdmin(admin.ModelAdmin):
list_display = [
'order_number',
'customer',
'delivery_type',
'is_delivery',
'delivery_date',
'status',
'total_amount',
'is_paid',
'payment_status',
'amount_paid',
'created_at',
]
list_filter = [
'status',
'delivery_type',
'is_paid',
'is_delivery',
'payment_status',
'delivery_date',
'created_at',
]
@@ -58,6 +69,8 @@ class OrderAdmin(admin.ModelAdmin):
'updated_at',
'delivery_info',
'delivery_time_window',
'amount_due',
'payment_status',
]
fieldsets = (
@@ -66,7 +79,8 @@ class OrderAdmin(admin.ModelAdmin):
}),
('Доставка', {
'fields': (
'delivery_type',
'is_delivery',
'customer_is_recipient',
'delivery_address',
'pickup_shop',
'delivery_date',
@@ -78,19 +92,26 @@ class OrderAdmin(admin.ModelAdmin):
)
}),
('Оплата', {
'fields': ('payment_method', 'is_paid', 'total_amount')
'fields': (
'payment_method',
'total_amount',
'discount_amount',
'amount_paid',
'amount_due',
'payment_status',
)
}),
('Дополнительно', {
'fields': ('is_anonymous', 'special_instructions'),
'classes': ('collapse',)
}),
('Системная информация', {
'fields': ('created_at', 'updated_at'),
'fields': ('created_at', 'updated_at', 'modified_by'),
'classes': ('collapse',)
}),
)
inlines = [OrderItemInline]
inlines = [OrderItemInline, PaymentInline]
actions = [
'mark_as_confirmed',
@@ -131,6 +152,41 @@ class OrderAdmin(admin.ModelAdmin):
mark_as_paid.short_description = 'Отметить как оплаченные'
@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
"""
Админ-панель для управления платежами.
"""
list_display = [
'order',
'amount',
'payment_method',
'payment_date',
'created_by',
]
list_filter = [
'payment_method',
'payment_date',
]
search_fields = [
'order__order_number',
'notes',
]
readonly_fields = ['payment_date']
fieldsets = (
('Информация о платеже', {
'fields': ('order', 'amount', 'payment_method', 'payment_date')
}),
('Дополнительно', {
'fields': ('created_by', 'notes')
}),
)
@admin.register(OrderItem)
class OrderItemAdmin(admin.ModelAdmin):
"""