Skip to content

Commit 18e1f6f

Browse files
committed
feat: auto add semester long rebates download action
1 parent daa24b3 commit 18e1f6f

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ venv
88
media
99
staticfiles
1010
ssl-certs
11+
.qodo

home/admin.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from datetime import timedelta
99

1010
from django.contrib import admin
11+
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
1112
from django.http import HttpRequest, HttpResponse
1213
from import_export.admin import ImportExportMixin, ImportExportModelAdmin
1314

@@ -386,9 +387,6 @@ class about_Admin(ImportExportModelAdmin, admin.ModelAdmin):
386387
"disapprove",
387388
"approve",
388389
"send_mail",
389-
"clean",
390-
"get_rebate_days_per_caterer",
391-
"get_spring_2025_days_per_caterer",
392390
]
393391

394392
@admin.action(description="Disapprove the students")
@@ -429,21 +427,35 @@ def send_mail(self, request, queryset):
429427
for obj in queryset:
430428
long_rebate_query_mail(obj.start_date, obj.end_date, obj.email.email)
431429

432-
@admin.action(description="Get total rebate days per caterer for Autumn 2024")
433-
def get_rebate_days_per_caterer(self, request, queryset: list[LongRebate]):
434-
longRebates = []
435-
for obj in queryset:
436-
if obj.approved:
437-
longRebates.append(obj)
438-
return map_periods_to_long_rebate(longRebates, request.user)
430+
# Ref: https://stackoverflow.com/questions/4500924/django-admin-action-without-selecting-objects
431+
def changelist_view(self, request, extra_context=None):
432+
if "action" in request.POST and str.startswith(
433+
request.POST["action"], "get_rebate_days_per_caterer_"
434+
):
435+
if not request.POST.getlist(ACTION_CHECKBOX_NAME):
436+
post = request.POST.copy()
437+
for u in LongRebate.objects.all():
438+
post.update({ACTION_CHECKBOX_NAME: str(u.id)})
439+
request._set_post(post)
440+
return super().changelist_view(request, extra_context)
441+
442+
def set_semester_action(semester):
443+
@admin.action(description=f"Get total rebate days per caterer for {semester}")
444+
def set_semester(modeladmin, request, queryset: list[LongRebate]):
445+
longRebates = []
446+
for obj in queryset:
447+
if obj.approved:
448+
longRebates.append(obj)
449+
return map_periods_to_long_rebate(longRebates, request.user, semester)
450+
451+
set_semester.__name__ = f"get_rebate_days_per_caterer_{semester}"
452+
return set_semester
439453

440-
@admin.action(description="Get total rebate days per caterer for Spring 2025")
441-
def get_spring_2025_days_per_caterer(self, request, queryset: list[LongRebate]):
442-
longRebates = []
443-
for obj in queryset:
444-
if obj.approved:
445-
longRebates.append(obj)
446-
return map_periods_to_long_rebate(longRebates, request.user, "Spring 2025")
454+
try:
455+
for semester in Semester.objects.all():
456+
actions.append(set_semester_action(semester.name))
457+
except Exception as e:
458+
print("Semester table not available", e)
447459

448460

449461
@admin.register(Rebate)

0 commit comments

Comments
 (0)