from django.contrib import admin from finance.models import BackerEmail, Invoice, Payment, SubscriptionPlan, UserSubscription @admin.register(SubscriptionPlan) class SubscriptionPlanAdmin(admin.ModelAdmin): list_display = ( "slug", "name", "price_cents", "is_public", "is_selectable", "allows_image_generation", "allows_rag", "allows_all_future_features", "prompt_quota_per_window", "prompt_window_hours", "monthly_token_quota", "sort_order", ) list_filter = ("is_public", "is_selectable", "allows_image_generation", "allows_rag") search_fields = ("slug", "name", "stripe_price_id") readonly_fields = ("created", "last_modified") prepopulated_fields = {"slug": ("name",)} @admin.register(BackerEmail) class BackerEmailAdmin(admin.ModelAdmin): list_display = ("email", "note", "redeemed_at", "redeemed_user", "created") search_fields = ("email", "note", "redeemed_user__email") raw_id_fields = ("redeemed_user",) readonly_fields = ("created", "last_modified", "redeemed_at", "redeemed_user") @admin.register(UserSubscription) class UserSubscriptionAdmin(admin.ModelAdmin): list_display = ( "user", "plan", "status", "source", "stripe_subscription_id", "monthly_token_quota_override", "created", ) list_filter = ("status", "source", "plan") search_fields = ("user__email", "user__username", "stripe_subscription_id") raw_id_fields = ("user", "plan") readonly_fields = ("created", "last_modified") class PaymentInline(admin.TabularInline): model = Payment extra = 0 readonly_fields = ( "provider", "status", "amount", "currency", "stripe_payment_intent_id", "stripe_charge_id", "paid_at", "failure_message", "created", "last_modified", ) can_delete = False show_change_link = True @admin.register(Invoice) class InvoiceAdmin(admin.ModelAdmin): list_display = ( "id", "user", "company", "provider", "status", "amount_due", "amount_paid", "currency", "period_start", "period_end", "stripe_invoice_id", "stripe_checkout_session_id", "created", ) list_filter = ("provider", "status", "currency") search_fields = ( "user__email", "user__username", "company__name", "stripe_invoice_id", "stripe_checkout_session_id", "stripe_subscription_id", "stripe_customer_id", "description", ) readonly_fields = ("created", "last_modified") raw_id_fields = ("user", "company") inlines = [PaymentInline] date_hierarchy = "created" @admin.register(Payment) class PaymentAdmin(admin.ModelAdmin): list_display = ( "id", "user", "company", "invoice", "provider", "status", "amount", "currency", "stripe_payment_intent_id", "stripe_charge_id", "paid_at", "created", ) list_filter = ("provider", "status", "currency") search_fields = ( "user__email", "user__username", "company__name", "stripe_payment_intent_id", "stripe_charge_id", "invoice__stripe_invoice_id", ) readonly_fields = ("created", "last_modified") raw_id_fields = ("user", "company", "invoice") date_hierarchy = "created"