125 lines
6.2 KiB
Python
125 lines
6.2 KiB
Python
"""
|
||
Команда для создания упрощенных тарифных планов.
|
||
Все функции доступны для каждого тарифа.
|
||
"""
|
||
from django.core.management.base import BaseCommand
|
||
from apps.subscriptions.models import SubscriptionPlan, BulkDiscount
|
||
from decimal import Decimal
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = 'Создает упрощенные тарифные планы: за ученика и ежемесячная подписка'
|
||
|
||
def handle(self, *args, **options):
|
||
self.stdout.write('Создание упрощенных тарифных планов...')
|
||
|
||
# Деактивируем все существующие тарифы
|
||
SubscriptionPlan.objects.all().update(is_active=False)
|
||
self.stdout.write('Деактивированы все существующие тарифы')
|
||
|
||
# 1. ТАРИФ "ЗА УЧЕНИКА" - все функции доступны
|
||
plan_per_student, created = SubscriptionPlan.objects.update_or_create(
|
||
slug='per-student',
|
||
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': 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': 1,
|
||
}
|
||
)
|
||
|
||
if created:
|
||
self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_per_student.name}'))
|
||
else:
|
||
self.stdout.write(self.style.WARNING(f'⚠ Обновлен план: {plan_per_student.name}'))
|
||
|
||
# Создаем прогрессирующие скидки для "За ученика"
|
||
# 1-4 ученика: 100 руб за каждого (базовая цена)
|
||
BulkDiscount.objects.update_or_create(
|
||
plan=plan_per_student,
|
||
min_students=1,
|
||
max_students=4,
|
||
defaults={'price_per_student': Decimal('100')}
|
||
)
|
||
|
||
# 5-9 учеников: 84 руб за каждого (скидка 16%)
|
||
BulkDiscount.objects.update_or_create(
|
||
plan=plan_per_student,
|
||
min_students=5,
|
||
max_students=9,
|
||
defaults={'price_per_student': Decimal('84')}
|
||
)
|
||
|
||
# 10+ учеников: 80 руб за каждого (скидка 20%)
|
||
BulkDiscount.objects.update_or_create(
|
||
plan=plan_per_student,
|
||
min_students=10,
|
||
max_students=None,
|
||
defaults={'price_per_student': Decimal('80')}
|
||
)
|
||
|
||
self.stdout.write(self.style.SUCCESS(' ✓ Созданы прогрессирующие скидки'))
|
||
|
||
# 2. ЕЖЕМЕСЯЧНАЯ ПОДПИСКА - все функции доступны, без ограничений по ученикам
|
||
plan_monthly, created = SubscriptionPlan.objects.update_or_create(
|
||
slug='monthly-unlimited',
|
||
defaults={
|
||
'name': 'Ежемесячная подписка',
|
||
'description': 'Ежемесячная подписка без ограничений по количеству учеников. Все функции доступны.',
|
||
'price': Decimal('1500'),
|
||
'price_per_student': None,
|
||
'currency': 'RUB',
|
||
'billing_period': 'monthly',
|
||
'subscription_type': 'monthly',
|
||
'trial_days': 7,
|
||
'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': 2,
|
||
}
|
||
)
|
||
|
||
if created:
|
||
self.stdout.write(self.style.SUCCESS(f'✓ Создан план: {plan_monthly.name}'))
|
||
else:
|
||
self.stdout.write(self.style.WARNING(f'⚠ Обновлен план: {plan_monthly.name}'))
|
||
|
||
self.stdout.write(self.style.SUCCESS('\n✓ Все тарифные планы созданы!'))
|
||
self.stdout.write('\nСозданные тарифы:')
|
||
self.stdout.write(' 1. За ученика - 100 руб/ученик (с прогрессирующими скидками)')
|
||
self.stdout.write(' 2. Ежемесячная подписка - 1500 руб/мес (без ограничений)')
|
||
self.stdout.write('\nВсе функции доступны для каждого тарифа!')
|
||
|