""" Скрипт для очистки витринных комплектов без резервов. Запуск: python manage.py shell < cleanup_showcase_kits.py """ from django.db import connection from products.models import ProductKit from inventory.models import Reservation # Устанавливаем схему tenant schema_name = 'anatol' with connection.cursor() as cursor: cursor.execute(f'SET search_path TO {schema_name}') print('=' * 70) print(f'ОЧИСТКА ВИТРИННЫХ КОМПЛЕКТОВ БЕЗ РЕЗЕРВОВ (схема: {schema_name})') print('=' * 70) # Находим все активные витринные комплекты showcase_kits = ProductKit.objects.filter( is_temporary=True, showcase__isnull=False, status='active' ).select_related('showcase') orphaned_kits = [] for kit in showcase_kits: # Проверяем наличие зарезервированных компонентов has_reservations = Reservation.objects.filter( product_kit=kit, showcase=kit.showcase, status='reserved' ).exists() if not has_reservations: orphaned_kits.append(kit) if not orphaned_kits: print('\n✅ Проблемных комплектов не найдено. Все витринные комплекты имеют резервы.\n') else: print(f'\n⚠️ Найдено {len(orphaned_kits)} витринных комплектов БЕЗ РЕЗЕРВОВ:\n') for kit in orphaned_kits: print( f' • ID: {kit.id} | "{kit.name}" | Витрина: {kit.showcase.name} | ' f'Цена: {kit.actual_price} руб.' ) print('\n📝 Для удаления запустите скрипт с подтверждением') print('Или удалите вручную через админку Django\n') print('=' * 70)