Newer
Older
from django import forms
from .models import *
Possible redundancy, but if need arises, contents of forms can be easily customized
CURRENT_YEAR = datetime.now().year
YEAR_CHOICES=tuple(range(CURRENT_YEAR,CURRENT_YEAR - 120, -1))
FUTURE_YEAR_CHOICES=tuple(range(CURRENT_YEAR,CURRENT_YEAR + 5, 1))
def validate_subject_nd_number(self):
subject = self.cleaned_data
if subject['nd_number']!="":
subjects_from_db = Subject.objects.filter(nd_number=subject['nd_number'])
if (len(subjects_from_db)>0):
if (subjects_from_db[0].screening_number!= subject['screening_number']):
self.add_error('nd_number', "ND number already in use")
date_born = forms.DateField(label='Date of birth',
widget=forms.SelectDateWidget(years=YEAR_CHOICES)
)
def clean(self):
subject = self.cleaned_data
subjects_from_db = Subject.objects.filter(screening_number=subject['screening_number'])
if len(subjects_from_db)>0:
self.add_error('screening_number', "Screening number already in use")
validate_subject_nd_number(self)
def get_new_screening_number(self):
result = 1;
numbers = Subject.objects.values_list('screening_number')
for number_row in numbers:
try:
id = int(number_row[0])
result = max(result, id+1)
except:
pass
return result
def clean_screening_number(self):
if self.cleaned_data['screening_number']=="":
self.cleaned_data['screening_number'] = self.get_new_screening_number()
return self.cleaned_data['screening_number'];
class SubjectDetailForm(ModelForm):
class Meta:
model = Subject
fields = '__all__'
date_born = forms.DateField(label='Date of birth',
required = False,
widget=forms.SelectDateWidget(years=YEAR_CHOICES)
)
def __init__(self, *args, **kwargs):
super(SubjectEditForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.id:
self.fields['screening_number'].widget.attrs['readonly'] = True
def clean_screening_number(self):
instance = getattr(self, 'instance', None)
if instance and instance.id:
return instance.screening_number
else:
return self.cleaned_data['screening_number']
def clean(self):
validate_subject_nd_number(self)
model = Subject
fields = '__all__'
class WorkerAddForm(ModelForm):
class Meta:
model = Worker
exclude = ['appointments']
class WorkerDetailForm(ModelForm):
class Meta:
model = Worker
fields = '__all__'
class WorkerEditForm(ModelForm):
class Meta:
model = Worker
fields = '__all__'
class AppointmentDetailForm(ModelForm):
class Meta:
model = Appointment
fields = '__all__'
class AppointmentEditForm(ModelForm):
class Meta:
model = Appointment
fields = '__all__'
datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')
class AppointmentAddForm(ModelForm):
class Meta:
model = Appointment
exclude = ['is_finished']
datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')
class VisitDetailForm(ModelForm):
datetime_begin = forms.DateField(label="Visit begins on",
widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
)
datetime_end = forms.DateField(label="Visit ends on",
widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
datetime_begin = forms.DateField(label="Visit begins on",
widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
)
datetime_end = forms.DateField(label="Visit ends on",
widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
def clean(self):
if (self.cleaned_data['datetime_begin']>=self.cleaned_data['datetime_end']):
self.add_error('datetime_begin', "Start date must be before end date")
self.add_error('datetime_end', "Start date must be before end date")