From 53363a23f6c63364df9c6fa4f827bd74a2a18ec2 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 30 Nov 2017 14:26:23 +0100
Subject: [PATCH] refacotr on filtering/ordering by visits - it's more flexible
 (not limited to max 8 visits)

---
 smash/web/api_views/subject.py | 48 +++++++---------------------------
 1 file changed, 10 insertions(+), 38 deletions(-)

diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index b96a452f..c47bd91d 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -78,27 +78,18 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
         result = subjects_to_be_ordered.order_by(order_direction + 'id')
     elif order_column == "date_born":
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__date_born')
-    elif order_column == "visit_1":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 1)
-    elif order_column == "visit_2":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 2)
-    elif order_column == "visit_3":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 3)
-    elif order_column == "visit_4":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 4)
-    elif order_column == "visit_5":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 5)
-    elif order_column == "visit_6":
-        result = order_by_visit(subjects_to_be_ordered, order_direction, 6)
-    elif order_column == "visit_7":
-        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)
+    elif str(order_column).startswith("visit_"):
+        visit_number = get_visit_number_from_visit_x_string(order_column)
+        result = order_by_visit(subjects_to_be_ordered, order_direction, visit_number)
     else:
         logger.warn("Unknown sort column: " + str(order_column))
     return result
 
 
+def get_visit_number_from_visit_x_string(order_column):
+    return int(str(order_column).split("_")[1])
+
+
 def filter_by_visit(result, visit_number, visit_type):
     # we need to give custom names for filtering params that contain visit_number in it
     # because we might want to filter by few visits  and they shouldn't collide
@@ -185,22 +176,9 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
             result = result.filter(default_location=value)
         elif column == "type":
             result = result.filter(type=value)
-        elif column == "visit_1":
-            result = filter_by_visit(result, 1, value)
-        elif column == "visit_2":
-            result = filter_by_visit(result, 2, value)
-        elif column == "visit_3":
-            result = filter_by_visit(result, 3, value)
-        elif column == "visit_4":
-            result = filter_by_visit(result, 4, value)
-        elif column == "visit_5":
-            result = filter_by_visit(result, 5, value)
-        elif column == "visit_6":
-            result = filter_by_visit(result, 6, value)
-        elif column == "visit_7":
-            result = filter_by_visit(result, 7, value)
-        elif column == "visit_8":
-            result = filter_by_visit(result, 8, value)
+        elif str(column).startswith("visit_"):
+            visit_number = get_visit_number_from_visit_x_string(column)
+            result = filter_by_visit(result, visit_number, value)
         elif column == "":
             pass
         else:
@@ -277,12 +255,6 @@ def get_yes_no(val):
         return "NO"
 
 
-def serialize_subject_visit(visit):
-    status = "---"
-    appointments = visit.appointment_set.filter()
-    pass
-
-
 def serialize_subject(study_subject):
     location = ""
     if study_subject.default_location is not None:
-- 
GitLab