feat: Email templates, bulk delete, communication credits, plan features

- Add email template presets for Browse Templates tab (12 templates)
- Add bulk selection and deletion for My Templates tab
- Add communication credits system with Twilio integration
- Add payment views for credit purchases and auto-reload
- Add SMS reminder and masked calling plan permissions
- Fix appointment status mapping (frontend/backend mismatch)
- Clear masquerade stack on login/logout for session hygiene
- Update platform settings with credit configuration
- Add new migrations for Twilio and Stripe payment fields

🤖 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 01:42:38 -05:00
parent 8038f67183
commit 05ebd0f2bb
77 changed files with 14185 additions and 1394 deletions

View File

@@ -3,12 +3,58 @@ Payments App URLs
"""
from django.urls import path
from .views import (
# Config status
PaymentConfigStatusView,
# API Keys (Free Tier)
ApiKeysView,
ApiKeysValidateView,
ApiKeysRevalidateView,
ApiKeysDeleteView,
# Connect (Paid Tiers)
ConnectStatusView,
ConnectOnboardView,
ConnectRefreshLinkView,
ConnectAccountSessionView,
ConnectRefreshStatusView,
# Transactions
TransactionListView,
TransactionSummaryView,
StripeChargesView,
StripePayoutsView,
StripeBalanceView,
TransactionExportView,
# Payment operations
CreatePaymentIntentView,
TerminalConnectionTokenView,
RefundPaymentView,
)
urlpatterns = [
# Payment configuration status
path('config/status/', PaymentConfigStatusView.as_view(), name='payment-config-status'),
# API Keys endpoints (free tier)
path('api-keys/', ApiKeysView.as_view(), name='api-keys'),
path('api-keys/validate/', ApiKeysValidateView.as_view(), name='api-keys-validate'),
path('api-keys/revalidate/', ApiKeysRevalidateView.as_view(), name='api-keys-revalidate'),
path('api-keys/delete/', ApiKeysDeleteView.as_view(), name='api-keys-delete'),
# Connect endpoints (paid tiers)
path('connect/status/', ConnectStatusView.as_view(), name='connect-status'),
path('connect/onboard/', ConnectOnboardView.as_view(), name='connect-onboard'),
path('connect/refresh-link/', ConnectRefreshLinkView.as_view(), name='connect-refresh-link'),
path('connect/account-session/', ConnectAccountSessionView.as_view(), name='connect-account-session'),
path('connect/refresh-status/', ConnectRefreshStatusView.as_view(), name='connect-refresh-status'),
# Transaction endpoints
path('transactions/', TransactionListView.as_view(), name='transaction-list'),
path('transactions/summary/', TransactionSummaryView.as_view(), name='transaction-summary'),
path('transactions/charges/', StripeChargesView.as_view(), name='stripe-charges'),
path('transactions/payouts/', StripePayoutsView.as_view(), name='stripe-payouts'),
path('transactions/balance/', StripeBalanceView.as_view(), name='stripe-balance'),
path('transactions/export/', TransactionExportView.as_view(), name='transaction-export'),
# Payment operations (existing)
path('payment-intents/', CreatePaymentIntentView.as_view(), name='create-payment-intent'),
path('terminal/connection-token/', TerminalConnectionTokenView.as_view(), name='terminal-connection-token'),
path('refunds/', RefundPaymentView.as_view(), name='create-refund'),