|
8 | 8 | from datetime import timedelta |
9 | 9 |
|
10 | 10 | from django.contrib import admin |
| 11 | +from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME |
11 | 12 | from django.http import HttpRequest, HttpResponse |
12 | 13 | from import_export.admin import ImportExportMixin, ImportExportModelAdmin |
13 | 14 |
|
@@ -386,9 +387,6 @@ class about_Admin(ImportExportModelAdmin, admin.ModelAdmin): |
386 | 387 | "disapprove", |
387 | 388 | "approve", |
388 | 389 | "send_mail", |
389 | | - "clean", |
390 | | - "get_rebate_days_per_caterer", |
391 | | - "get_spring_2025_days_per_caterer", |
392 | 390 | ] |
393 | 391 |
|
394 | 392 | @admin.action(description="Disapprove the students") |
@@ -429,21 +427,35 @@ def send_mail(self, request, queryset): |
429 | 427 | for obj in queryset: |
430 | 428 | long_rebate_query_mail(obj.start_date, obj.end_date, obj.email.email) |
431 | 429 |
|
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 |
439 | 453 |
|
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) |
447 | 459 |
|
448 | 460 |
|
449 | 461 | @admin.register(Rebate) |
|
0 commit comments