diff --git a/smash/web/api_views/serialization_utils.py b/smash/web/api_views/serialization_utils.py index c1e857ed889a0973ead5f9dd0a8c5e644c32527d..89e2c9c19c2eb5aa958a17165fe12d440b842c58 100644 --- a/smash/web/api_views/serialization_utils.py +++ b/smash/web/api_views/serialization_utils.py @@ -41,8 +41,8 @@ def serialize_datetime(date): def add_column(result, name, field_name, column_list, param, columns_used_in_study=None, visible_param=None, - sortable=True): - add = True + sortable=True, add_param=True): + add = add_param if columns_used_in_study: add = getattr(columns_used_in_study, field_name) if add: diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py index 5500f2f1b978d696a7645c3a6a8918173473bf2b..f0f7385225b4f185dce5fb17ef5920bc87c854f6 100644 --- a/smash/web/api_views/subject.py +++ b/smash/web/api_views/subject.py @@ -17,6 +17,7 @@ from web.views.notifications import get_subjects_with_no_visit, get_subjects_wit logger = logging.getLogger(__name__) +# noinspection PyUnusedLocal @login_required def cities(request): result_subjects = Subject.objects.filter(city__isnull=False).values_list('city').distinct() @@ -25,6 +26,7 @@ def cities(request): }) +# noinspection PyUnusedLocal @login_required def referrals(request): result_subjects = StudySubject.objects.filter(referral__isnull=False).values_list('referral').distinct() @@ -56,6 +58,12 @@ def get_subject_columns(request, subject_list_type): 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, "Health partner name", "health_partner_first_name", None, "string_filter", + add_param=study.columns.health_partner, + visible_param=study_subject_columns.health_partner) + add_column(result, "Health partner last name", "health_partner_last_name", None, "string_filter", + add_param=study.columns.health_partner, + visible_param=study_subject_columns.health_partner) add_column(result, "Location", "default_location", study_subject_columns, "location_filter", study.columns) add_column(result, "Flying team location", "flying_team", study_subject_columns, "flying_team_filter", study.columns) @@ -117,6 +125,10 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction): result = subjects_to_be_ordered.order_by(order_direction + 'resigned') elif order_column == "information_sent": result = subjects_to_be_ordered.order_by(order_direction + 'information_sent') + elif order_column == "health_partner_first_name": + result = subjects_to_be_ordered.order_by(order_direction + 'health_partner__first_name') + elif order_column == "health_partner_last_name": + result = subjects_to_be_ordered.order_by(order_direction + 'health_partner__last_name') elif order_column == "social_security_number": result = subjects_to_be_ordered.order_by(order_direction + 'subject__social_security_number') elif order_column == "postponed": @@ -229,6 +241,10 @@ def get_subjects_filtered(subjects_to_be_filtered, filters): result = result.filter(postponed=(value == "true")) elif column == "information_sent": result = result.filter(information_sent=(value == "true")) + elif column == "health_partner_first_name": + result = result.filter(health_partner__first_name__icontains=value) + elif column == "health_partner_last_name": + result = result.filter(health_partner__last_name__icontains=value) elif column == "social_security_number": result = result.filter(subject__social_security_number__icontains=value) elif column == "default_location": @@ -294,6 +310,7 @@ def subjects(request, type): return e500_error(request) +# noinspection PyUnusedLocal @login_required def types(request): data = [{"id": subject_type_id, "name": subject_type_name} for subject_type_id, subject_type_name in @@ -343,6 +360,12 @@ def serialize_subject(study_subject): else: last_contact_attempt_string = "" + health_partner_first_name = "" + if study_subject.health_partner: + health_partner_first_name = study_subject.health_partner.first_name + health_partner_last_name = "" + if study_subject.health_partner: + health_partner_last_name = study_subject.health_partner.last_name result = { "first_name": study_subject.subject.first_name, "last_name": study_subject.subject.last_name, @@ -358,6 +381,8 @@ def serialize_subject(study_subject): "resigned": bool_to_yes_no(study_subject.resigned), "postponed": bool_to_yes_no(study_subject.postponed), "information_sent": bool_to_yes_no(study_subject.information_sent), + "health_partner_first_name": health_partner_first_name, + "health_partner_last_name": health_partner_last_name, "social_security_number": study_subject.subject.social_security_number, "type": study_subject.get_type_display(), "id": study_subject.id,