From 95c8fe6d0f387af0d84a1148e610424690d32269 Mon Sep 17 00:00:00 2001
From: Carlos Vega <carlos.vega@uni.lu>
Date: Wed, 21 Nov 2018 10:34:40 +0100
Subject: [PATCH] added check of default_visit_duration_in_months

---
 smash/web/forms/study_forms.py | 34 ++++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/smash/web/forms/study_forms.py b/smash/web/forms/study_forms.py
index 916f2316..c0bb377f 100644
--- a/smash/web/forms/study_forms.py
+++ b/smash/web/forms/study_forms.py
@@ -3,6 +3,9 @@ import logging
 from django.forms import ModelForm, ValidationError
 from web.models import Study, StudyNotificationParameters, StudyColumns, StudySubject
 
+import datetime
+from dateutil.relativedelta import relativedelta
+
 logger = logging.getLogger(__name__)
 
 
@@ -11,15 +14,34 @@ class StudyEditForm(ModelForm):
     def __init__(self, *args, **kwargs):
         super(StudyEditForm, self).__init__(*args, **kwargs)
 
-    def clean_nd_number_study_subject_regex(self):
-        nd_number_study_subject_regex = self.cleaned_data.get(
-            'nd_number_study_subject_regex')
+    def clean(self):
+        cleaned_data = super(StudyEditForm, self).clean()
+
+        #check regex
+        nd_number_study_subject_regex = cleaned_data.get('nd_number_study_subject_regex')
 
         if StudySubject.check_nd_number_regex(nd_number_study_subject_regex) == False:
-            raise ValidationError(
-                'Please enter a valid nd_number_study_subject_regex regex.')
+            self.add_error('nd_number_study_subject_regex', 'Please enter a valid nd_number_study_subject_regex regex.')
+
+        #check default_visit_duration_in_months
+        t = datetime.datetime.today()
+
+        visit_duration_in_months = cleaned_data.get('default_visit_duration_in_months')
+        visit_duration = relativedelta(months=int(visit_duration_in_months))
+
+        control_follow_up = cleaned_data.get('default_delta_time_for_control_follow_up')
+        patient_follow_up = cleaned_data.get('default_delta_time_for_patient_follow_up')
+        units = cleaned_data.get('default_delta_time_for_follow_up_units')
+
+        control_delta = relativedelta(**{units: control_follow_up})
+        patient_delta = relativedelta(**{units: patient_follow_up})
+        
+        #relative time delta has no __cmp__ method, so we add them to a datetime
+        min_delta_time = min((t + control_delta), (t + patient_delta))
+        if (t+visit_duration) > min_delta_time:
+            self.add_error('default_visit_duration_in_months', 'Please enter a valid "duration of the visits". It must be shorter than the time difference between patient and control visits.')
 
-        return nd_number_study_subject_regex
+        return cleaned_data
 
     class Meta:
         model = Study
-- 
GitLab