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