""" Команда для создания разнообразных тарифных планов с разными наборами функций. """ from django.core.management.base import BaseCommand from django.utils import timezone from apps.subscriptions.models import SubscriptionPlan, BulkDiscount from decimal import Decimal class Command(BaseCommand): help = 'Создает разнообразные тарифные планы с разными наборами функций' def handle(self, *args, **options): self.stdout.write('Создание разнообразных тарифных планов...') # Список всех возможных функций для отображения all_features = { 'video_calls': 'Видеозвонки', 'screen_sharing': 'Демонстрация экрана', 'whiteboard': 'Интерактивная доска', 'homework': 'Домашние задания', 'materials': 'Материалы', 'analytics': 'Аналитика', 'telegram_bot': 'Telegram бот', 'api_access': 'API доступ', } # 1. СТАРТОВЫЙ - минимальные функции (только базовые) plan_start, created = SubscriptionPlan.objects.update_or_create( slug='start', defaults={ 'name': 'Стартовый', 'description': 'Идеально для начинающих репетиторов. Базовые функции для проведения занятий.', 'price': Decimal('500'), 'price_per_student': None, 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'monthly', 'trial_days': 7, 'max_clients': 5, 'max_lessons_per_month': 20, 'max_storage_mb': 1024, # 1 GB 'max_video_minutes_per_month': 300, 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': False, # НЕТ 'allow_homework': False, # НЕТ 'allow_materials': True, 'allow_analytics': False, # НЕТ 'allow_telegram_bot': False, # НЕТ 'allow_api_access': False, # НЕТ 'is_active': True, 'is_featured': False, 'sort_order': 1, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_start.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_start.name}')) # 2. БАЗОВЫЙ - основные функции plan_basic, created = SubscriptionPlan.objects.update_or_create( slug='basic', defaults={ 'name': 'Базовый', 'description': 'Популярный тариф для большинства репетиторов. Все необходимые функции для эффективной работы.', 'price': Decimal('1500'), 'price_per_student': None, 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'monthly', 'trial_days': 14, 'max_clients': 15, 'max_lessons_per_month': 50, 'max_storage_mb': 5120, # 5 GB 'max_video_minutes_per_month': 1000, 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': True, 'allow_homework': True, 'allow_materials': True, 'allow_analytics': True, 'allow_telegram_bot': False, # НЕТ 'allow_api_access': False, # НЕТ 'is_active': True, 'is_featured': True, 'sort_order': 2, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_basic.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_basic.name}')) # 3. ПРОФЕССИОНАЛЬНЫЙ - большинство функций plan_pro, created = SubscriptionPlan.objects.update_or_create( slug='professional', defaults={ 'name': 'Профессиональный', 'description': 'Для опытных репетиторов и небольших школ. Расширенные возможности и автоматизация.', 'price': Decimal('3500'), 'price_per_student': None, 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'monthly', 'trial_days': 14, 'max_clients': 50, 'max_lessons_per_month': None, # Безлимит 'max_storage_mb': 20480, # 20 GB 'max_video_minutes_per_month': None, # Безлимит 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': True, 'allow_homework': True, 'allow_materials': True, 'allow_analytics': True, 'allow_telegram_bot': True, 'allow_api_access': False, # НЕТ 'is_active': True, 'is_featured': True, 'sort_order': 3, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_pro.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_pro.name}')) # 4. БИЗНЕС - все функции plan_business, created = SubscriptionPlan.objects.update_or_create( slug='business', defaults={ 'name': 'Бизнес', 'description': 'Для образовательных центров и крупных школ. Все функции без ограничений.', 'price': Decimal('7000'), 'price_per_student': None, 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'monthly', 'trial_days': 30, 'max_clients': None, # Безлимит 'max_lessons_per_month': None, # Безлимит 'max_storage_mb': 51200, # 50 GB 'max_video_minutes_per_month': None, # Безлимит 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': True, 'allow_homework': True, 'allow_materials': True, 'allow_analytics': True, 'allow_telegram_bot': True, 'allow_api_access': True, # ЕСТЬ 'is_active': True, 'is_featured': True, 'sort_order': 4, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_business.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_business.name}')) # 5. ЗА УЧЕНИКА (БАЗОВЫЙ) - основные функции plan_per_student_basic, created = SubscriptionPlan.objects.update_or_create( slug='per-student-basic-new', defaults={ 'name': 'За ученика (Базовый) - Новый', 'description': 'Гибкая оплата за каждого ученика. Базовые функции для работы с учениками.', 'price': Decimal('0'), 'price_per_student': Decimal('100'), 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'per_student', 'trial_days': 7, 'max_clients': None, 'max_lessons_per_month': None, 'max_storage_mb': 5120, # 5 GB 'max_video_minutes_per_month': None, 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': True, 'allow_homework': True, 'allow_materials': True, 'allow_analytics': True, 'allow_telegram_bot': False, # НЕТ 'allow_api_access': False, # НЕТ 'is_active': True, 'is_featured': True, 'sort_order': 5, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_per_student_basic.name}')) # Прогрессирующие скидки BulkDiscount.objects.get_or_create( plan=plan_per_student_basic, min_students=1, max_students=4, defaults={'price_per_student': Decimal('100')} ) BulkDiscount.objects.get_or_create( plan=plan_per_student_basic, min_students=5, max_students=9, defaults={'price_per_student': Decimal('84')} ) BulkDiscount.objects.get_or_create( plan=plan_per_student_basic, min_students=10, max_students=None, defaults={'price_per_student': Decimal('80')} ) self.stdout.write(self.style.SUCCESS(' ✓ Созданы прогрессирующие скидки')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_per_student_basic.name}')) # 6. ЗА УЧЕНИКА (ПРЕМИУМ) - все функции plan_per_student_premium, created = SubscriptionPlan.objects.update_or_create( slug='per-student-premium-new', defaults={ 'name': 'За ученика (Премиум) - Новый', 'description': 'Премиум тариф за ученика со всеми функциями. Идеально для профессиональных репетиторов.', 'price': Decimal('0'), 'price_per_student': Decimal('150'), 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'per_student', 'trial_days': 14, 'max_clients': None, 'max_lessons_per_month': None, 'max_storage_mb': 10240, # 10 GB 'max_video_minutes_per_month': None, 'allow_video_calls': True, 'allow_screen_sharing': True, 'allow_whiteboard': True, 'allow_homework': True, 'allow_materials': True, 'allow_analytics': True, 'allow_telegram_bot': True, 'allow_api_access': True, # ЕСТЬ 'is_active': True, 'is_featured': True, 'sort_order': 6, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_per_student_premium.name}')) # Прогрессирующие скидки BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=1, max_students=4, defaults={'price_per_student': Decimal('150')} ) BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=5, max_students=9, defaults={'price_per_student': Decimal('126')} ) BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=10, max_students=None, defaults={'price_per_student': Decimal('120')} ) self.stdout.write(self.style.SUCCESS(' ✓ Созданы прогрессирующие скидки')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_per_student_premium.name}')) self.stdout.write(self.style.SUCCESS('\n✓ Все тарифные планы созданы!')) self.stdout.write('\nСозданные тарифы:') self.stdout.write(' 1. Стартовый - 500 руб/мес (минимальные функции)') self.stdout.write(' 2. Базовый - 1500 руб/мес (основные функции)') self.stdout.write(' 3. Профессиональный - 3500 руб/мес (большинство функций)') self.stdout.write(' 4. Бизнес - 7000 руб/мес (все функции)') self.stdout.write(' 5. За ученика (Базовый) - 100 руб/ученик (основные функции)') self.stdout.write(' 6. За ученика (Премиум) - 150 руб/ученик (все функции)')