From 62c3f1d4e5620c46b4626fc7955c41fcd6c75441 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 30 Oct 2017 13:27:55 +0100
Subject: [PATCH] user can sort by birth date or id

---
 smash/web/api_views/subject.py            |  6 ++++++
 smash/web/static/js/subject.js            |  3 ++-
 smash/web/tests/api_views/test_subject.py | 18 ++++++++++++++++++
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index 02bd657c..6d1bb1f5 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -82,6 +82,10 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
         result = subjects_to_be_ordered.order_by(order_direction + 'postponed')
     elif order_column == "type":
         result = subjects_to_be_ordered.order_by(order_direction + 'type')
+    elif order_column == "id":
+        result = subjects_to_be_ordered.order_by(order_direction + 'id')
+    elif order_column == "date_born":
+        result = subjects_to_be_ordered.order_by(order_direction + 'date_born')
     elif order_column == "visit_1":
         result = order_by_visit(subjects_to_be_ordered, order_direction, 1)
     elif order_column == "visit_2":
@@ -98,6 +102,8 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
         result = order_by_visit(subjects_to_be_ordered, order_direction, 7)
     elif order_column == "visit_8":
         result = order_by_visit(subjects_to_be_ordered, order_direction, 8)
+    else:
+        logger.warn("Unknown sort column: "+order_column)
     return result
 
 
diff --git a/smash/web/static/js/subject.js b/smash/web/static/js/subject.js
index 8453f7e9..bfee2f14 100644
--- a/smash/web/static/js/subject.js
+++ b/smash/web/static/js/subject.js
@@ -15,7 +15,8 @@ function createColumn(dataType, name, filter, visible, renderFunction) {
 
 function getColumns(type) {
     var result = [];
-    result.push(createColumn("id", "Id", null, false));
+    // don't confuse end user
+    // result.push(createColumn("id", "Id", null, false));
     result.push(createColumn("nd_number", "ND", "string_filter", true));
     result.push(createColumn("screening_number", "Screening", "string_filter", true));
     result.push(createColumn("first_name", "First name", "string_filter", true));
diff --git a/smash/web/tests/api_views/test_subject.py b/smash/web/tests/api_views/test_subject.py
index b96c694f..b4b074f3 100644
--- a/smash/web/tests/api_views/test_subject.py
+++ b/smash/web/tests/api_views/test_subject.py
@@ -144,6 +144,24 @@ class TestApi(TestCase):
 
         self.check_subject_ordered("nd_number", [subject, subject2])
 
+    def test_subjects_sort_id(self):
+        subject = self.subject
+
+        subject2 = create_subject(2)
+
+        self.check_subject_ordered("id", [subject, subject2])
+
+    def test_subjects_sort_date_born(self):
+        subject = self.subject
+        subject.date_born = get_today_midnight_date()
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.date_born = get_today_midnight_date() + datetime.timedelta(days=1)
+        subject2.save()
+
+        self.check_subject_ordered("date_born", [subject, subject2])
+
     def test_subjects_sort_default_location(self):
         subject = self.subject
 
-- 
GitLab