diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py index 94785aef3e1207de7b2f9431725a8b39ad636599..ab558c01959f748304588899bebd91204d84ced0 100644 --- a/smash/web/api_views/subject.py +++ b/smash/web/api_views/subject.py @@ -31,12 +31,14 @@ def referrals(request): }) -def add_column(result, name, field_name, column_list, param, columns_used_in_study=None): +def add_column(result, name, field_name, column_list, param, columns_used_in_study=None, visible_param=None): add = True if columns_used_in_study: add = getattr(columns_used_in_study, field_name) if add: - if column_list is None: + if visible_param is not None: + visible = visible_param + elif column_list is None: visible = True else: visible = getattr(column_list, field_name) @@ -79,14 +81,10 @@ 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, "Type", "type", study_subject_columns, "type_filter", study.columns) add_column(result, "Edit", "edit", None, None) - add_column(result, "Visit 1", "visit_1", None, "visit_filter") - add_column(result, "Visit 2", "visit_2", None, "visit_filter") - add_column(result, "Visit 3", "visit_3", None, "visit_filter") - add_column(result, "Visit 4", "visit_4", None, "visit_filter") - add_column(result, "Visit 5", "visit_5", None, "visit_filter") - add_column(result, "Visit 6", "visit_6", None, "visit_filter") - add_column(result, "Visit 7", "visit_7", None, "visit_filter") - add_column(result, "Visit 8", "visit_8", None, "visit_filter") + for visit_number in range(1, 9): + visit_key = "visit_" + str(visit_number) + add_column(result, "Visit " + str(visit_number), visit_key, None, "visit_filter", + visible_param=study_subject_list.visits) return JsonResponse({"columns": result}) diff --git a/smash/web/migrations/0081_studysubjectlist_last_contact_attempt.py b/smash/web/migrations/0081_studysubjectlist_last_contact_attempt.py index 571ce6737560d8d0f74f5689d790ff29202f8867..f08fc38f8c309472850c83f755bc79c5ed3742dd 100644 --- a/smash/web/migrations/0081_studysubjectlist_last_contact_attempt.py +++ b/smash/web/migrations/0081_studysubjectlist_last_contact_attempt.py @@ -5,16 +5,81 @@ from __future__ import unicode_literals from django.db import migrations, models +# noinspection PyUnusedLocal +# noinspection PyPep8Naming +def create_default_columns_for_SUBJECT_LIST_NO_VISIT(apps, schema_editor): + # We can't import the Study model directly as it may be a newer + # version than this migration expects. We use the historical version. + SubjectColumns = apps.get_model("web", "SubjectColumns") + subject_columns = SubjectColumns.objects.create() + subject_columns.sex = False + subject_columns.first_name = True + subject_columns.last_name = True + subject_columns.languages = False + subject_columns.default_written_communication_language = False + subject_columns.phone_number = False + subject_columns.phone_number_2 = False + subject_columns.phone_number_3 = False + subject_columns.email = False + subject_columns.date_born = False + subject_columns.address = False + subject_columns.postal_code = False + subject_columns.city = False + subject_columns.country = False + subject_columns.dead = False + subject_columns.save() + + StudyColumns = apps.get_model("web", "StudyColumns") + study_columns = StudyColumns.objects.create() + study_columns.postponed = False + study_columns.datetime_contact_reminder = False + study_columns.type = True + study_columns.default_location = True + study_columns.flying_team = True + study_columns.screening_number = True + study_columns.nd_number = False + study_columns.mpower_id = False + study_columns.comments = False + study_columns.referral = True + study_columns.diagnosis = False + study_columns.year_of_diagnosis = False + study_columns.information_sent = True + study_columns.pd_in_family = False + study_columns.resigned = False + study_columns.resign_reason = False + study_columns.save() + + class Migration(migrations.Migration): dependencies = [ ('web', '0080_auto_20171204_1341'), ] operations = [ + migrations.AddField( + model_name='studysubjectlist', + name='visits', + field=models.BooleanField(default=True, verbose_name=b'Visits summary'), + ), migrations.AddField( model_name='studysubjectlist', name='last_contact_attempt', field=models.BooleanField(default=False, verbose_name=b'Last contact attempt'), ), - migrations.RunSQL("UPDATE web_studysubjectlist SET last_contact_attempt=TRUE WHERE type='REQUIRE_CONTACT'"), + migrations.RunPython(create_default_columns_for_SUBJECT_LIST_NO_VISIT), + + migrations.RunSQL('INSERT INTO web_studysubjectlist (' + + 'study_id, ' + + 'visible_subject_study_columns_id, ' + + 'visible_subject_columns_id, ' + + 'last_contact_attempt,' + 'visits,' + 'type) ' + + "SELECT " + + "1, " + + "max(web_studycolumns.id), " + + "max(web_subjectcolumns.id), " + + "false, " + + "false, " + + "'NO_VISIT' FROM web_studycolumns, web_subjectcolumns;"), ] diff --git a/smash/web/migrations/0082_studysubjectlist_visits.py b/smash/web/migrations/0082_studysubjectlist_visits.py new file mode 100644 index 0000000000000000000000000000000000000000..a14a9f01e6749a562a5d3d03802c23e9d80741da --- /dev/null +++ b/smash/web/migrations/0082_studysubjectlist_visits.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-04 16:47 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0081_studysubjectlist_last_contact_attempt'), + ] + + operations = [ + ] diff --git a/smash/web/models/study_subject_list.py b/smash/web/models/study_subject_list.py index 887f7719e46aa3b7951909693ddbbf3465e89840..1b09054fd1391f85de1bbaccf8a390c63bc2a09c 100644 --- a/smash/web/models/study_subject_list.py +++ b/smash/web/models/study_subject_list.py @@ -41,6 +41,11 @@ class StudySubjectList(models.Model): verbose_name='Last contact attempt' ) + visits = models.BooleanField( + default=True, + verbose_name='Visits summary' + ) + type = models.CharField(max_length=50, choices=SUBJECT_LIST_CHOICES.items(), verbose_name='Type o list',