From 5776278e9d275200aa10d40c8da6afdcf402fd8e Mon Sep 17 00:00:00 2001
From: George Hickman <george@ghickman.co.uk>
Date: Thu, 18 Jul 2019 16:06:35 +0100
Subject: [PATCH] List and link to Application forms for each Round on its
 IndexPage

---
 opentech/apply/funds/admin.py | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/opentech/apply/funds/admin.py b/opentech/apply/funds/admin.py
index f7b94f5f3..6df4d511f 100644
--- a/opentech/apply/funds/admin.py
+++ b/opentech/apply/funds/admin.py
@@ -1,3 +1,4 @@
+from django.urls import reverse
 from django.utils.safestring import mark_safe
 from wagtail.contrib.modeladmin.helpers import PermissionHelper
 from wagtail.contrib.modeladmin.options import ModelAdmin, ModelAdminGroup
@@ -26,14 +27,38 @@ class BaseRoundAdmin(ModelAdmin):
 class RoundAdmin(BaseRoundAdmin):
     model = Round
     menu_icon = 'repeat'
-    list_display = ('title', 'fund', 'start_date', 'end_date', 'sealed')
+    list_display = ('title', 'fund', 'start_date', 'end_date', 'sealed', 'applications')
 
+    def applications(self, obj):
+        def build_urls(applications):
+            for application in applications:
+                url = self.get_other_admin_edit_url(application.form)
+                yield f'<a href="{url}">{application}</a>'
+
+        urls = list(build_urls(obj.forms.all()))
+
+        if not urls:
+            return
+
+        return mark_safe('<br />'.join(urls))
 
     def fund(self, obj):
         url = self.url_helper.get_action_url('edit', obj.fund.id)
         url_tag = f'<a href="{url}">{obj.fund}</a>'
         return mark_safe(url_tag)
 
+    def get_other_admin_edit_url(self, obj):
+        """
+        Build an admin URL for the given obj.
+
+        This builds a ModelAdmin URL for the given object, mirroring Wagtail's
+        ModelAdmin.url_helper.get_action_url but works for any ModelAdmin.
+        """
+        app_label = obj._meta.app_label
+        model_name = obj._meta.model_name
+        url_name = f'{app_label}_{model_name}_modeladmin_edit'
+        return reverse(url_name, args=[obj.id])
+
 
 class ScreeningStatusPermissionHelper(PermissionHelper):
     def user_can_edit_obj(self, user, obj):
-- 
GitLab