diff --git a/busManager/coord/admin.py b/busManager/coord/admin.py index d04ca38..ab287f8 100644 --- a/busManager/coord/admin.py +++ b/busManager/coord/admin.py @@ -1,13 +1,14 @@ import csv from datetime import date -from django.contrib.admin import DateFieldListFilter +from django.contrib.admin import DateFieldListFilter, BooleanFieldListFilter from django.forms import widgets from django.contrib import admin from django.http import HttpResponse from django.urls import reverse from django.utils.html import format_html from django.utils.http import urlencode +from django.utils.translation import gettext_lazy from import_export.admin import ImportExportModelAdmin from .adminClone import CloneModelAdmin @@ -53,6 +54,25 @@ class TravellerRollMixin: return response +class ArchiveFilter(BooleanFieldListFilter): + title = gettext_lazy('Previous Years') + parameter_name = 'is_archived' + + def choices(self, changelist): + field_choices = dict(self.field.flatchoices) + for lookup, title in ( + (None, gettext_lazy("All")), + ("0", field_choices.get(True, gettext_lazy("Current"))), + ("1", field_choices.get(False, gettext_lazy("Archived"))), + ): + yield { + "selected": self.lookup_val == lookup and not self.lookup_val2, + "query_string": changelist.get_query_string( + {self.lookup_kwarg: lookup}, [self.lookup_kwarg2] + ), + "display": title, + } + class HiddenNowTime(widgets.TimeInput): pass @@ -134,7 +154,7 @@ class TravellerRouteInline(admin.TabularInline): @admin.register(Traveller) class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin): list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "travel_start_date", "travel_end_date"] - list_filter = ["school", "eligibility_status", "bus_stops__bus", "residential_suburb", ("travel_end_date", DateFieldListFilter), "is_archived"] + list_filter = ["school", "eligibility_status", "bus_stops__bus", "residential_suburb", ("travel_end_date", DateFieldListFilter), ("is_archived", ArchiveFilter)] search_fields = ["first_name", "last_name", "residential_address"] cloneable_fields = ["last_name", "residential_address", "residential_suburb", "postal_address", "postal_suburb", "eligibility_status", "shuttle", diff --git a/busManager/coord/models.py b/busManager/coord/models.py index e0188a3..de55a54 100644 --- a/busManager/coord/models.py +++ b/busManager/coord/models.py @@ -227,7 +227,7 @@ class Traveller(models.Model): created_on = models.DateTimeField(auto_now_add=True, blank=True, null=True) last_edit = models.DateTimeField(auto_now=True, blank=True, null=True) - is_archived = models.BooleanField(default=False) + is_archived = models.BooleanField(default=False, verbose_name="Archived") notes = models.TextField(blank=True, verbose_name='Admin Notes') shuttle = models.ForeignKey(Shuttle, on_delete=models.SET_NULL, blank=True, null=True) @@ -238,6 +238,8 @@ class Traveller(models.Model): return f"{self.first_name} {self.last_name}" def is_active(self): + if self.is_archived: + return False if not self.travel_end_date: return True return datetime(self.travel_end_date.year, self.travel_end_date.month, self.travel_end_date.day) < datetime.today()