Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
forms.py 3.63 KiB
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))


class SubjectAddForm(ModelForm):
    date_born = forms.DateField(label='Date of birth',
        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):
            self.add_error('screening_number', "Screening number already in use")

    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',
        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_foo_field(self):
        instance = getattr(self, 'instance', None)
        if instance and instance.id:
            return instance.screening_number
        else:
            return self.cleaned_data['screening_number']

    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=YEAR_CHOICES)
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )

    class Meta:
        model = Visit
        exclude = ['is_finished']

class VisitAddForm(ModelForm):
    datetime_begin = forms.DateField(label="Visit begins on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )
    class Meta:
        model = Visit
        exclude = ['is_finished']