From 54a6733a90f062558a02d798f5721cdd29f95ce4 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 5 Dec 2017 17:09:36 +0100 Subject: [PATCH] common serialization function for subject and visit lists --- smash/web/api_views/serialization_utils.py | 14 ++++++++++++++ smash/web/api_views/subject.py | 10 +++------- smash/web/api_views/visit.py | 22 +++++++++++++++++++--- smash/web/static/js/smash.js | 3 +++ 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/smash/web/api_views/serialization_utils.py b/smash/web/api_views/serialization_utils.py index a780e4e0..2f75ab11 100644 --- a/smash/web/api_views/serialization_utils.py +++ b/smash/web/api_views/serialization_utils.py @@ -8,3 +8,17 @@ def bool_to_yes_no(val): return "YES" else: return "NO" + + +def flying_team_to_str(flying_team): + result = "" + if flying_team is not None: + result = unicode(flying_team) + return result + + +def location_to_str(location): + result = "" + if location is not None: + result = unicode(location.name) + return result \ No newline at end of file diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py index f05f17d0..7d4a979e 100644 --- a/smash/web/api_views/subject.py +++ b/smash/web/api_views/subject.py @@ -5,7 +5,7 @@ from django.db.models import Count, Case, When, Min, Max from django.db.models import Q from django.http import JsonResponse -from web.api_views.serialization_utils import bool_to_yes_no +from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str,location_to_str from web.models import StudySubject, Visit, Appointment, Subject, SubjectColumns, StudyColumns, Study, ContactAttempt from web.models.constants import SUBJECT_TYPE_CHOICES, GLOBAL_STUDY_ID from web.models.study_subject_list import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT, \ @@ -323,12 +323,8 @@ def types(request): def serialize_subject(study_subject): - location = "" - if study_subject.default_location is not None: - location = study_subject.default_location.name - flying_team = "" - if study_subject.flying_team is not None: - flying_team = unicode(study_subject.flying_team) + location = location_to_str(study_subject.location) + flying_team = flying_team_to_str(study_subject.flying_team) visits = Visit.objects.filter(subject=study_subject).order_by('visit_number') serialized_visits = [] for visit in visits: diff --git a/smash/web/api_views/visit.py b/smash/web/api_views/visit.py index c2b024c9..00251938 100644 --- a/smash/web/api_views/visit.py +++ b/smash/web/api_views/visit.py @@ -3,9 +3,9 @@ import logging from django.contrib.auth.decorators import login_required from django.http import JsonResponse -from web.api_views.serialization_utils import bool_to_yes_no +from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str from web.models import SubjectColumns -from web.models import Visit, Study, VisitColumns, StudyVisitList +from web.models import Visit, Study, VisitColumns, StudyVisitList, StudyColumns from web.models.constants import GLOBAL_STUDY_ID from web.models.study_visit_list import VISIT_LIST_GENERIC, VISIT_LIST_EXCEEDED_TIME, VISIT_LIST_UNFINISHED, \ VISIT_LIST_MISSING_APPOINTMENTS, VISIT_LIST_APPROACHING_WITHOUT_APPOINTMENTS, \ @@ -43,15 +43,21 @@ def get_visit_columns(request, visit_list_type): if len(study_visit_lists) > 0: visit_list = study_visit_lists[0] visit_columns = visit_list.visible_visit_columns - visit_subject_columns = visit_list.visible_visit_columns + visit_subject_columns = visit_list.visible_subject_columns + visit_subject_study_columns = visit_list.visible_subject_study_columns else: visit_list = StudyVisitList() visit_columns = VisitColumns() visit_subject_columns = SubjectColumns() + visit_subject_study_columns = StudyColumns() result = [] add_column(result, "First name", "first_name", visit_subject_columns, "string_filter") add_column(result, "Last name", "last_name", visit_subject_columns, "string_filter") + add_column(result, "Location", "default_location", visit_subject_study_columns, "location_filter", + study.columns) + add_column(result, "Flying team location", "flying_team", visit_subject_study_columns, "flying_team_filter", + study.columns) add_column(result, "Visit begins", "datetime_begin", visit_columns, None) add_column(result, "Visit ends", "datetime_end", visit_columns, None) add_column(result, "Finished", "is_finished", visit_columns, "yes_no_filter") @@ -91,6 +97,10 @@ def get_visits_order(visits_to_be_ordered, order_column, order_direction): result = visits_to_be_ordered.order_by(order_direction + 'subject__subject__first_name') elif order_column == "last_name": result = visits_to_be_ordered.order_by(order_direction + 'subject__subject__last_name') + elif order_column == "default_location": + result = visits_to_be_ordered.order_by(order_direction + 'subject__default_location') + elif order_column == "flying_team": + result = visits_to_be_ordered.order_by(order_direction + 'subject__flying_team') elif order_column == "datetime_begin": result = visits_to_be_ordered.order_by(order_direction + 'datetime_begin') elif order_column == "datetime_end": @@ -115,6 +125,10 @@ def get_visits_filtered(visits_to_be_filtered, filters): result = result.filter(subject__subject__first_name__icontains=value) elif column == "last_name": result = result.filter(subject__subject__last_name__icontains=value) + elif column == "flying_team": + result = result.filter(subject__flying_team=value) + elif column == "default_location": + result = result.filter(subject__default_location=value) elif column == "is_finished": result = result.filter(is_finished=(value == "true")) elif column == "post_mail_sent": @@ -184,6 +198,8 @@ def serialize_visit(visit): "last_name": visit.subject.subject.last_name, "datetime_begin": datetime_begin, "datetime_end": datetime_end, + "flying_team": flying_team_to_str(visit.subject.flying_team), + "default_location": location_to_str(visit.subject.default_location), "is_finished": bool_to_yes_no(visit.is_finished), "post_mail_sent": bool_to_yes_no(visit.post_mail_sent), "visit_number": visit.visit_number, diff --git a/smash/web/static/js/smash.js b/smash/web/static/js/smash.js index 8cb7943f..aa9575cd 100644 --- a/smash/web/static/js/smash.js +++ b/smash/web/static/js/smash.js @@ -206,6 +206,9 @@ function createVisibilityCheckboxes(checkboxesElement, columns) { function createTable(params) { var tableElement = params.tableElement; var worker_locations = params.worker_locations; + if (worker_locations === undefined) { + worker_locations = []; + } var subject_types_url = params.subject_types_url; var locations_url = params.locations_url; var flying_teams_url = params.flying_teams_url; -- GitLab