Skip to content
Snippets Groups Projects
forms.py 4.53 KiB
Newer Older
from django.forms import ModelForm
Jacek Lebioda's avatar
Jacek Lebioda committed
from datetime import datetime
"""
Jacek Lebioda's avatar
Jacek Lebioda committed
Possible redundancy, but if need arises, contents of forms can be easily customized
Jacek Lebioda's avatar
Jacek Lebioda committed
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):
Jacek Lebioda's avatar
Jacek Lebioda committed
    date_born = forms.DateField(label='Date of birth',
        required = False,
Jacek Lebioda's avatar
Jacek Lebioda committed
        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):
Jacek Lebioda's avatar
Jacek Lebioda committed
    date_born = forms.DateField(label='Date of birth',
Jacek Lebioda's avatar
Jacek Lebioda committed
        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
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__'

Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')

class AppointmentAddForm(ModelForm):
    class Meta:
        model = Appointment
        exclude = ['is_finished']

Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')

class VisitDetailForm(ModelForm):
Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_begin = forms.DateField(label="Visit begins on",
        widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
Jacek Lebioda's avatar
Jacek Lebioda committed
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
        model = Visit
Jacek Lebioda's avatar
Jacek Lebioda committed
        exclude = ['is_finished']
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed

class VisitAddForm(ModelForm):
Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_begin = forms.DateField(label="Visit begins on",
        widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
Jacek Lebioda's avatar
Jacek Lebioda committed
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=FUTURE_YEAR_CHOICES)
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
    class Meta:
        model = Visit
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
        exclude = ['is_finished']

    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")