Skip to content
Snippets Groups Projects
Commit f856763c authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch 'redcap-sync' into 'master'

there must be date in the visit to mark is as finished when importing from redcap

See merge request NCER-PD/scheduling-system!242
parents 0fa68859 2f6ee01f
No related branches found
No related tags found
1 merge request!242there must be date in the visit to mark is as finished when importing from redcap
Pipeline #25346 passed
# -*- 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),
]
...@@ -62,6 +62,7 @@ RED_CAP_SEX_FIELD_TYPE = 'RED_CAP_SEX_FIELD_TYPE' ...@@ -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_DATE_BORN_FIELD_TYPE = 'RED_CAP_DATE_BORN_FIELD_TYPE'
RED_CAP_ND_NUMBER_FIELD_TYPE = 'RED_CAP_ND_NUMBER_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_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_SUBJECT = 'S'
MAIL_TEMPLATE_CONTEXT_APPOINTMENT = 'A' MAIL_TEMPLATE_CONTEXT_APPOINTMENT = 'A'
......
...@@ -16,7 +16,7 @@ from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, \ ...@@ -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, \ 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_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, \ 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.inconsistent_subject import InconsistentField, InconsistentSubject
from web.models.missing_subject import MissingSubject from web.models.missing_subject import MissingSubject
...@@ -81,6 +81,7 @@ class RedcapConnector(object): ...@@ -81,6 +81,7 @@ class RedcapConnector(object):
self.language_4_field = ConfigurationItem.objects.get(type=RED_CAP_LANGUAGE_4_FIELD_TYPE).value 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.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.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) self.study = Study.objects.get(id=GLOBAL_STUDY_ID)
...@@ -187,6 +188,7 @@ class RedcapConnector(object): ...@@ -187,6 +188,7 @@ class RedcapConnector(object):
result.append(inconsistent_subject) result.append(inconsistent_subject)
if appointment_type_to_finish is not None: if appointment_type_to_finish is not None:
for visit in red_cap_subject.visits: for visit in red_cap_subject.visits:
smasch_visits = Visit.objects.filter(visit_number=visit.visit_number, subject=subject) smasch_visits = Visit.objects.filter(visit_number=visit.visit_number, subject=subject)
smasch_appointments = Appointment.objects.filter(visit__in=smasch_visits, smasch_appointments = Appointment.objects.filter(visit__in=smasch_visits,
appointment_types=appointment_type_to_finish, appointment_types=appointment_type_to_finish,
...@@ -328,7 +330,9 @@ class RedcapConnector(object): ...@@ -328,7 +330,9 @@ class RedcapConnector(object):
visit.virus = False visit.virus = False
elif row.get(self.virus_field) == "Positive": elif row.get(self.virus_field) == "Positive":
visit.virus = True 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) result.append(redcap_subject)
for i in range(1, 9): for i in range(1, 9):
query_data = self.get_subject_query_data() query_data = self.get_subject_query_data()
...@@ -342,13 +346,15 @@ class RedcapConnector(object): ...@@ -342,13 +346,15 @@ class RedcapConnector(object):
for redcap_subject in result: for redcap_subject in result:
if redcap_subject.nd_number == nd_number: if redcap_subject.nd_number == nd_number:
visit = RedcapVisit() visit = RedcapVisit()
visit.visit_number = i visit.visit_number = i + self.study.redcap_first_visit_number + 1
if self.virus_field != "": if self.virus_field != "":
if row.get(self.virus_field) == "Negative": if row.get(self.virus_field) == "Negative":
visit.virus = False visit.virus = False
elif row.get(self.virus_field) == "Positive": elif row.get(self.virus_field) == "Positive":
visit.virus = True 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 return result
...@@ -397,6 +403,9 @@ class RedcapConnector(object): ...@@ -397,6 +403,9 @@ class RedcapConnector(object):
if self.virus_field != "": if self.virus_field != "":
result['fields[' + str(field_number) + ']'] = self.virus_field result['fields[' + str(field_number) + ']'] = self.virus_field
field_number += 1 field_number += 1
if self.sample_date_field != "":
result['fields[' + str(field_number) + ']'] = self.sample_date_field
field_number += 1
return result return result
def get_language(self, name): def get_language(self, name):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment