53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
"""
|
||
Скрипт для очистки витринных комплектов без резервов.
|
||
Запуск: 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)
|