diff --git a/smash/web/migrations/0164_configurationitem_email_items_for_redcap.py b/smash/web/migrations/0164_configurationitem_email_items_for_redcap.py new file mode 100644 index 0000000000000000000000000000000000000000..efa3e50fdb36463fe9a08bc86af80be75f738d1b --- /dev/null +++ b/smash/web/migrations/0164_configurationitem_email_items_for_redcap.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-04-04 09:43 +from __future__ import unicode_literals + +from django.db import migrations + +from web.models.constants import RED_CAP_SAMPLE_DATE_FIELD_TYPE + + +def create_item(apps, type, value, name): + # We can't import the ConfigurationItem model directly as it may be a newer + # version than this migration expects. We use the historical version. + ConfigurationItem = apps.get_model("web", "ConfigurationItem") + item = ConfigurationItem.objects.create() + item.type = type + item.value = value + item.name = name + item.save() + + +def configuration_items(apps, schema_editor): + create_item(apps, RED_CAP_SAMPLE_DATE_FIELD_TYPE, "", + "Redcap field for sample date in the visit") + + +class Migration(migrations.Migration): + dependencies = [ + ('web', '0163_study_redcap_first_visit_number'), + ] + + operations = [ + migrations.RunPython(configuration_items), + ] diff --git a/smash/web/models/constants.py b/smash/web/models/constants.py index b512e714efac9136e8c4d9d9bc048f77d065458f..049ea7071637c6f48b51f4063d3fd26fb15b08d6 100644 --- a/smash/web/models/constants.py +++ b/smash/web/models/constants.py @@ -62,6 +62,7 @@ RED_CAP_SEX_FIELD_TYPE = 'RED_CAP_SEX_FIELD_TYPE' RED_CAP_DATE_BORN_FIELD_TYPE = 'RED_CAP_DATE_BORN_FIELD_TYPE' RED_CAP_ND_NUMBER_FIELD_TYPE = 'RED_CAP_ND_NUMBER_FIELD_TYPE' RED_CAP_VIRUS_FIELD_TYPE = 'RED_CAP_VIRUS_FIELD_TYPE' +RED_CAP_SAMPLE_DATE_FIELD_TYPE = "RED_CAP_SAMPLE_DATE_FIELD_TYPE" MAIL_TEMPLATE_CONTEXT_SUBJECT = 'S' MAIL_TEMPLATE_CONTEXT_APPOINTMENT = 'A' diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py index 8329ef604bee1fbbbf48e75bd29648c149ffb350..df68598c5d44561d5408f067455485bddf52eb84 100644 --- a/smash/web/redcap_connector.py +++ b/smash/web/redcap_connector.py @@ -16,7 +16,7 @@ from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, \ REDCAP_BASE_URL_CONFIGURATION_TYPE, CRON_JOB_TIMEOUT, RED_CAP_LANGUAGE_4_FIELD_TYPE, RED_CAP_LANGUAGE_3_FIELD_TYPE, \ RED_CAP_LANGUAGE_2_FIELD_TYPE, RED_CAP_LANGUAGE_1_FIELD_TYPE, RED_CAP_MPOWER_ID_FIELD_TYPE, RED_CAP_DEAD_FIELD_TYPE, \ RED_CAP_SEX_FIELD_TYPE, RED_CAP_DATE_BORN_FIELD_TYPE, RED_CAP_ND_NUMBER_FIELD_TYPE, RED_CAP_VIRUS_FIELD_TYPE, \ - GLOBAL_STUDY_ID + GLOBAL_STUDY_ID, RED_CAP_SAMPLE_DATE_FIELD_TYPE from web.models.inconsistent_subject import InconsistentField, InconsistentSubject from web.models.missing_subject import MissingSubject @@ -81,6 +81,7 @@ class RedcapConnector(object): self.language_4_field = ConfigurationItem.objects.get(type=RED_CAP_LANGUAGE_4_FIELD_TYPE).value self.m_power_id_field = ConfigurationItem.objects.get(type=RED_CAP_MPOWER_ID_FIELD_TYPE).value self.virus_field = ConfigurationItem.objects.get(type=RED_CAP_VIRUS_FIELD_TYPE).value + self.sample_date_field = ConfigurationItem.objects.get(type=RED_CAP_SAMPLE_DATE_FIELD_TYPE).value self.study = Study.objects.get(id=GLOBAL_STUDY_ID) @@ -187,6 +188,7 @@ class RedcapConnector(object): result.append(inconsistent_subject) if appointment_type_to_finish is not None: for visit in red_cap_subject.visits: + smasch_visits = Visit.objects.filter(visit_number=visit.visit_number, subject=subject) smasch_appointments = Appointment.objects.filter(visit__in=smasch_visits, appointment_types=appointment_type_to_finish, @@ -328,7 +330,9 @@ class RedcapConnector(object): visit.virus = False elif row.get(self.virus_field) == "Positive": visit.virus = True - redcap_subject.visits.append(visit) + if self.sample_date_field != "": + if row.get(self.sample_date_field) != "": + redcap_subject.visits.append(visit) result.append(redcap_subject) for i in range(1, 9): query_data = self.get_subject_query_data() @@ -342,13 +346,15 @@ class RedcapConnector(object): for redcap_subject in result: if redcap_subject.nd_number == nd_number: visit = RedcapVisit() - visit.visit_number = i + visit.visit_number = i + self.study.redcap_first_visit_number + 1 if self.virus_field != "": if row.get(self.virus_field) == "Negative": visit.virus = False elif row.get(self.virus_field) == "Positive": visit.virus = True - redcap_subject.visits.append(visit) + if self.sample_date_field != "": + if row.get(self.sample_date_field) != "": + redcap_subject.visits.append(visit) return result @@ -397,6 +403,9 @@ class RedcapConnector(object): if self.virus_field != "": result['fields[' + str(field_number) + ']'] = self.virus_field field_number += 1 + if self.sample_date_field != "": + result['fields[' + str(field_number) + ']'] = self.sample_date_field + field_number += 1 return result def get_language(self, name):