Implement flexible order status management system
Features: - Created OrderStatus model for managing statuses per tenant - Added system-level statuses: draft, new, confirmed, in_assembly, in_delivery, completed, return, cancelled - Implemented CRUD views for managing order statuses - Created OrderStatusService with status transitions and business logic hooks - Updated Order model to use ForeignKey to OrderStatus - Added is_returned flag for tracking returned orders - Updated filters to work with new OrderStatus model - Created management command for status initialization - Added HTML templates for status list, form, and confirmation - Fixed views.py to use OrderStatus instead of removed STATUS_CHOICES 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""
|
||||
Management command для создания системных статусов заказов.
|
||||
|
||||
Использование:
|
||||
python manage.py create_order_statuses
|
||||
python manage.py create_order_statuses --reset
|
||||
python manage.py create_order_statuses --schema grach
|
||||
"""
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import connection
|
||||
from django_tenants.utils import get_tenant_model
|
||||
from orders.services.order_status_service import OrderStatusService
|
||||
from orders.models import OrderStatus
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
"""
|
||||
Создает системные статусы заказов для текущего тенанта.
|
||||
"""
|
||||
help = 'Создает системные статусы заказов для текущего тенанта'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
"""Добавляем опциональные аргументы"""
|
||||
parser.add_argument(
|
||||
'--reset',
|
||||
action='store_true',
|
||||
help='Удалить все статусы перед созданием (осторожно!)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--schema',
|
||||
type=str,
|
||||
help='Имя схемы тенанта (по умолчанию текущий тенант)',
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
"""Основной обработчик команды"""
|
||||
# Если указана схема, переходим на нее
|
||||
schema_name = options.get('schema')
|
||||
if schema_name:
|
||||
Tenant = get_tenant_model()
|
||||
try:
|
||||
tenant = Tenant.objects.get(schema_name=schema_name)
|
||||
connection.set_tenant(tenant)
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'Переключился на тенант: {tenant.name}')
|
||||
)
|
||||
except Tenant.DoesNotExist:
|
||||
self.stdout.write(
|
||||
self.style.ERROR(f'Тенант со схемой {schema_name} не найден')
|
||||
)
|
||||
return
|
||||
|
||||
if options['reset']:
|
||||
count = OrderStatus.objects.count()
|
||||
self.stdout.write(
|
||||
self.style.WARNING(f'Удаляю {count} статусов...')
|
||||
)
|
||||
OrderStatus.objects.all().delete()
|
||||
|
||||
self.stdout.write('Создаю системные статусы...')
|
||||
|
||||
try:
|
||||
OrderStatusService.create_default_statuses()
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS('Системные статусы успешно созданы')
|
||||
)
|
||||
except Exception as e:
|
||||
self.stdout.write(
|
||||
self.style.ERROR(f'Ошибка при создании статусов: {str(e)}')
|
||||
)
|
||||
return
|
||||
|
||||
# Выводим информацию о созданных статусах
|
||||
statuses = OrderStatus.objects.all().order_by('order')
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'\nВсего создано {statuses.count()} статусов:')
|
||||
)
|
||||
|
||||
for status in statuses:
|
||||
status_type = 'Системный' if status.is_system else 'Пользовательский'
|
||||
end_type = ''
|
||||
if status.is_positive_end:
|
||||
end_type = ' [Успешный]'
|
||||
elif status.is_negative_end:
|
||||
end_type = ' [Отрицательный]'
|
||||
|
||||
self.stdout.write(
|
||||
f' - {status.name:<20} ({status.code:<15}) - {status_type}{end_type}'
|
||||
)
|
||||
Reference in New Issue
Block a user