Source code for django_program.sponsors.admin

"""Django admin configuration for the sponsors app."""

from django.contrib import admin
from django.http import HttpRequest  # noqa: TC002

from django_program.sponsors.models import (
    BulkPurchase,
    BulkPurchaseVoucher,
    Sponsor,
    SponsorBenefit,
    SponsorLevel,
    SponsorOverride,
)


[docs] class SponsorBenefitInline(admin.TabularInline): """Inline editor for sponsor benefits within the sponsor admin.""" model = SponsorBenefit extra = 1 fields = ("name", "description", "is_complete", "notes")
[docs] class BulkPurchaseVoucherInline(admin.TabularInline): """Read-only inline for vouchers generated by a bulk purchase.""" model = BulkPurchaseVoucher extra = 0 fields = ("voucher", "created_at") readonly_fields = ("voucher", "created_at") can_delete = False
[docs] def has_add_permission(self, request: HttpRequest, obj: object = None) -> bool: # noqa: ARG002 """Prevent manual addition of voucher links.""" return False
[docs] @admin.register(SponsorLevel) class SponsorLevelAdmin(admin.ModelAdmin): """Admin interface for managing sponsor levels.""" list_display = ("name", "conference", "cost", "comp_ticket_count", "order") list_filter = ("conference",) search_fields = ("name", "slug")
[docs] @admin.register(Sponsor) class SponsorAdmin(admin.ModelAdmin): """Admin interface for managing sponsors with inline benefits.""" list_display = ("name", "conference", "level", "is_active") list_filter = ("conference", "level", "is_active") search_fields = ("name", "slug", "contact_name", "contact_email") inlines = (SponsorBenefitInline,)
[docs] @admin.register(SponsorOverride) class SponsorOverrideAdmin(admin.ModelAdmin): """Admin interface for managing sponsor overrides.""" list_display = ("sponsor", "conference", "override_name", "override_is_active", "updated_at") list_filter = ("conference",) search_fields = ("sponsor__name", "override_name", "note") raw_id_fields = ("sponsor", "override_level", "created_by") readonly_fields = ("created_at", "updated_at")
[docs] @admin.register(BulkPurchase) class BulkPurchaseAdmin(admin.ModelAdmin): """Admin interface for managing sponsor bulk voucher purchases.""" list_display = ("__str__", "conference", "sponsor", "quantity", "payment_status", "total_amount", "created_at") list_filter = ("conference", "payment_status") search_fields = ("sponsor__name", "product_description", "stripe_payment_intent_id") raw_id_fields = ("sponsor", "ticket_type", "requested_by", "approved_by") readonly_fields = ("created_at", "updated_at") inlines = (BulkPurchaseVoucherInline,)
[docs] @admin.register(BulkPurchaseVoucher) class BulkPurchaseVoucherAdmin(admin.ModelAdmin): """Admin interface for viewing bulk purchase voucher links.""" list_display = ("bulk_purchase", "voucher", "created_at") list_filter = ("bulk_purchase__conference",) search_fields = ("voucher__code", "bulk_purchase__sponsor__name") raw_id_fields = ("bulk_purchase", "voucher") readonly_fields = ("created_at",)