""" Тестовый скрипт для проверки генерации артикулов """ import os import django # Настройка Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') django.setup() from products.models import Product, ProductKit, ProductCategory, ProductVariantGroup, SKUCounter def test_sku_generation(): print("=" * 80) print("ТЕСТИРОВАНИЕ СИСТЕМЫ ГЕНЕРАЦИИ АРТИКУЛОВ") print("=" * 80) # Проверяем текущее состояние счетчиков print("\n1. Текущее состояние счетчиков:") print("-" * 80) for counter in SKUCounter.objects.all(): print(f" {counter.get_counter_type_display()}: {counter.current_value}") if not SKUCounter.objects.exists(): print(" Счетчики еще не созданы. Они будут созданы при первом создании товара.") # Создаем тестовую категорию print("\n2. Создание тестовой категории:") print("-" * 80) category, created = ProductCategory.objects.get_or_create( name="Розы", defaults={'slug': 'rozy'} ) print(f" Категория 'Розы' {'создана' if created else 'уже существует'}") # Тест 1: Простой товар без группы вариантов print("\n3. Тест 1: Простой товар без суффикса:") print("-" * 80) product1 = Product( name="Роза красная", category=category, cost_price=100, sale_price=200 ) product1.save() print(f" Товар: {product1.name}") print(f" Артикул: {product1.sku}") print(f" Суффикс варианта: {product1.variant_suffix or 'нет'}") # Тест 2: Товар с размером в названии print("\n4. Тест 2: Товар с размером в названии (автопарсинг):") print("-" * 80) product2 = Product( name="Роза Freedom 50см", category=category, cost_price=150, sale_price=300 ) product2.save() print(f" Товар: {product2.name}") print(f" Артикул: {product2.sku}") print(f" Суффикс варианта: {product2.variant_suffix or 'нет'}") # Тест 3: Товар с другим размером print("\n5. Тест 3: Товар с другим размером:") print("-" * 80) product3 = Product( name="Роза Freedom 60 см", category=category, cost_price=180, sale_price=350 ) product3.save() print(f" Товар: {product3.name}") print(f" Артикул: {product3.sku}") print(f" Суффикс варианта: {product3.variant_suffix or 'нет'}") # Тест 4: Товар с буквенным размером print("\n6. Тест 4: Товар с буквенным размером:") print("-" * 80) product4 = Product( name="Коробка подарочная размер M", category=category, cost_price=50, sale_price=100 ) product4.save() print(f" Товар: {product4.name}") print(f" Артикул: {product4.sku}") print(f" Суффикс варианта: {product4.variant_suffix or 'нет'}") # Тест 5: Товар с ручным указанием суффикса print("\n7. Тест 5: Товар с ручным указанием суффикса:") print("-" * 80) product5 = Product( name="Лента атласная красная", category=category, cost_price=20, sale_price=40, variant_suffix="RED" ) product5.save() print(f" Товар: {product5.name}") print(f" Артикул: {product5.sku}") print(f" Суффикс варианта: {product5.variant_suffix or 'нет'}") # Тест 6: Комплект print("\n8. Тест 6: Комплект (букет):") print("-" * 80) kit1 = ProductKit( name="Букет Романтика", slug="buket-romantika", category=category, pricing_method='fixed', fixed_price=1500 ) kit1.save() print(f" Комплект: {kit1.name}") print(f" Артикул: {kit1.sku}") # Тест 7: Еще один комплект print("\n9. Тест 7: Еще один комплект:") print("-" * 80) kit2 = ProductKit( name="Букет Весна", slug="buket-vesna", category=category, pricing_method='fixed', fixed_price=2000 ) kit2.save() print(f" Комплект: {kit2.name}") print(f" Артикул: {kit2.sku}") # Проверяем финальное состояние счетчиков print("\n10. Финальное состояние счетчиков:") print("-" * 80) for counter in SKUCounter.objects.all(): print(f" {counter.get_counter_type_display()}: {counter.current_value}") # Показываем все созданные товары print("\n11. Все созданные тестовые товары:") print("-" * 80) print(f" {'Название':<40} {'Артикул':<20} {'Суффикс':<10}") print(" " + "-" * 70) for p in Product.objects.filter(name__startswith=('Роза', 'Коробка', 'Лента')): print(f" {p.name:<40} {p.sku:<20} {p.variant_suffix or '-':<10}") print("\n12. Все созданные тестовые комплекты:") print("-" * 80) print(f" {'Название':<40} {'Артикул':<20}") print(" " + "-" * 60) for k in ProductKit.objects.filter(name__startswith='Букет'): print(f" {k.name:<40} {k.sku:<20}") print("\n" + "=" * 80) print("ТЕСТИРОВАНИЕ ЗАВЕРШЕНО!") print("=" * 80) # Предложение удалить тестовые данные print("\nВнимание: Тестовые данные НЕ удалены автоматически.") print("Чтобы удалить их, выполните:") print(" python manage.py shell") print(" from products.models import Product, ProductKit, ProductCategory") print(" Product.objects.filter(name__startswith=('Роза', 'Коробка', 'Лента')).delete()") print(" ProductKit.objects.filter(name__startswith='Букет').delete()") print(" ProductCategory.objects.filter(name='Розы').delete()") if __name__ == '__main__': test_sku_generation()