""" 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}' )