feat(discounts, orders): рефакторинг системы скидок - единый источник правды

- Добавлен combine_mode в форму создания/редактирования скидок
- Добавлена колонка "Объединение" в список скидок с иконками
- Добавлен фильтр по режиму объединения скидок
- Добавлена валидация: только одна exclusive скидка на заказ
- Удалены дублирующие поля из Order и OrderItem:
  - applied_discount, applied_promo_code, discount_amount
- Скидки теперь хранятся только в DiscountApplication
- Добавлены свойства для обратной совместимости

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-11 13:46:02 +03:00
parent cd758a0645
commit c070e42cab
9 changed files with 192 additions and 112 deletions

View File

@@ -116,7 +116,6 @@ class OrderAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
'status',
'payment_status',
'created_at',
'applied_discount',
]
search_fields = [
@@ -132,7 +131,6 @@ class OrderAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
'created_at',
'updated_at',
'subtotal_display',
'discount_display',
'amount_due',
'payment_status',
]
@@ -149,16 +147,13 @@ class OrderAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
}),
('Скидки', {
'fields': (
'applied_discount',
'applied_promo_code',
'discount_amount',
'discount_display',
),
'classes': ('collapse',)
}),
('Оплата', {
'fields': (
'subtotal_display',
'discount_display',
'total_amount',
'amount_paid',
'amount_due',
@@ -289,7 +284,6 @@ class OrderItemAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
list_filter = [
'order__status',
'order__created_at',
'applied_discount',
]
search_fields = [
@@ -310,10 +304,6 @@ class OrderItemAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
('Информация', {
'fields': ('quantity', 'price', 'item_discount_display', 'get_total_price')
}),
('Скидка', {
'fields': ('applied_discount', 'discount_amount'),
'classes': ('collapse',)
}),
('Системная информация', {
'fields': ('created_at',),
'classes': ('collapse',)