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