feat: add community contribution ranks
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from django.contrib import admin
|
||||
from import_export.admin import ImportExportModelAdmin
|
||||
from django.utils import timezone
|
||||
|
||||
from core.admin import BaseModelAdmin, SoftDeleteListFilter
|
||||
from core.templatetags.jalali import jdate
|
||||
from apps.events.models import Event, Registration
|
||||
from apps.events.resources import EventResource, RegistrationResource
|
||||
from apps.events.services import verify_registration_attendance
|
||||
|
||||
|
||||
@admin.register(Event)
|
||||
@@ -107,13 +109,17 @@ class RegistrationAdmin(BaseModelAdmin, ImportExportModelAdmin):
|
||||
readonly_fields = (
|
||||
'ticket_id', 'registered_at', 'confirmation_notification_sent_at',
|
||||
'cancellation_notification_sent_at', 'discount_code', 'discount_amount',
|
||||
'final_price', 'deleted_at',
|
||||
'final_price', 'deleted_at', 'attendance_verified_at',
|
||||
'attendance_verified_by', 'attendance_verification_source',
|
||||
)
|
||||
fieldsets = (
|
||||
('Registration Details', {'fields': (
|
||||
'user', 'event', 'status', 'registered_at', 'ticket_id',
|
||||
'confirmation_notification_sent_at', 'cancellation_notification_sent_at',
|
||||
)}),
|
||||
('Attendance verification', {'fields': (
|
||||
'attendance_verified_at', 'attendance_verified_by', 'attendance_verification_source',
|
||||
)}),
|
||||
('Pricing & Discount', {
|
||||
'fields': ('discount_code', 'discount_amount', 'final_price'),
|
||||
'classes': ('collapse',),
|
||||
@@ -144,8 +150,28 @@ class RegistrationAdmin(BaseModelAdmin, ImportExportModelAdmin):
|
||||
|
||||
@admin.action(description='Mark selected registrations as attended')
|
||||
def mark_attended(self, request, queryset):
|
||||
queryset.update(status=Registration.StatusChoices.ATTENDED)
|
||||
self.message_user(request, f'Marked {queryset.count()} registrations as attended.')
|
||||
count = 0
|
||||
for registration in queryset:
|
||||
verify_registration_attendance(
|
||||
registration,
|
||||
verifier=request.user,
|
||||
source=Registration.AttendanceVerificationSource.STAFF_ADMIN,
|
||||
)
|
||||
count += 1
|
||||
self.message_user(request, f'Marked {count} registrations as attended.')
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
previous_status = None
|
||||
if change and obj.pk:
|
||||
previous_status = Registration.all_objects.filter(pk=obj.pk).values_list("status", flat=True).first()
|
||||
if (
|
||||
obj.status == Registration.StatusChoices.ATTENDED
|
||||
and (previous_status != Registration.StatusChoices.ATTENDED or not obj.attendance_verified_at)
|
||||
):
|
||||
obj.attendance_verified_by = request.user
|
||||
obj.attendance_verified_at = timezone.now()
|
||||
obj.attendance_verification_source = Registration.AttendanceVerificationSource.STAFF_ADMIN
|
||||
super().save_model(request, obj, form, change)
|
||||
|
||||
@admin.action(description='Restore selected registrations')
|
||||
def restore_registrations(self, request, queryset):
|
||||
|
||||
Reference in New Issue
Block a user