From 4907959b4cce874f568fce85b85815d6838b21e7 Mon Sep 17 00:00:00 2001
From: Frank Duncan <frank@consxy.com>
Date: Fri, 19 May 2023 03:09:15 -0500
Subject: [PATCH] Add search by application number (#3294)

Fixes #3289

What's on the tin.  A few notes:

* I preserved the git history from our repository, but can easily squash
them all if you'd prefer such a small change be in one commit
* I'm not sure where in the documentation to document this feature

---------

Co-authored-by: Chris Zubak-Skees <chriszs@gmail.com>
Co-authored-by: Chris Zubak-Skees <chriszs@opentechstrategies.com>
Co-authored-by: Ghulam Murtaza <gmurtaza@opentechstrategies.com>
Co-authored-by: Frank Duncan <frank@kank.net>
---
 hypha/apply/funds/tables.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/hypha/apply/funds/tables.py b/hypha/apply/funds/tables.py
index 90c88a2ea..b5b8fc084 100644
--- a/hypha/apply/funds/tables.py
+++ b/hypha/apply/funds/tables.py
@@ -1,4 +1,5 @@
 import json
+import re
 import textwrap
 
 import django_filters as filters
@@ -365,9 +366,15 @@ class SubmissionFilter(filters.FilterSet):
 
 
 class SubmissionFilterAndSearch(SubmissionFilter):
-    query = filters.CharFilter(field_name='search_data', lookup_expr="icontains", widget=forms.HiddenInput)
+    query = filters.CharFilter(method='search_data_and_id', widget=forms.HiddenInput)
     archived = filters.BooleanFilter(field_name='is_archive', widget=forms.HiddenInput, method='filter_archived')
 
+    def search_data_and_id(self, queryset, name, value):
+        possible_id = re.search("^#(\\d+)$", value.strip())
+        if possible_id:
+            return queryset.filter(id=possible_id.groups()[0])
+        return queryset.filter(search_data__icontains=value)
+
     def filter_archived(self, queryset, name, value):
         if not value:
             # if value is 0 or None
-- 
GitLab