Files
octopus/myproject/scripts/check_duplicates.py
Andrey Smakotin 256606f2a0 chore: Реорганизация проекта - очистка и структурирование файлов
- Добавлена папка ДОКУМЕНТАЦИЯ с централизованным хранением всех руководств
- Перенесены утилитарные скрипты в myproject/scripts/
- Удалены временные файлы (current_settings.txt, old_settings.txt, nul)
- Добавлены celerybeat-schedule файлы в .gitignore
- Обновлен .env.example (удалены устаревшие настройки PLATFORM_SUPPORT)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 05:50:42 +03:00

67 lines
2.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import django
# Setup Django
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'myproject'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from inventory.models import Reservation
from django.db.models import Count
# Найти дубликаты резервов трансформаций
duplicates = Reservation.objects.filter(
transformation_input__isnull=False
).values(
'transformation_input', 'product', 'warehouse'
).annotate(
count=Count('id')
).filter(
count__gt=1
)
print(f"Found {duplicates.count()} duplicate transformation reservations")
if duplicates.exists():
print("\nDuplicate groups:")
for dup in duplicates[:10]:
print(f" TransformationInput ID: {dup['transformation_input']}, "
f"Product ID: {dup['product']}, "
f"Warehouse ID: {dup['warehouse']}, "
f"Count: {dup['count']}")
# Show actual reservations
reservations = Reservation.objects.filter(
transformation_input_id=dup['transformation_input'],
product_id=dup['product'],
warehouse_id=dup['warehouse']
)
for res in reservations:
print(f" - Reservation ID {res.id}: quantity={res.quantity}, status={res.status}")
print("\n--- CLEANING DUPLICATES ---")
# Для каждой группы дубликатов оставляем только один резерв
for dup in duplicates:
reservations = Reservation.objects.filter(
transformation_input_id=dup['transformation_input'],
product_id=dup['product'],
warehouse_id=dup['warehouse']
).order_by('id')
# Оставляем первый, удаляем остальные
first = reservations.first()
others = reservations.exclude(id=first.id)
count = others.count()
if count > 0:
others.delete()
print(f"Deleted {count} duplicate reservations for TransformationInput {dup['transformation_input']}")
print("\n--- DONE ---")
else:
print("No duplicates found!")