Template
Extract always-on public/portal/UTM plus optional email_sms, directmail, blog, payments, social, and social_ai so new client sites can be bootstrapped from this seed. Refs #1 Refs #2 Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
from django.contrib import admin
|
|
|
|
from email_sms.models import Campaign, Message, MessageTemplate, ProviderEvent
|
|
|
|
|
|
@admin.register(MessageTemplate)
|
|
class MessageTemplateAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "channel", "created_at")
|
|
list_filter = ("channel",)
|
|
|
|
|
|
class MessageInline(admin.TabularInline):
|
|
model = Message
|
|
extra = 0
|
|
readonly_fields = ("status", "provider", "provider_message_id", "sent_at")
|
|
|
|
|
|
@admin.register(Campaign)
|
|
class CampaignAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"name",
|
|
"channel",
|
|
"audience",
|
|
"status",
|
|
"scheduled_for",
|
|
"created_at",
|
|
)
|
|
list_filter = ("channel", "audience", "status")
|
|
inlines = [MessageInline]
|
|
|
|
|
|
@admin.register(Message)
|
|
class MessageAdmin(admin.ModelAdmin):
|
|
list_display = ("campaign", "contact", "channel", "status", "scheduled_for")
|
|
list_filter = ("channel", "status")
|
|
|
|
|
|
@admin.register(ProviderEvent)
|
|
class ProviderEventAdmin(admin.ModelAdmin):
|
|
list_display = ("provider", "event_type", "created_at")
|