Feature: Добавлены методы получения суммы заказов клиента

Добавлены методы в модель Customer для расчета суммы успешных заказов:
- get_successful_orders_total() - гибкий метод с фильтрацией по датам
- get_last_year_orders_total() - сумма за последний год

Удалено устаревшее поле total_spent:
- Методы предоставляют более точные и актуальные данные
- Используют агрегацию на уровне БД для производительности

Обновлен UI карточки клиента:
- Отображается сумма всех успешных заказов
- Отображается сумма заказов за последний год
- Убрана колонка total_spent из списка клиентов

Изменения:
- customers/models.py: добавлены методы, удалено поле total_spent
- customers/views.py: добавлен расчет сумм в контекст
- customers/templates: обновлены шаблоны
- customers/admin.py: удалены упоминания total_spent
- Создана миграция 0005_remove_total_spent

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-06 00:21:45 +03:00
parent 2f7fed4a1a
commit 8d50613876
6 changed files with 83 additions and 19 deletions

View File

@@ -30,7 +30,6 @@ class CustomerAdmin(admin.ModelAdmin):
'email',
'phone',
'wallet_balance_display',
'total_spent',
'is_system_customer',
'created_at'
)
@@ -45,7 +44,7 @@ class CustomerAdmin(admin.ModelAdmin):
)
date_hierarchy = 'created_at'
ordering = ('-created_at',)
readonly_fields = ('created_at', 'updated_at', 'total_spent', 'is_system_customer', 'wallet_balance')
readonly_fields = ('created_at', 'updated_at', 'is_system_customer', 'wallet_balance')
fieldsets = (
('Основная информация', {
@@ -54,10 +53,6 @@ class CustomerAdmin(admin.ModelAdmin):
('Кошелёк', {
'fields': ('wallet_balance',),
}),
('Статистика покупок', {
'fields': ('total_spent',),
'classes': ('collapse',)
}),
('Заметки', {
'fields': ('notes',)
}),
@@ -82,7 +77,7 @@ class CustomerAdmin(admin.ModelAdmin):
"""Делаем все поля read-only для системного клиента"""
if obj and obj.is_system_customer:
# Для системного клиента все поля только для чтения
return ['name', 'email', 'phone', 'total_spent', 'is_system_customer', 'wallet_balance', 'notes', 'created_at', 'updated_at']
return ['name', 'email', 'phone', 'is_system_customer', 'wallet_balance', 'notes', 'created_at', 'updated_at']
return self.readonly_fields
def has_delete_permission(self, request, obj=None):