Newer
Older
from django import forms
from django.forms import ModelForm, Form
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))
DATEPICKER_DATE_ATTRS = {
'class':'datepicker',
'data-date-format':'yyyy-mm-dd',
'data-date-orientation': 'bottom'
}
DATETIMEPICKER_DATE_ATTRS = {
'class':'datetimepicker',
'data-date-format':'Y-MM-DD HH:mm',
}
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.get('screening_number',''):
self.add_error('nd_number', "ND number already in use")
date_born = forms.DateField(label="Date of birth",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
datetime_contact_reminder = forms.DateField(label="Contact on",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
)
def clean(self):
subject = self.cleaned_data
subjects_from_db = Subject.objects.filter(screening_number=subject.get('screening_number',''))
if len(subjects_from_db)>0:
self.add_error('screening_number', "Screening number already in use")
validate_subject_nd_number(self)
class SubjectDetailForm(ModelForm):
class Meta:
model = Subject
fields = '__all__'
datetime_contact_reminder = forms.DateField(label="Contact on",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
)
date_born = forms.DateField(label="Date of birth",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
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__'
datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM)',
widget=forms.DateTimeInput(DATETIMEPICKER_DATE_ATTRS)
)
class AppointmentEditForm(ModelForm):
class Meta:
model = Appointment
fields = '__all__'
datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM)',
widget=forms.DateTimeInput(DATETIMEPICKER_DATE_ATTRS)
)
class AppointmentAddForm(ModelForm):
class Meta:
model = Appointment
exclude = ['status']
datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM)',
widget=forms.DateTimeInput(DATETIMEPICKER_DATE_ATTRS)
)
class VisitDetailForm(ModelForm):
datetime_begin = forms.DateField(label="Visit begins on",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d")
)
datetime_end = forms.DateField(label="Visit ends on",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d")
post_mail_sent = forms.RadioSelect()
subject = forms.ModelChoiceField(queryset=Subject.objects.order_by('last_name','first_name'))
datetime_begin = forms.DateField(label="Visit begins on",
widget=forms.TextInput(attrs=DATEPICKER_DATE_ATTRS)
)
datetime_end = forms.DateField(label="Visit ends on",
widget=forms.TextInput(attrs=DATEPICKER_DATE_ATTRS)
print self.cleaned_data['appointment_types']
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")
class KitRequestForm(Form):
start_date = forms.DateField(label="From date",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
)
end_date = forms.DateField(label="End date",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
required=False
)