diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py index e11b52d74a7b54d2e837369b839e68a87276be31..1f491319e8f87585433ee7c1129f1b48c152ef33 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 835b7a66569ddbed84abf6212822e7dcf6ae8bee..f4a231344474b3eb0b946ea9cb0e8b5dbc6f65a2 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))