From da855430dc07371321ce4e97b10bf77ad01f6625 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 4 Dec 2017 16:57:23 +0100
Subject: [PATCH] possibility to filter and sort by referral

---
 smash/web/api_views/subject.py            |  8 +++++++-
 smash/web/tests/api_views/test_subject.py | 11 +++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index 946b45b2..7e043275 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -67,8 +67,9 @@ def get_subject_columns(request, subject_list_type):
     add_column(result, "First name", "first_name", subject_columns, "string_filter")
     add_column(result, "Last name", "last_name", subject_columns, "string_filter")
     add_column(result, "Date of birth", "date_born", subject_columns, None)
-    add_column(result, "Contact on", "datetime_contact_reminder", study_subject_columns, None)
+    add_column(result, "Contact on", "datetime_contact_reminder", study_subject_columns, None, study.columns)
     add_column(result, "Last contact attempt", "last_contact_attempt", study_subject_list, None)
+    add_column(result, "Referred by", "referral", study_subject_columns, "string_filter", study.columns)
     add_column(result, "Location", "default_location", study_subject_columns, "location_filter", study.columns)
     add_column(result, "Deceased", "dead", subject_columns, "yes_no_filter")
     add_column(result, "Resigned", "resigned", study_subject_columns, "yes_no_filter", study.columns)
@@ -118,6 +119,8 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__last_name')
     elif order_column == "nd_number":
         result = subjects_to_be_ordered.order_by(order_direction + 'nd_number')
+    elif order_column == "referral":
+        result = subjects_to_be_ordered.order_by(order_direction + 'referral')
     elif order_column == "screening_number":
         result = subjects_to_be_ordered.order_by(order_direction + 'screening_number')
     elif order_column == "default_location":
@@ -226,6 +229,8 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
             result = result.filter(subject__last_name__icontains=value)
         elif column == "nd_number":
             result = result.filter(nd_number__icontains=value)
+        elif column == "referral":
+            result = result.filter(referral__icontains=value)
         elif column == "screening_number":
             result = result.filter(screening_number__icontains=value)
         elif column == "dead":
@@ -370,6 +375,7 @@ def serialize_subject(study_subject):
         "last_contact_attempt": last_contact_attempt_string,
         "nd_number": study_subject.nd_number,
         "screening_number": study_subject.screening_number,
+        "referral": study_subject.referral,
         "default_location": location,
         "dead": get_yes_no(study_subject.subject.dead),
         "resigned": get_yes_no(study_subject.resigned),
diff --git a/smash/web/tests/api_views/test_subject.py b/smash/web/tests/api_views/test_subject.py
index 71f3adc7..c16d85bb 100644
--- a/smash/web/tests/api_views/test_subject.py
+++ b/smash/web/tests/api_views/test_subject.py
@@ -229,6 +229,17 @@ class TestApi(TestCase):
 
         self.check_subject_ordered("last_name", [subject, subject2])
 
+    def test_subjects_sort_referral(self):
+        subject = self.study_subject
+        subject.referral = "XXX"
+        subject.save()
+
+        subject2 = create_study_subject(2)
+        subject2.referral = "YYY"
+        subject2.save()
+
+        self.check_subject_ordered("referral", [subject, subject2])
+
     def test_subjects_sort_dead(self):
         study_subject = self.study_subject
         study_subject.subject.dead = True
-- 
GitLab