diff --git a/smash/db_scripts/create_dummy_data.py b/smash/db_scripts/create_dummy_data.py index dadf16b1f1093524e1d864ddfab5edfc9ffa274f..f7128dced3b8cfdaeef2a6896b63f336b6b1ee7c 100644 --- a/smash/db_scripts/create_dummy_data.py +++ b/smash/db_scripts/create_dummy_data.py @@ -1,10 +1,8 @@ # coding=utf-8 -import os, sys +import os +import sys + sys.path.append(sys.path.append(os.path.join(os.path.dirname(__file__), '..'))) #run script as it was on parent folder -from django.conf import settings -from django.core.files import File # you need this somewhere -import urllib.request, urllib.parse, urllib.error -from django.core.files.uploadedfile import SimpleUploadedFile import django import datetime from django.utils import timezone @@ -14,23 +12,21 @@ from django.contrib.auth.models import User # models (please add in both lines) from web.models import StudySubject, Availability, Visit, Appointment, AppointmentType, AppointmentTypeLink, Study, Subject, Worker, Location, Language, Country, WorkerStudyRole, Item, FlyingTeam, Room, MailTemplate from smash.local_settings import MEDIA_ROOT -from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, REDCAP_BASE_URL_CONFIGURATION_TYPE, \ - SEX_CHOICES_MALE, SEX_CHOICES_FEMALE, SUBJECT_TYPE_CHOICES_CONTROL, SUBJECT_TYPE_CHOICES_PATIENT, CONTACT_TYPES_PHONE, \ - MONDAY_AS_DAY_OF_WEEK, COUNTRY_AFGHANISTAN_ID, VOUCHER_STATUS_NEW, GLOBAL_STUDY_ID, DEFAULT_LOCALE_NAME +from web.models.constants import SEX_CHOICES_MALE, SEX_CHOICES_FEMALE, SUBJECT_TYPE_CHOICES_CONTROL, SUBJECT_TYPE_CHOICES_PATIENT, \ + COUNTRY_AFGHANISTAN_ID, GLOBAL_STUDY_ID, DEFAULT_LOCALE_NAME from web.models.constants import MAIL_TEMPLATE_CONTEXT_APPOINTMENT, MAIL_TEMPLATE_CONTEXT_VISIT, \ MAIL_TEMPLATE_CONTEXT_SUBJECT, MAIL_TEMPLATE_CONTEXT_VOUCHER -from web.models.worker_study_role import ROLE_CHOICES_PROJECT_MANAGER, ROLE_CHOICES_SECRETARY, ROLE_CHOICES_DOCTOR, WORKER_VOUCHER_PARTNER, ROLE_CHOICES_TECHNICIAN, ROLE_CHOICES_PSYCHOLOGIST, ROLE_CHOICES_NURSE +from web.models.worker_study_role import ROLE_CHOICES_PROJECT_MANAGER, ROLE_CHOICES_SECRETARY, ROLE_CHOICES_DOCTOR, \ + ROLE_CHOICES_TECHNICIAN, ROLE_CHOICES_PSYCHOLOGIST, ROLE_CHOICES_NURSE from collections import defaultdict import logging logger = logging.getLogger(__name__) from web.utils import get_today_midnight_date -from faker.providers import BaseProvider, color +from faker.providers import BaseProvider from numpy.random import choice from faker import Faker -import platform -import tempfile from shutil import copyfile diff --git a/smash/web/importer/importer.py b/smash/web/importer/importer.py index 9cb1b2995a21425a0c822fc5a473eb3d53582429..69e06c87a238459c2bd662d5c048fc886fd4045e 100644 --- a/smash/web/importer/importer.py +++ b/smash/web/importer/importer.py @@ -3,7 +3,7 @@ import logging import sys import traceback -from web.models import StudySubject, Subject, Language +from web.models import StudySubject, Subject, Language, SubjectType from .etl_common import EtlCommon from .subject_import_reader import SubjectImportReader from .warning_counter import MsgCounterHandler @@ -76,6 +76,8 @@ class Importer(EtlCommon): self.merged_count += 1 else: + if study_subject.type is None: + study_subject.type = SubjectType.objects.all().first() study_subject.subject.save() study_subject.subject = Subject.objects.get(pk=study_subject.subject.id) study_subject.save() diff --git a/smash/web/migrations/0194_migrate_subject_type_to_new_structure.py b/smash/web/migrations/0194_migrate_subject_type_to_new_structure.py index a348877c500abc26cc9cde1add31d98986e394ea..8e1bdab887a1b40e241988e01064beb4e83ce578 100644 --- a/smash/web/migrations/0194_migrate_subject_type_to_new_structure.py +++ b/smash/web/migrations/0194_migrate_subject_type_to_new_structure.py @@ -52,8 +52,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='studysubject', name='new_type', - field=models.ForeignKey(default=patient_type_id, on_delete=django.db.models.deletion.CASCADE, - to='web.subjecttype', verbose_name='Type') + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, + to='web.subjecttype', verbose_name='Type', + blank=True, null=True) ), migrations.RunSQL("update web_studysubject " + " set new_type_id = " + str(patient_type_id) + " where type = 'P'"), diff --git a/smash/web/models/study_subject.py b/smash/web/models/study_subject.py index 4f224593d30efd58a9a9ba995882e20ab0daad2d..c81add3358bf7c241a0a061ebe0626b05a9ea512 100644 --- a/smash/web/models/study_subject.py +++ b/smash/web/models/study_subject.py @@ -74,8 +74,8 @@ class StudySubject(models.Model): ) type = models.ForeignKey("web.SubjectType", - null=False, - blank=False, + null=True, + blank=True, on_delete=models.CASCADE, verbose_name='Type' ) diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py index c335ccebef2b1ed6e98cf325c342bbe19f44205f..eea63ff06e192a596fec9bd9140c8769153a9c7d 100644 --- a/smash/web/models/visit.py +++ b/smash/web/models/visit.py @@ -1,18 +1,17 @@ # coding=utf-8 -import datetime -from dateutil.relativedelta import relativedelta +import logging +from dateutil.relativedelta import relativedelta from django.db import models +from django.db import transaction from django.db.models.signals import post_save from django.dispatch import receiver -from django.db import transaction from web.models.constants import BOOL_CHOICES, SUBJECT_TYPE_CHOICES_CONTROL -from web.models import Study -import logging logger = logging.getLogger(__name__) + class Visit(models.Model): class Meta: diff --git a/smash/web/tests/api_views/test_subject.py b/smash/web/tests/api_views/test_subject.py index 36596acad31e56a23e8826a609ed1ad9fc6257a3..3f2b213c5ee64e8ec3c63aed41f7a22c5738596c 100644 --- a/smash/web/tests/api_views/test_subject.py +++ b/smash/web/tests/api_views/test_subject.py @@ -4,15 +4,15 @@ import json import logging from django.urls import reverse -from parameterized import parameterized from django.utils import timezone +from parameterized import parameterized from six import ensure_str from web.api_views.subject import get_subjects_order, get_subjects_filtered, serialize_subject, get_subject_columns from web.importer.warning_counter import MsgCounterHandler from web.models import StudySubject, Appointment, Study, Worker, SubjectColumns, StudyColumns -from web.models.constants import GLOBAL_STUDY_ID, SUBJECT_TYPE_CHOICES_PATIENT, SUBJECT_TYPE_CHOICES_CONTROL, \ - CUSTOM_FIELD_TYPE_TEXT, CUSTOM_FIELD_TYPE_BOOLEAN, CUSTOM_FIELD_TYPE_INTEGER, CUSTOM_FIELD_TYPE_DOUBLE, \ +from web.models.constants import GLOBAL_STUDY_ID, CUSTOM_FIELD_TYPE_TEXT, CUSTOM_FIELD_TYPE_BOOLEAN, \ + CUSTOM_FIELD_TYPE_INTEGER, CUSTOM_FIELD_TYPE_DOUBLE, \ CUSTOM_FIELD_TYPE_DATE, CUSTOM_FIELD_TYPE_SELECT_LIST, CUSTOM_FIELD_TYPE_FILE from web.models.custom_data import CustomStudySubjectField from web.models.custom_data.custom_study_subject_field import get_study_subject_field_id diff --git a/smash/web/tests/importer/test_csv_subject_import_reader.py b/smash/web/tests/importer/test_csv_subject_import_reader.py index 792331b8dba45373a941a6680113ad8ec1e4824d..963e895e8333635f4f3c6662666562315b210836 100644 --- a/smash/web/tests/importer/test_csv_subject_import_reader.py +++ b/smash/web/tests/importer/test_csv_subject_import_reader.py @@ -54,9 +54,6 @@ class TestCsvReader(TestCase): def test_load_language(self): self.subject_import_data.filename = get_resource_path('import_language.csv') study_subjects = CsvSubjectImportReader(self.subject_import_data).load_data() - for study_subject in study_subjects: - study_subject.subject.save() - study_subject.save() self.assertEqual(3, len(study_subjects)) self.assertIsNotNone(study_subjects[0].subject.default_written_communication_language)