Fix product reservation system for demo orders
PROBLEM ANALYSIS: - SQL script created orders bypassing Django ORM - Django signals (post_save) didn't trigger - No reservations were created automatically - Found 51 orders with 102 items and 0 reservations SOLUTION IMPLEMENTED: 1. Updated create_demo_orders command: - Added clear documentation about ORM usage - Already uses ORM (.save()) which triggers signals - Added informative messages about automatic reservations 2. Created fix_missing_reservations command: - Finds OrderItems without reservations - Creates missing Reservation records - Supports --dry-run mode for safety - Handles missing warehouses gracefully 3. Created SQL fix script: - Direct SQL approach for existing data - Creates reservations for all 102 items - Status: 'reserved' - Verified: All items now have reservations 4. Added verification scripts: - check_orders.py: Shows orders/items/reservations count - run_fix_reservations.py: Executes SQL fix RESULTS: - ✓ 102 reservations created for existing orders - ✓ Future orders will use ORM and create reservations automatically - ✓ System now works correctly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
"""
|
||||
Management команда для создания демо-заказов на разные даты
|
||||
ВАЖНО: Создает заказы через Django ORM, что автоматически активирует
|
||||
сигналы резервирования товаров!
|
||||
"""
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.utils import timezone
|
||||
@@ -15,7 +17,7 @@ from products.models import Product
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Создает 20-30 демо-заказов на разные даты'
|
||||
help = 'Создает демо-заказы через ORM (с автоматическим резервированием товаров)'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
@@ -39,7 +41,8 @@ class Command(BaseCommand):
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute(f'SET search_path TO {schema_name}')
|
||||
|
||||
self.stdout.write(f'Начинаем создание демо-заказов в схеме {schema_name}...')
|
||||
self.stdout.write(f'[НАЧАЛО] Создание {count} демо-заказов в схеме {schema_name}...')
|
||||
self.stdout.write('[INFO] Заказы создаются через ORM - резервы товаров будут созданы автоматически!')
|
||||
|
||||
# Проверяем наличие необходимых данных
|
||||
customers = list(Customer.objects.all())
|
||||
@@ -193,10 +196,11 @@ class Command(BaseCommand):
|
||||
order.save()
|
||||
|
||||
created_count += 1
|
||||
self.stdout.write(f' Создан заказ #{order.order_number} на {delivery_date}')
|
||||
self.stdout.write(f' [OK] Заказ #{order.order_number} на {delivery_date} (товаров: {len(order_products)})')
|
||||
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.ERROR(f'Ошибка при создании заказа {i+1}: {str(e)}'))
|
||||
self.stdout.write(self.style.ERROR(f'[ОШИБКА] Заказ {i+1}: {str(e)}'))
|
||||
|
||||
self.stdout.write(self.style.SUCCESS(f'\nУспешно создано {created_count} заказов!'))
|
||||
self.stdout.write(self.style.SUCCESS(f'\n[ЗАВЕРШЕНО] Успешно создано {created_count} заказов!'))
|
||||
self.stdout.write(f'Даты доставки: от {today - timedelta(days=15)} до {today + timedelta(days=15)}')
|
||||
self.stdout.write(self.style.SUCCESS('\n[ВАЖНО] Резервы товаров созданы автоматически через Django сигналы!'))
|
||||
|
||||
Reference in New Issue
Block a user