From cd05c6fcf8a19bd980ffca6d850fa7fc558c00ed Mon Sep 17 00:00:00 2001
From: Carlos Vega <carlos.vega@uni.lu>
Date: Tue, 13 Nov 2018 13:57:24 +0100
Subject: [PATCH] default visit duration can now be set on the study settings

---
 ..._study_default_visit_duration_in_months.py | 21 +++++++++++++++++++
 smash/web/models/study.py                     |  6 ++++++
 smash/web/static/js/visit.js                  |  8 ++++---
 smash/web/templates/visits/add.html           |  3 ++-
 smash/web/templates/visits/details.html       |  3 ++-
 smash/web/views/visit.py                      |  1 +
 6 files changed, 37 insertions(+), 5 deletions(-)
 create mode 100644 smash/web/migrations/0132_study_default_visit_duration_in_months.py

diff --git a/smash/web/migrations/0132_study_default_visit_duration_in_months.py b/smash/web/migrations/0132_study_default_visit_duration_in_months.py
new file mode 100644
index 00000000..522e672e
--- /dev/null
+++ b/smash/web/migrations/0132_study_default_visit_duration_in_months.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.5 on 2018-11-13 10:05
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0131_study_default_voucher_expiration_in_months'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='study',
+            name='default_visit_duration_in_months',
+            field=models.IntegerField(default=3, validators=[django.core.validators.MinValueValidator(1)], verbose_name=b'Default duration of the visits in months'),
+        ),
+    ]
diff --git a/smash/web/models/study.py b/smash/web/models/study.py
index e89ac16f..5b9d0a74 100644
--- a/smash/web/models/study.py
+++ b/smash/web/models/study.py
@@ -44,6 +44,12 @@ class Study(models.Model):
         validators=[MinValueValidator(1)]
     )
 
+    default_visit_duration_in_months = models.IntegerField(
+        verbose_name='Default duration of the visits in months',
+        default=3,
+        validators=[MinValueValidator(1)]
+    )
+
     def check_nd_number(self, nd_number):
         regex = re.compile(self.nd_number_study_subject_regex)
         return regex.match(nd_number) is not None
diff --git a/smash/web/static/js/visit.js b/smash/web/static/js/visit.js
index a2636ed2..1e5aa220 100644
--- a/smash/web/static/js/visit.js
+++ b/smash/web/static/js/visit.js
@@ -1,10 +1,12 @@
-function visit_dates_behaviour(startDateInput, endDateInput) {
+function visit_dates_behaviour(startDateInput, endDateInput, default_visit_duration) {
     $(startDateInput).change(function () {
         var object = $(this);
         try {
             var date = new Date(object.val());
-            date.setMonth(date.getMonth() + 3);
-            $(endDateInput).val(date.toISOString().substring(0, 10));
+            date.setMonth(date.getMonth() + default_visit_duration);
+            if($(endDateInput).val() == ""){
+                $(endDateInput).val(date.toISOString().substring(0, 10));
+            }
         } catch (err) {
             //there was a problematic date to process
         }
diff --git a/smash/web/templates/visits/add.html b/smash/web/templates/visits/add.html
index 749641be..4c93ee49 100644
--- a/smash/web/templates/visits/add.html
+++ b/smash/web/templates/visits/add.html
@@ -70,7 +70,8 @@
 
 <script src="{% static 'js/visit.js' %}"></script>
 <script>
-    visit_dates_behaviour($("[name='datetime_begin']"),$("[name='datetime_end']"));
+    var default_visit_duration_in_months = parseInt("{{default_visit_duration}}");
+    visit_dates_behaviour($("[name='datetime_begin']"), $("[name='datetime_end']"), default_visit_duration_in_months);
 </script>
 
 {% include "includes/datepicker.js.html" %}
diff --git a/smash/web/templates/visits/details.html b/smash/web/templates/visits/details.html
index 62069efa..08a133af 100644
--- a/smash/web/templates/visits/details.html
+++ b/smash/web/templates/visits/details.html
@@ -221,7 +221,8 @@
     <script src="{% static 'AdminLTE/plugins/datatables/dataTables.bootstrap.min.js' %}"></script>
     <script src="{% static 'js/visit.js' %}"></script>
     <script>
-        visit_dates_behaviour($("[name='datetime_begin']"), $("[name='datetime_end']"));
+        var default_visit_duration_in_months = parseInt("{{default_visit_duration}}");
+        visit_dates_behaviour($("[name='datetime_begin']"), $("[name='datetime_end']"), default_visit_duration_in_months);
     </script>
 
     {% include "includes/datepicker.js.html" %}
diff --git a/smash/web/views/visit.py b/smash/web/views/visit.py
index 96dde765..585e40c3 100644
--- a/smash/web/views/visit.py
+++ b/smash/web/views/visit.py
@@ -74,6 +74,7 @@ def visit_details(request, id):
     languages.extend(study_subject.subject.languages.all())
 
     return wrap_response(request, 'visits/details.html', {
+        'default_visit_duration' : study_subject.study.default_visit_duration_in_months,
         'visit_form': visit_form,
         'study_subject_form': study_subject_form,
         'subject_form': subject_form,
-- 
GitLab