Skip to content
Snippets Groups Projects
Commit ca62b153 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

filtering by virus tests refactored copy-paste replaced with regexp

parent b4967fca
No related branches found
No related tags found
1 merge request!253Resolve "import of serology data"
Pipeline #27188 failed
...@@ -82,20 +82,20 @@ def get_subject_columns(request, subject_list_type): ...@@ -82,20 +82,20 @@ def get_subject_columns(request, subject_list_type):
add_column(result, "Info sent", "information_sent", study_subject_columns, "yes_no_filter", study.columns) add_column(result, "Info sent", "information_sent", study_subject_columns, "yes_no_filter", study.columns)
visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value
#True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. # True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0.
if strtobool(visit_from_zero): if strtobool(visit_from_zero):
virus_visit_numbers = range(0, 5) virus_visit_numbers = range(0, 5)
visit_numbers = range(0, study.visits_to_show_in_subject_list + 0) visit_numbers = range(0, study.visits_to_show_in_subject_list + 0)
else: else:
virus_visit_numbers = range(1, 5+1) virus_visit_numbers = range(1, 5 + 1)
visit_numbers = range(1, study.visits_to_show_in_subject_list + 1) visit_numbers = range(1, study.visits_to_show_in_subject_list + 1)
for one_based_idx, virus_visit_number in enumerate(virus_visit_numbers, 1): for one_based_idx, virus_visit_number in enumerate(virus_visit_numbers, 1):
add_column(result, add_column(result,
'Virus {} RT-PCR'.format(virus_visit_number), 'Virus {} RT-PCR'.format(virus_visit_number),
'virus_test_{}'.format(one_based_idx), #always starts in 1 'virus_test_{}'.format(one_based_idx), # always starts in 1
study_subject_columns, study_subject_columns,
'yes_no_null_inconclusive_filter', study.columns) 'yes_no_null_inconclusive_filter', study.columns)
add_column(result, add_column(result,
"Visit {} RT-PCR update date".format(virus_visit_number), "Visit {} RT-PCR update date".format(virus_visit_number),
"virus_test_{}_updated".format(one_based_idx), "virus_test_{}_updated".format(one_based_idx),
...@@ -121,9 +121,9 @@ def get_subject_columns(request, subject_list_type): ...@@ -121,9 +121,9 @@ def get_subject_columns(request, subject_list_type):
add_column(result, "Edit", "edit", None, None, sortable=False) add_column(result, "Edit", "edit", None, None, sortable=False)
for one_based_idx, visit_number in enumerate(visit_numbers, 1): for one_based_idx, visit_number in enumerate(visit_numbers, 1):
visit_key = "visit_{}".format(one_based_idx) #always starts in 1 visit_key = "visit_{}".format(one_based_idx) # always starts in 1
add_column(result, "Visit {}".format(visit_number), visit_key, None, add_column(result, "Visit {}".format(visit_number), visit_key, None,
"visit_filter", visible_param=study_subject_list.visits) "visit_filter", visible_param=study_subject_list.visits)
return JsonResponse({"columns": result}) return JsonResponse({"columns": result})
...@@ -325,61 +325,25 @@ def get_subjects_filtered(subjects_to_be_filtered, filters): ...@@ -325,61 +325,25 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
result = result.filter(resigned=(value == "true")) result = result.filter(resigned=(value == "true"))
elif column == "endpoint_reached": elif column == "endpoint_reached":
result = result.filter(endpoint_reached=(value == "true")) result = result.filter(endpoint_reached=(value == "true"))
elif column == "virus_test_1": elif re.search(r'^virus_test_[1-5]$', column):
if value == "null": visit_number = column.replace("virus_test_", "")
result = result.filter(virus_test_1__isnull=True, virus_test_1_updated__isnull=True) virus_test__isnull_param = "virus_test_{}__isnull".format(visit_number)
elif value == "inconclusive": virus_test__updated__isnull_param = "virus_test_{}_updated__isnull".format(visit_number)
result = result.filter(virus_test_1__isnull=True, virus_test_1_updated__isnull=False) visit_test_param = "virus_test_{}".format(visit_number)
else:
result = result.filter(virus_test_1=(value == "true"))
elif column == "virus_test_2":
if value == "null":
result = result.filter(virus_test_2__isnull=True, virus_test_2_updated__isnull=True)
elif value == "inconclusive":
result = result.filter(virus_test_2__isnull=True, virus_test_2_updated__isnull=False)
else:
result = result.filter(virus_test_2=(value == "true"))
elif column == "virus_test_3":
if value == "null":
result = result.filter(virus_test_3__isnull=True, virus_test_3_updated__isnull=True)
elif value == "inconclusive":
result = result.filter(virus_test_3__isnull=True, virus_test_3_updated__isnull=False)
else:
result = result.filter(virus_test_3=(value == "true"))
elif column == "virus_test_4":
if value == "null":
result = result.filter(virus_test_4__isnull=True, virus_test_4_updated__isnull=True)
elif value == "inconclusive":
result = result.filter(virus_test_4__isnull=True, virus_test_4_updated__isnull=False)
else:
result = result.filter(virus_test_4=(value == "true"))
elif column == "virus_test_5":
if value == "null": if value == "null":
result = result.filter(virus_test_5__isnull=True, virus_test_5_updated__isnull=True) result = result.filter(**{virus_test__isnull_param: True, virus_test__updated__isnull_param: True})
elif value == "inconclusive": elif value == "inconclusive":
result = result.filter(virus_test_5__isnull=True, virus_test_5_updated__isnull=False) result = result.filter(**{virus_test__isnull_param: True, virus_test__updated__isnull_param: False})
else: else:
result = result.filter(virus_test_5=(value == "true")) result = result.filter(**{visit_test_param: (value == "true")})
elif column == "virus_test_1_iga_status": elif re.search(r'^virus_test_[1-5]_iga_status$', column):
result = result.filter(virus_test_1_iga_status=value) visit_number = column.replace("virus_test_", "").replace("_iga_status", "")
elif column == "virus_test_1_igg_status": virus_test_iga_status_param = "virus_test_{}_iga_status".format(visit_number)
result = result.filter(virus_test_1_igg_status=value) result = result.filter(**{virus_test_iga_status_param: value})
elif column == "virus_test_2_iga_status": elif re.search(r'^virus_test_[1-5]_igg_status$', column):
result = result.filter(virus_test_2_iga_status=value) visit_number = column.replace("virus_test_", "").replace("_igg_status", "")
elif column == "virus_test_2_igg_status": virus_test_igg_status_param = "virus_test_{}_igg_status".format(visit_number)
result = result.filter(virus_test_2_igg_status=value) result = result.filter(**{virus_test_igg_status_param: value})
elif column == "virus_test_3_iga_status":
result = result.filter(virus_test_3_iga_status=value)
elif column == "virus_test_3_igg_status":
result = result.filter(virus_test_3_igg_status=value)
elif column == "virus_test_4_iga_status":
result = result.filter(virus_test_4_iga_status=value)
elif column == "virus_test_4_igg_status":
result = result.filter(virus_test_4_igg_status=value)
elif column == "virus_test_5_iga_status":
result = result.filter(virus_test_5_iga_status=value)
elif column == "virus_test_5_igg_status":
result = result.filter(virus_test_5_igg_status=value)
elif column == "brain_donation_agreement": elif column == "brain_donation_agreement":
result = result.filter(brain_donation_agreement=(value == "true")) result = result.filter(brain_donation_agreement=(value == "true"))
elif column == "postponed": elif column == "postponed":
......
...@@ -682,3 +682,21 @@ class TestSubjectApi(LoggedInWithWorkerTestCase): ...@@ -682,3 +682,21 @@ class TestSubjectApi(LoggedInWithWorkerTestCase):
order = row['type'] order = row['type']
get_subjects_order(StudySubject.objects.none(), order, "asc") get_subjects_order(StudySubject.objects.none(), order, "asc")
self.assertEqual(self.get_warning_count(), 0, msg="Sorting by \"" + order + "\" does not work") self.assertEqual(self.get_warning_count(), 0, msg="Sorting by \"" + order + "\" does not work")
def test_subjects_filter_virus_test(self):
study_subject_positive = create_study_subject(2)
study_subject_positive.virus_test_1 = True
study_subject_positive.save()
study_subject_negative = create_study_subject(2)
study_subject_negative.virus_test_1 = False
study_subject_negative.save()
study_subject_inconclusive = create_study_subject(2)
study_subject_inconclusive.virus_test_1 = None
study_subject_inconclusive.virus_test_1_updated = datetime.datetime.now()
study_subject_inconclusive.save()
self.check_subject_filtered([["virus_test_1", "true"]], [study_subject_positive])
self.check_subject_filtered([["virus_test_1", "false"]], [study_subject_negative])
self.check_subject_filtered([["virus_test_1", "inconclusive"]], [study_subject_inconclusive])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment