diff --git a/opentech/apply/funds/admin.py b/opentech/apply/funds/admin.py index 3eef4a8b77776dafdf902b697ddcdc718fb0dce8..b90fa2196dba232a8e70cafa667db5432759d73c 100644 --- a/opentech/apply/funds/admin.py +++ b/opentech/apply/funds/admin.py @@ -12,7 +12,9 @@ from opentech.apply.categories.admin import CategoryAdmin, MetaTermAdmin from .admin_helpers import ( ButtonsWithPreview, FormsFundRoundListFilter, + RoundStateListFilter, RoundFundChooserView, + RoundAdminURLHelper, ApplicationFormButtonHelper, ) from .admin_views import CopyApplicationFormViewClass @@ -32,6 +34,8 @@ class RoundAdmin(BaseRoundAdmin): model = Round menu_icon = 'repeat' list_display = ('title', 'fund', 'start_date', 'end_date', 'applications', 'review_forms') + list_filter = (RoundStateListFilter,) + url_helper_class = RoundAdminURLHelper def applications(self, obj): diff --git a/opentech/apply/funds/admin_helpers.py b/opentech/apply/funds/admin_helpers.py index 79d4b8f313a43f1cd6aec1fc3cd0043a5383fa64..5687b6fb005999bfcf8f0bab6970cf0b82e1f75d 100644 --- a/opentech/apply/funds/admin_helpers.py +++ b/opentech/apply/funds/admin_helpers.py @@ -1,10 +1,13 @@ +from urllib.parse import urlencode + from django import forms from django.contrib import admin from django.urls import reverse +from django.utils.functional import cached_property from django.utils.translation import ugettext as _ from wagtail.contrib.modeladmin.forms import ParentChooserForm -from wagtail.contrib.modeladmin.helpers import PageButtonHelper, ButtonHelper +from wagtail.contrib.modeladmin.helpers import PageAdminURLHelper, PageButtonHelper, ButtonHelper from wagtail.contrib.modeladmin.views import ChooseParentView from wagtail.core.models import Page @@ -71,6 +74,25 @@ class FormsFundRoundListFilter(admin.SimpleListFilter): return queryset +class RoundStateListFilter(admin.SimpleListFilter): + title = 'state' + parameter_name = 'form-state' + + def lookups(self, request, model_admin): + return ( + ('open', _('Open')), + ('closed', _('Closed')), + ) + + def queryset(self, request, queryset): + value = self.value() + if value == 'open': + return queryset.open() + elif value == 'closed': + return queryset.closed() + return queryset + + class ApplicationFormButtonHelper(ButtonHelper): def prepare_classnames(self, start=None, add=None, exclude=None): """Parse classname sets into final css classess list.""" @@ -103,3 +125,11 @@ class ApplicationFormButtonHelper(ButtonHelper): buttons.append(copy_form_button) return buttons + + +class RoundAdminURLHelper(PageAdminURLHelper): + @cached_property + def index_url(self): + # By default set open filter for Round listing page's index URL + params = {'form-state': 'open'} + return f"{self.get_action_url('index')}?{urlencode(params)}"