From b29b695a49c7a8e3648f59fcd2c93091e453a8bd Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 30 Oct 2017 15:08:08 +0100 Subject: [PATCH] follow up visit start date is computed based on the first visit (not previous) --- smash/web/models/visit.py | 9 +++++--- smash/web/tests/models/test_visit.py | 33 +++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py index e11b52d7..1f491319 100644 --- a/smash/web/models/visit.py +++ b/smash/web/models/visit.py @@ -52,11 +52,14 @@ class Visit(models.Model): self.save() if (not self.subject.dead) and (not self.subject.resigned): - visit_started = self.datetime_begin + visit_started = Visit.objects.filter(subject=self.subject).filter(visit_number=1)[0].datetime_begin + follow_up_number = Visit.objects.filter(subject=self.subject).count() + 1 - time_to_next_visit = datetime.timedelta(days=365) + delta_days = 365 if self.subject.type == SUBJECT_TYPE_CHOICES_CONTROL: - time_to_next_visit = datetime.timedelta(days=365 * 3 + 366) + delta_days = 365 * 3 + 366 + + time_to_next_visit = datetime.timedelta(days=delta_days * (follow_up_number - 1)) Visit.objects.create( subject=self.subject, diff --git a/smash/web/tests/models/test_visit.py b/smash/web/tests/models/test_visit.py index 835b7a66..f4a23134 100644 --- a/smash/web/tests/models/test_visit.py +++ b/smash/web/tests/models/test_visit.py @@ -1,7 +1,11 @@ +import datetime + from django.test import TestCase -from web.tests.functions import create_subject, create_visit +from web.models.constants import SUBJECT_TYPE_CHOICES_PATIENT from web.models import Visit +from web.tests.functions import create_subject, create_visit +from web.views.notifications import get_today_midnight_date class VisitModelTests(TestCase): @@ -36,6 +40,33 @@ class VisitModelTests(TestCase): visit_count = Visit.objects.filter(subject=subject).count() self.assertEquals(1, visit_count) + def test_mark_as_finished_for_follow_up_visit(self): + subject = create_subject() + subject.type = SUBJECT_TYPE_CHOICES_PATIENT + subject.save() + visit = create_visit(subject) + + visit.mark_as_finished() + + follow_up_visit = Visit.objects.filter(subject=subject).filter(visit_number=2)[0] + follow_up_visit.datetime_begin = visit.datetime_begin + datetime.timedelta(days=133) + follow_up_visit.datetime_end = visit.datetime_begin + datetime.timedelta(days=170) + follow_up_visit.save() + + follow_up_visit.mark_as_finished() + + visit_count = Visit.objects.filter(subject=subject).count() + self.assertEquals(3, visit_count) + + new_follow_up = Visit.objects.filter(subject=subject).filter(visit_number=3)[0] + + # check if follow up date is based on the first visit date + self.assertTrue(visit.datetime_begin + datetime.timedelta(days=365 * 2 - 1) < new_follow_up.datetime_begin) + def test_visit_to_string(self): visit = create_visit(create_subject()) self.assertIsNotNone(str(visit)) + + def test_visit_to_unicode(self): + visit = create_visit(create_subject()) + self.assertIsNotNone(unicode(visit)) -- GitLab