diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py index 6f12fea531b8af6f3e1bb853c2287ec8509e3e24..01ada9e9c12d07b945679485dbcd6aa6dc870d7e 100644 --- a/smash/web/redcap_connector.py +++ b/smash/web/redcap_connector.py @@ -218,40 +218,41 @@ class RedcapConnector(object): smasch_appointment.visit.is_finished = True smasch_appointment.visit.save() if visit.virus is not None or visit.virus_inconclusive: + changes = None if visit.visit_number == 1 and subject.virus_test_1 != visit.virus: - subject.virus_test_1 = visit.virus - subject.virus_test_1_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_1', visit.virus), ('virus_test_1_updated', datetime.datetime.now())] if visit.visit_number == 2 and subject.virus_test_2 != visit.virus: - subject.virus_test_2 = visit.virus - subject.virus_test_2_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_2', visit.virus), ('virus_test_2_updated', datetime.datetime.now())] if visit.visit_number == 3 and subject.virus_test_3 != visit.virus: - subject.virus_test_3 = visit.virus - subject.virus_test_3_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_3', visit.virus), ('virus_test_3_updated', datetime.datetime.now())] if visit.visit_number == 4 and subject.virus_test_4 != visit.virus: - subject.virus_test_4 = visit.virus - subject.virus_test_4_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_4', visit.virus), ('virus_test_4_updated', datetime.datetime.now())] if visit.visit_number == 5 and subject.virus_test_5 != visit.virus: - subject.virus_test_5 = visit.virus - subject.virus_test_5_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_5', visit.virus), ('virus_test_5_updated', datetime.datetime.now())] if visit.visit_number == 1 and subject.virus_test_1_updated is None and visit.virus_inconclusive: - subject.virus_test_1_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_1_updated', datetime.datetime.now())] if visit.visit_number == 2 and subject.virus_test_2_updated is None and visit.virus_inconclusive: - subject.virus_test_2_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_2_updated', datetime.datetime.now())] if visit.visit_number == 3 and subject.virus_test_3_updated is None and visit.virus_inconclusive: - subject.virus_test_3_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_3_updated', datetime.datetime.now())] if visit.visit_number == 4 and subject.virus_test_4_updated is None and visit.virus_inconclusive: - subject.virus_test_4_updated = datetime.datetime.now() - subject.save() + changes = [('virus_test_4_updated', datetime.datetime.now())] if visit.visit_number == 5 and subject.virus_test_5_updated is None and visit.virus_inconclusive: - subject.virus_test_5_updated = datetime.datetime.now() + changes = [('virus_test_5_updated', datetime.datetime.now())] + # + if changes is not None: + for field, new_value in changes: + old_value = getattr(subject, field) + description = u'{} changed from "{}" to "{}"'.format(field, old_value, new_value) + p = Provenance(modified_table=StudySubject._meta.db_table, + modified_table_id=subject.id, + modification_author=self.importer_user, + previous_value=old_value, + new_value=new_value, + modification_description=description, + modified_field=field) + setattr(subject, field, new_value) + p.save() subject.save() return result