feat: Quota overage system, updated tier pricing, and communication addons

Quota Overage System:
- Add QuotaOverage model for tracking resource/user quota overages
- Implement 30-day grace period with email notifications (immediate, 7-day, 1-day)
- Add QuotaWarningBanner component in BusinessLayout
- Add QuotaSettings page for managing overages and archiving resources
- Add Celery tasks for automated quota checks and expiration handling
- Add quota management API endpoints

Updated Tier Pricing (Stripe: 2.9% + $0.30):
- Free: No payments (requires addon)
- Starter: 4% + $0.40
- Professional: 3.5% + $0.35
- Business: 3.25% + $0.32
- Enterprise: 3% + $0.30

New Subscription Addons:
- Online Payments ($5/mo + 5% + $0.50) - for Free tier
- SMS Notifications ($10/mo) - enables SMS reminders
- Masked Calling ($15/mo) - enables anonymous calling

BusinessEditModal Improvements:
- Increased width to match PlanModal (max-w-3xl)
- Added all tier options with auto-update on tier change
- Added limits configuration and permissions sections

Backend Fixes:
- Fixed SubscriptionPlan serializer to include all communication fields
- Allow blank business_tier for addon plans
- Added migration for business_tier field changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-02 13:05:02 -05:00
parent dc3210927a
commit 08b51d1a5f
36 changed files with 3469 additions and 350 deletions

View File

@@ -111,6 +111,16 @@ class SubscriptionPlanSerializer(serializers.ModelSerializer):
'price_monthly', 'price_yearly', 'business_tier',
'features', 'limits', 'permissions',
'transaction_fee_percent', 'transaction_fee_fixed',
# SMS & Communication Settings
'sms_enabled', 'sms_price_per_message_cents',
# Masked Calling Settings
'masked_calling_enabled', 'masked_calling_price_per_minute_cents',
# Proxy Number Settings
'proxy_number_enabled', 'proxy_number_monthly_fee_cents',
# Default Credit Settings
'default_auto_reload_enabled', 'default_auto_reload_threshold_cents',
'default_auto_reload_amount_cents',
# Status flags
'is_active', 'is_public', 'is_most_popular', 'show_price',
'created_at', 'updated_at'
]
@@ -129,6 +139,16 @@ class SubscriptionPlanCreateSerializer(serializers.ModelSerializer):
'price_monthly', 'price_yearly', 'business_tier',
'features', 'limits', 'permissions',
'transaction_fee_percent', 'transaction_fee_fixed',
# SMS & Communication Settings
'sms_enabled', 'sms_price_per_message_cents',
# Masked Calling Settings
'masked_calling_enabled', 'masked_calling_price_per_minute_cents',
# Proxy Number Settings
'proxy_number_enabled', 'proxy_number_monthly_fee_cents',
# Default Credit Settings
'default_auto_reload_enabled', 'default_auto_reload_threshold_cents',
'default_auto_reload_amount_cents',
# Status flags
'is_active', 'is_public', 'is_most_popular', 'show_price',
'create_stripe_product'
]