from django import forms from django.forms import ModelForm from .models import * from datetime import datetime """ 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") class SubjectAddForm(ModelForm): date_born = forms.DateField(label='Date of birth', required = False, widget=forms.SelectDateWidget(years=YEAR_CHOICES) ) class Meta: model = Subject fields = '__all__' 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__' class SubjectEditForm(ModelForm): 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) class Meta: 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) ) class Meta: model = Visit exclude = ['is_finished'] class VisitAddForm(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) ) class Meta: model = Visit exclude = ['is_finished']