You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

58 lines
2.1 KiB

from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from django.utils.html import format_html
from unfold.admin import ModelAdmin, StackedInline
from unfold.decorators import display
from apps.transaction.models import TransactionParticipant, ParticipantInfo
from utils.admin import project_admin_site
class ParticipantInfoInline(StackedInline):
model = ParticipantInfo
extra = 1
fields = ['fullname', 'email', 'phone_number', 'gender', 'birthdate']
# readonly_fields = ['email', 'phone_number']
classes = ['collapse']
tab = True
show_change_link = True
@admin.register(TransactionParticipant)
class TransactionParticipantAdmin(ModelAdmin):
list_display = ('user', 'course', 'payment_status', 'price_display', 'created_at', 'updated_at')
list_filter = ('is_paid', 'course', 'created_at')
search_fields = ('user__email', 'course__title')
readonly_fields = [ 'created_at', 'updated_at']
inlines = [ParticipantInfoInline]
autocomplete_fields = ['user',]
show_change_link = True
ordering = ('-created_at',)
fieldsets = (
(None, {
'fields': ('user', 'course', 'is_paid', 'price')
}),
(_('Timestamps'), {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@display(description=_("Payment Status"), ordering="is_paid")
def payment_status(self, obj):
if obj.is_paid:
return format_html('<span class="unfold-badge unfold-badge--success">Paid</span>')
return format_html('<span class="unfold-badge unfold-badge--warning">Unpaid</span>')
@display(description=_("Price"), ordering="price")
def price_display(self, obj):
return format_html('<span class="unfold-badge unfold-badge--info">${}</span>', obj.price)
def get_queryset(self, request):
queryset = super().get_queryset(request)
# Add any custom queryset modifications here if needed
return queryset
project_admin_site.register(TransactionParticipant, TransactionParticipantAdmin)