# management/commands/create_plans.py from decimal import Decimal from django.core.management.base import BaseCommand from plans.models import Plan, Quota, PlanQuota, Pricing, PlanPricing class Command(BaseCommand): help = "Create basic subscription plans structure" def add_arguments(self, parser): parser.add_argument( "--reset", action="store_true", help="Delete existing plans and quotas before creating new ones", ) def handle(self, *args, **options): # Plan.objects.all().delete() # Quota.objects.all().delete() # PlanQuota.objects.all().delete() # Pricing.objects.all().delete() # PlanPricing.objects.all().delete() # UserPlan.objects.all().delete() # Order.objects.all().delete() # BillingInfo.objects.all().delete() users_quota = Quota.objects.create( name="Users", codename="Users", unit="number" ) cars_quota = Quota.objects.create(name="Cars", codename="Cars", unit="number") # Create plans basic_plan = Plan.objects.create( name="Basic", description="basic plan", available=True, visible=True ) pro_plan = Plan.objects.create( name="Pro", description="Pro plan", available=True, visible=True ) enterprise_plan = Plan.objects.create( name="Enterprise", description="Enterprise plan", available=True, visible=True, ) # Assign quotas to plans PlanQuota.objects.create(plan=basic_plan, quota=users_quota, value=4) PlanQuota.objects.create(plan=basic_plan, quota=cars_quota, value=4) PlanQuota.objects.create(plan=pro_plan, quota=users_quota, value=5) PlanQuota.objects.create(plan=pro_plan, quota=cars_quota, value=5) PlanQuota.objects.create(plan=enterprise_plan, quota=users_quota, value=10) PlanQuota.objects.create(plan=enterprise_plan, quota=cars_quota, value=10) # PlanQuota.objects.create(plan=pro_plan, quota=project_quota, value=50) # PlanQuota.objects.create(plan=pro_plan, quota=storage_quota, value=100) # Define pricing basic_pricing = Pricing.objects.create(name="Monthly", period=30) pro_pricing = Pricing.objects.create(name="Monthly", period=30) enterprise_pricing = Pricing.objects.create(name="Monthly", period=30) PlanPricing.objects.create( plan=basic_plan, pricing=basic_pricing, price=Decimal("9.99") ) PlanPricing.objects.create( plan=pro_plan, pricing=pro_pricing, price=Decimal("19.99") ) PlanPricing.objects.create( plan=enterprise_plan, pricing=enterprise_pricing, price=Decimal("29.99") ) # # Create quotas # project_quota = Quota.objects.create(name='projects', codename='projects', unit='projects') # storage_quota = Quota.objects.create(name='storage', codename='storage', unit='GB') # # Create plans # basic_plan = Plan.objects.create(name='Basic', description='Basic plan', available=True, visible=True) # pro_plan = Plan.objects.create(name='Pro', description='Pro plan', available=True, visible=True) # # Assign quotas to plans # PlanQuota.objects.create(plan=basic_plan, quota=project_quota, value=5) # PlanQuota.objects.create(plan=basic_plan, quota=storage_quota, value=10) # PlanQuota.objects.create(plan=pro_plan, quota=project_quota, value=50) # PlanQuota.objects.create(plan=pro_plan, quota=storage_quota, value=100) # # Define pricing # basic = Pricing.objects.create(name='Monthly', period=30) # pro = Pricing.objects.create(name='Monthly', period=30) # basic_pricing = PlanPricing.objects.create(plan=basic_plan, pricing=basic, price=Decimal('19.99')) # pro_pricing = PlanPricing.objects.create(plan=pro_plan, pricing=pro, price=Decimal('29.99')) # Create users # user = User.objects.first() # # Create user plans # billing_info = BillingInfo.objects.create( # user=user, # tax_number='123456789', # name='John Doe', # street='123 Main St', # zipcode='12345', # city='Anytown', # country='US', # ) # order = Order.objects.create( # user=user, # plan=pro_plan, # pricing=pro_pricing, # amount=pro_pricing.price, # currency="SAR", # ) # UserPlan.objects.create( # user=user, # plan=pro_plan, # expire=timezone.now() + timedelta(days=2), # active=True, # )