Files
guilan-ace-backend/apps/payments/admin.py
Amirhossein Khalili 88b793ed9f
Some checks failed
Backend CI/CD / test (push) Has been cancelled
Backend CI/CD / deploy (push) Has been cancelled
initial commit
2026-05-19 20:53:08 +03:30

84 lines
2.8 KiB
Python

from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from core.admin import SoftDeleteListFilter, BaseModelAdmin
from apps.payments.resources import DiscountResource, PaymentResource
from apps.payments.models import Payment, DiscountCode
@admin.register(DiscountCode)
class DiscountCodeAdmin(BaseModelAdmin, ImportExportModelAdmin):
resource_class = DiscountResource
list_display = (
'code', 'type', 'value', 'is_active', 'starts_at', 'ends_at',
'usage_limit_total', 'usage_limit_per_user', 'min_amount', 'is_deleted'
)
list_filter = (
'type', 'is_active', 'starts_at', 'ends_at', 'applicable_events',
SoftDeleteListFilter,
)
search_fields = ('code', )
readonly_fields = ('id', 'deleted_at', 'created_at', 'updated_at')
fieldsets = (
('Discount Code Details', {
'fields': ('code', 'type', 'value', 'applicable_events', 'is_active')
}),
('Limitations', {
'fields': ('starts_at', 'ends_at', 'usage_limit_total', 'usage_limit_per_user', 'min_amount')
}),
('Soft Delete', {
'fields': ('is_deleted', 'deleted_at'),
'classes': ('collapse',)
}),
)
readonly_fields = ('deleted_at', )
actions = BaseModelAdmin.actions + [
'deactivate_codes',
]
@admin.action(description="Deactivate selected discount codes")
def deactivate_codes(self, request, queryset):
queryset.update(is_active=False)
self.message_user(request, f"Deactivate {queryset.count()} discount codes.")
@admin.register(Payment)
class PaymentAdmin(BaseModelAdmin, ImportExportModelAdmin):
resource_class = PaymentResource
list_display = (
'id', 'user', 'event', 'base_amount', 'discount_code', 'discount_amount', 'amount',
'status', 'created_at', 'verified_at', 'is_deleted'
)
list_filter = (
'status', 'event',
SoftDeleteListFilter,
)
search_fields = (
'user__email', 'authority', 'ref_id', 'discount_code__code'
)
readonly_fields = (
'user', 'event', 'base_amount', 'discount_code', 'discount_code', 'discount_amount', 'amount', 'authority',
'status', 'ref_id', 'card_pan', 'card_hash', 'created_at', 'updated_at', 'deleted_at'
)
fieldsets = (
('Payment Details', {
'fields': ('user', 'event', 'status', 'created_at', 'updated_at')
}),
('Price Info', {
'fields': ('base_amount', 'discount_code', 'discount_amount', 'amount')
}),
('Others', {
'fields': ('authority', 'ref_id', 'card_pan', 'card_hash')
}),
('Soft Delete', {
'fields': ('is_deleted', 'deleted_at'),
'classes': ('collapse',)
}),
)