Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ venv
media
staticfiles
ssl-certs
.qodo
46 changes: 29 additions & 17 deletions home/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from datetime import timedelta

from django.contrib import admin
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
from django.http import HttpRequest, HttpResponse
from import_export.admin import ImportExportMixin, ImportExportModelAdmin

Expand Down Expand Up @@ -386,9 +387,6 @@ class about_Admin(ImportExportModelAdmin, admin.ModelAdmin):
"disapprove",
"approve",
"send_mail",
"clean",
"get_rebate_days_per_caterer",
"get_spring_2025_days_per_caterer",
]

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

@admin.action(description="Get total rebate days per caterer for Autumn 2024")
def get_rebate_days_per_caterer(self, request, queryset: list[LongRebate]):
longRebates = []
for obj in queryset:
if obj.approved:
longRebates.append(obj)
return map_periods_to_long_rebate(longRebates, request.user)
# Ref: https://stackoverflow.com/questions/4500924/django-admin-action-without-selecting-objects
def changelist_view(self, request, extra_context=None):
if "action" in request.POST and str.startswith(
request.POST["action"], "get_rebate_days_per_caterer_"
):
if not request.POST.getlist(ACTION_CHECKBOX_NAME):
post = request.POST.copy()
for u in LongRebate.objects.all():
post.update({ACTION_CHECKBOX_NAME: str(u.id)})
request._set_post(post)
return super().changelist_view(request, extra_context)

def set_semester_action(semester):
@admin.action(description=f"Get total rebate days per caterer for {semester}")
def set_semester(modeladmin, request, queryset: list[LongRebate]):
longRebates = []
for obj in queryset:
if obj.approved:
longRebates.append(obj)
return map_periods_to_long_rebate(longRebates, request.user, semester)

set_semester.__name__ = f"get_rebate_days_per_caterer_{semester}"
return set_semester

@admin.action(description="Get total rebate days per caterer for Spring 2025")
def get_spring_2025_days_per_caterer(self, request, queryset: list[LongRebate]):
longRebates = []
for obj in queryset:
if obj.approved:
longRebates.append(obj)
return map_periods_to_long_rebate(longRebates, request.user, "Spring 2025")
try:
for semester in Semester.objects.all():
actions.append(set_semester_action(semester.name))
except Exception as e:
print("Semester table not available", e)


@admin.register(Rebate)
Expand Down