uchill/backend/apps/subscriptions/management/commands/create_simple_subscriptions.py

125 lines
6.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Команда для создания упрощенных тарифных планов.
Все функции доступны для каждого тарифа.
"""
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Все функции доступны для каждого тарифа!')