diff --git a/smash/web/migrations/0072_auto_20171201_1013.py b/smash/web/migrations/0072_auto_20171201_1013.py new file mode 100644 index 0000000000000000000000000000000000000000..c90da294dd1ceb61ac58b09bbdc8b1eff9588641 --- /dev/null +++ b/smash/web/migrations/0072_auto_20171201_1013.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-01 10:13 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +# noinspection PyUnusedLocal +# noinspection PyPep8Naming +def create_default_study_columns(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. + StudyColumns = apps.get_model("web", "StudyColumns") + study_columns = StudyColumns.objects.create() + study_columns.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0071_auto_20171130_1607'), + ] + + operations = [ + migrations.CreateModel( + name='StudyColumns', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('postponed', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Postponed')), + ('datetime_contact_reminder', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Please make a contact on')), + ('type', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Type')), + ('default_location', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Default appointment location')), + ('flying_team', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Default flying team location (if applicable)')), + ('screening_number', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Screening number')), + ('nd_number', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'ND number')), + ('mpower_id', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'MPower ID')), + ('comments', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Comments')), + ('referral', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Referred by')), + ('diagnosis', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Diagnosis')), + ('year_of_diagnosis', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Year of diagnosis (YYYY)')), + ('information_sent', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Information sent')), + ('pd_in_family', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'PD in family')), + ('resigned', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Resigned')), + ('resign_reason', models.BooleanField(choices=[(True, b'Yes'), (False, b'No')], default=True, verbose_name=b'Resign reason')), + ], + ), + migrations.RunPython(create_default_study_columns), + migrations.AddField( + model_name='study', + name='columns', + field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, to='web.StudyColumns'), + preserve_default=False, + ), + ] diff --git a/smash/web/models/__init__.py b/smash/web/models/__init__.py index de19e31d99316eea3864bec1fa3fd598ca48d04f..08ec523105707084f8ac8dddc064095a0efce271 100644 --- a/smash/web/models/__init__.py +++ b/smash/web/models/__init__.py @@ -8,6 +8,7 @@ from flying_team import FlyingTeam from location import Location from appointment_type_link import AppointmentTypeLink from country import Country +from study_columns import StudyColumns from study import Study from room import Room from visit import Visit @@ -28,4 +29,4 @@ from inconsistent_subject import InconsistentSubject, InconsistentField __all__ = [Study, FlyingTeam, Appointment, AppointmentType, Availability, Holiday, Item, Language, Location, Room, Subject, StudySubject, Visit, Worker, ContactAttempt, ConfigurationItem, MailTemplate, AppointmentTypeLink, MissingSubject, - InconsistentSubject, InconsistentField, Country] + InconsistentSubject, InconsistentField, Country, StudyColumns] diff --git a/smash/web/models/study.py b/smash/web/models/study.py index 469c5f4ebaa1ff0485499a04ce4f9f6bd7ee9834..d3b4090d33f589d100ce6c723f5af783597903bf 100644 --- a/smash/web/models/study.py +++ b/smash/web/models/study.py @@ -1,6 +1,8 @@ # coding=utf-8 from django.db import models +from web.models.study_columns import StudyColumns + class Study(models.Model): class Meta: @@ -8,6 +10,11 @@ class Study(models.Model): name = models.CharField(max_length=255, verbose_name='Name') + columns = models.OneToOneField( + StudyColumns, + on_delete=models.CASCADE, + ) + def __str__(self): return "%s" % self.name diff --git a/smash/web/models/study_columns.py b/smash/web/models/study_columns.py new file mode 100644 index 0000000000000000000000000000000000000000..0eea13393160ee9c93954c3f3d44302ce536daba --- /dev/null +++ b/smash/web/models/study_columns.py @@ -0,0 +1,85 @@ +# coding=utf-8 +from django.db import models + +from web.models.constants import BOOL_CHOICES + + +class StudyColumns(models.Model): + class Meta: + app_label = 'web' + + postponed = models.BooleanField(choices=BOOL_CHOICES, + verbose_name='Postponed', + default=True + ) + + datetime_contact_reminder = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Please make a contact on' + ) + type = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Type' + ) + + default_location = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Default appointment location', + ) + + flying_team = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Default flying team location (if applicable)', + ) + + screening_number = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Screening number', + ) + nd_number = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='ND number', + ) + mpower_id = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='MPower ID' + ) + comments = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Comments' + ) + referral = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Referred by' + ) + diagnosis = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Diagnosis' + ) + year_of_diagnosis = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Year of diagnosis (YYYY)' + ) + + information_sent = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Information sent', + ) + pd_in_family = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='PD in family', + ) + resigned = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Resigned', + ) + resign_reason = models.BooleanField(choices=BOOL_CHOICES, + default=True, + verbose_name='Resign reason' + ) + + def __str__(self): + return "%s" % self.study + + def __unicode__(self): + return "%s" % self.study diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py index be71820bdffef0bfb153445509324462c1315be1..34401ae54e7827fd5cdef302e487ea9db8e07134 100644 --- a/smash/web/tests/functions.py +++ b/smash/web/tests/functions.py @@ -4,7 +4,7 @@ import os from django.contrib.auth.models import User from web.models import Location, AppointmentType, StudySubject, Worker, Visit, Appointment, ConfigurationItem, Language, \ - ContactAttempt, FlyingTeam, Availability, Subject, Study + ContactAttempt, FlyingTeam, Availability, Subject, Study, StudyColumns from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, REDCAP_BASE_URL_CONFIGURATION_TYPE, \ SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL, CONTACT_TYPES_PHONE, \ MONDAY_AS_DAY_OF_WEEK, COUNTRY_AFGHANISTAN_ID @@ -24,7 +24,8 @@ def create_location(name="test"): def create_study(name="test"): - return Study.objects.create(name=name) + study_columns = StudyColumns.objects.create() + return Study.objects.create(name=name, columns=study_columns) def get_test_location():