From 2f6ee01fb9250926847130eede02d48a59afb323 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 16 Apr 2020 16:17:27 +0200 Subject: [PATCH] there must be date in the visit to mark is as finished when importing from redcap --- ...onfigurationitem_email_items_for_redcap.py | 33 +++++++++++++++++++ smash/web/models/constants.py | 1 + smash/web/redcap_connector.py | 17 +++++++--- 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 smash/web/migrations/0164_configurationitem_email_items_for_redcap.py 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 00000000..efa3e50f --- /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 b512e714..049ea707 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 8329ef60..df68598c 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): -- GitLab