- Add check_stock.py: script to view Stock records with reservations - Add refresh_stock_reservations.py: standalone script to recalculate quantity_reserved for all Stock records - Both scripts work with 'grach' tenant schema 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""
|
||
Скрипт для пересчета quantity_reserved для всех Stock записей
|
||
Нужен после добавления сигналов для Reservation
|
||
"""
|
||
import os
|
||
import django
|
||
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
|
||
django.setup()
|
||
|
||
from django.db import connection
|
||
from inventory.models import Stock
|
||
|
||
# Устанавливаем схему для работы с tenant
|
||
with connection.cursor() as cursor:
|
||
cursor.execute('SET search_path TO grach')
|
||
|
||
print('[НАЧАЛО] Обновление quantity_reserved для всех Stock записей...')
|
||
|
||
# Получаем все Stock записи
|
||
stocks = Stock.objects.all()
|
||
total_count = stocks.count()
|
||
|
||
print(f'[INFO] Найдено Stock записей: {total_count}')
|
||
|
||
updated_count = 0
|
||
for stock in stocks:
|
||
try:
|
||
# Вызываем refresh_from_batches() который пересчитывает quantity_reserved
|
||
stock.refresh_from_batches()
|
||
updated_count += 1
|
||
|
||
if stock.quantity_reserved > 0:
|
||
print(f' [OK] Stock #{stock.id}: {stock.product.name} - зарезервировано: {stock.quantity_reserved}')
|
||
except Exception as e:
|
||
print(f' [ОШИБКА] Stock #{stock.id}: {str(e)}')
|
||
|
||
print(f'\n[ЗАВЕРШЕНО] Обновлено записей: {updated_count} из {total_count}')
|
||
print('[OK] Все резервы пересчитаны!')
|