""" Команда для создания примерных тарифных планов. """ 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('Создание примерных тарифных планов...') # 1. Подписка "За ученика" (базовая) plan_per_student, created = SubscriptionPlan.objects.get_or_create( slug='per-student-basic', 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': True, 'allow_api_access': False, 'is_active': True, 'is_featured': True, 'sort_order': 1, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_per_student.name}')) # Создаем прогрессирующие скидки для "За ученика" # 1-4 ученика: 100 руб за каждого (базовая цена) BulkDiscount.objects.get_or_create( plan=plan_per_student, min_students=1, max_students=4, defaults={ 'total_price': Decimal('100'), # За 1 ученика (100 руб) } ) # 5-9 учеников: 84 руб за каждого (скидка 16%) # total_price = 84 * 5 = 420 руб за 5 учеников BulkDiscount.objects.get_or_create( plan=plan_per_student, min_students=5, max_students=9, defaults={ 'total_price': Decimal('420'), # За 5 учеников (84 руб за каждого) } ) # 10+ учеников: 85 руб за каждого (скидка 15%) # total_price = 85 * 10 = 850 руб за 10 учеников BulkDiscount.objects.get_or_create( plan=plan_per_student, min_students=10, max_students=None, # Без ограничений defaults={ 'total_price': Decimal('850'), # За 10 учеников (85 руб за каждого) } ) self.stdout.write(self.style.SUCCESS(' ✓ Созданы прогрессирующие скидки')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_per_student.name}')) # 2. Подписка "За ученика" (премиум) plan_per_student_premium, created = SubscriptionPlan.objects.get_or_create( slug='per-student-premium', 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': 2, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_per_student_premium.name}')) # Прогрессирующие скидки для премиум # 1-4: 150 руб за каждого (базовая цена) BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=1, max_students=4, defaults={'total_price': Decimal('150')} # За 1 ученика ) # 5-9: 126 руб за каждого (скидка 16%) # total_price = 126 * 5 = 630 руб за 5 учеников BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=5, max_students=9, defaults={'total_price': Decimal('630')} # За 5 учеников ) # 10+: 127.5 руб за каждого (скидка 15%) # total_price = 127.5 * 10 = 1275 руб за 10 учеников BulkDiscount.objects.get_or_create( plan=plan_per_student_premium, min_students=10, max_students=None, defaults={'total_price': Decimal('1275')} # За 10 учеников ) self.stdout.write(self.style.SUCCESS(' ✓ Созданы прогрессирующие скидки')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_per_student_premium.name}')) # 3. Ежемесячная подписка (Базовый) plan_monthly_basic, created = SubscriptionPlan.objects.get_or_create( slug='monthly-basic', defaults={ 'name': 'Ежемесячная (Базовый)', 'description': 'Ежемесячная подписка с фиксированной ценой. До 20 учеников включено.', 'price': Decimal('1000'), 'price_per_student': None, 'currency': 'RUB', 'billing_period': 'monthly', 'subscription_type': 'monthly', 'trial_days': 7, 'max_clients': 20, 'max_lessons_per_month': 100, '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': True, 'allow_api_access': False, 'is_active': True, 'is_featured': False, 'sort_order': 3, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_monthly_basic.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_monthly_basic.name}')) # 4. Ежемесячная подписка (Профессиональный) plan_monthly_pro, created = SubscriptionPlan.objects.get_or_create( slug='monthly-professional', defaults={ 'name': 'Ежемесячная (Профессиональный)', 'description': 'Профессиональная ежемесячная подписка. До 50 учеников, безлимитные занятия и материалы.', 'price': Decimal('2500'), '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': True, 'is_active': True, 'is_featured': True, 'sort_order': 4, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_monthly_pro.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_monthly_pro.name}')) # 5. Ежемесячная подписка (Бизнес) plan_monthly_business, created = SubscriptionPlan.objects.get_or_create( slug='monthly-business', defaults={ 'name': 'Ежемесячная (Бизнес)', 'description': 'Бизнес подписка для крупных образовательных центров. Безлимит учеников и все функции.', 'price': Decimal('5000'), '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': 5, } ) if created: self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_monthly_business.name}')) else: self.stdout.write(self.style.WARNING(f'⚠ План уже существует: {plan_monthly_business.name}')) self.stdout.write(self.style.SUCCESS('\n✓ Все тарифные планы созданы!')) self.stdout.write('\nДоступные планы:') self.stdout.write(' 1. За ученика (Базовый) - 100 руб/ученик (с прогрессирующими скидками)') self.stdout.write(' 2. За ученика (Премиум) - 150 руб/ученик (с прогрессирующими скидками)') self.stdout.write(' 3. Ежемесячная (Базовый) - 1000 руб/мес (до 20 учеников)') self.stdout.write(' 4. Ежемесячная (Профессиональный) - 2500 руб/мес (до 50 учеников)') self.stdout.write(' 5. Ежемесячная (Бизнес) - 5000 руб/мес (безлимит)')