From 573dae44d2b9c58220864db95f4c9f0db915b22b Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 14 Dec 2017 11:58:02 +0100 Subject: [PATCH] configuration parameter that determines if study follow up visit should be created automatically --- .../web/migrations/0101_auto_20171214_1047.py | 25 +++++++++++++ smash/web/models/study.py | 5 +++ smash/web/models/visit.py | 10 +++++- smash/web/tests/view/test_visit.py | 35 +++++++++++-------- 4 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 smash/web/migrations/0101_auto_20171214_1047.py diff --git a/smash/web/migrations/0101_auto_20171214_1047.py b/smash/web/migrations/0101_auto_20171214_1047.py new file mode 100644 index 00000000..26e3d574 --- /dev/null +++ b/smash/web/migrations/0101_auto_20171214_1047.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-14 10:47 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0100_auto_20171213_1140'), + ] + + operations = [ + migrations.AddField( + model_name='study', + name='auto_create_follow_up', + field=models.BooleanField(default=True, verbose_name=b'Auto create follow up visit'), + ), + migrations.AlterField( + model_name='worker', + name='email', + field=models.EmailField(blank=True, max_length=254, verbose_name=b'E-mail'), + ), + ] diff --git a/smash/web/models/study.py b/smash/web/models/study.py index 04a8e68e..4501a3be 100644 --- a/smash/web/models/study.py +++ b/smash/web/models/study.py @@ -19,6 +19,11 @@ class Study(models.Model): on_delete=models.CASCADE, ) + auto_create_follow_up = models.BooleanField( + default=True, + verbose_name="Auto create follow up visit" + ) + def __str__(self): return "%s" % self.name diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py index 2922ea8b..f94d30dd 100644 --- a/smash/web/models/visit.py +++ b/smash/web/models/visit.py @@ -51,7 +51,15 @@ class Visit(models.Model): self.is_finished = True self.save() - if (not self.subject.subject.dead) and (not self.subject.resigned): + create_follow_up = True + if self.subject.subject.dead: + create_follow_up = False + elif self.subject.resigned: + create_follow_up = False + elif not self.subject.study.auto_create_follow_up: + create_follow_up = False + + if create_follow_up: 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 diff --git a/smash/web/tests/view/test_visit.py b/smash/web/tests/view/test_visit.py index 5f430b4b..549afd5e 100644 --- a/smash/web/tests/view/test_visit.py +++ b/smash/web/tests/view/test_visit.py @@ -3,12 +3,12 @@ import logging from django.urls import reverse -from web.forms import VisitDetailForm, VisitAddForm +from web.forms import VisitDetailForm from web.models import Visit, MailTemplate from web.models.constants import MAIL_TEMPLATE_CONTEXT_VISIT from web.tests import LoggedInTestCase from web.tests.functions import create_study_subject, create_visit, create_appointment, create_appointment_type, \ - create_language, get_resource_path + create_language, get_resource_path, format_form_field from web.views.notifications import get_today_midnight_date logger = logging.getLogger(__name__) @@ -43,11 +43,7 @@ class VisitViewTests(LoggedInTestCase): visit_detail_form = VisitDetailForm(instance=visit) form_data = {} for key, value in visit_detail_form.initial.items(): - if value is not None: - if isinstance(value, datetime.datetime): - form_data[key] = value.strftime("%Y-%m-%d") - else: - form_data[key] = value + form_data[key] = format_form_field(value) return form_data def test_render_visit_details_with_mail_templates(self): @@ -78,14 +74,7 @@ class VisitViewTests(LoggedInTestCase): visit_count = Visit.objects.all().count() subject = create_study_subject() - form = VisitAddForm() - form_data = {} - for key, value in form.initial.items(): - if value is not None: - if isinstance(value, datetime.datetime): - form_data[key] = value.strftime("%Y-%m-%d") - else: - form_data[key] = value + form_data = self.create_visit_detail_form_data(None) form_data["datetime_begin"] = "2017-01-01" form_data["datetime_end"] = "2017-04-01" @@ -109,6 +98,22 @@ class VisitViewTests(LoggedInTestCase): new_visit = Visit.objects.get(id=visit.id) self.assertTrue(new_visit.is_finished) + self.assertEqual(2, Visit.objects.count()) + + def test_mark_as_finished_with_study_no_follow_up_rule(self): + visit = create_visit() + study = visit.subject.study + study.auto_create_follow_up = False + study.save() + + self.assertFalse(visit.is_finished) + + response = self.client.get(reverse('web.views.visit_mark', args=[visit.id, "finished"])) + self.assertEqual(response.status_code, 302) + + new_visit = Visit.objects.get(id=visit.id) + self.assertTrue(new_visit.is_finished) + self.assertEqual(1, Visit.objects.count()) def test_visit_list(self): create_visit() -- GitLab