Skip to content
Snippets Groups Projects
forms.py 5.32 KiB
Newer Older
from django.forms import ModelForm, Form
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))
Jacek Lebioda's avatar
Jacek Lebioda committed
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")
class SubjectAddForm(ModelForm):
Jacek Lebioda's avatar
Jacek Lebioda committed
    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
    )

    class Meta:
        model = Subject
        fields = '__all__'
    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__'

class SubjectEditForm(ModelForm):

    datetime_contact_reminder = forms.DateField(label="Contact on",
        widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
        required=False
    )
Jacek Lebioda's avatar
Jacek Lebioda committed
    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)

    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__'
    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)
    )
Jacek Lebioda's avatar
Jacek Lebioda committed

class AppointmentAddForm(ModelForm):
    class Meta:
        model = Appointment
    datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM)',
        widget=forms.DateTimeInput(DATETIMEPICKER_DATE_ATTRS)
    )
Jacek Lebioda's avatar
Jacek Lebioda committed

class VisitDetailForm(ModelForm):
Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_begin = forms.DateField(label="Visit begins on",
Jacek Lebioda's avatar
Jacek Lebioda committed
        widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d")
Jacek Lebioda's avatar
Jacek Lebioda committed
    )
    datetime_end = forms.DateField(label="Visit ends on",
Jacek Lebioda's avatar
Jacek Lebioda committed
        widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d")
    post_mail_sent = forms.RadioSelect()

        model = Visit
Jacek Lebioda's avatar
Jacek Lebioda committed
        exclude = ['is_finished']
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed

class VisitAddForm(ModelForm):
    subject = forms.ModelChoiceField(queryset=Subject.objects.order_by('last_name','first_name'))
Jacek Lebioda's avatar
Jacek Lebioda committed
    datetime_begin = forms.DateField(label="Visit begins on",
Jacek Lebioda's avatar
Jacek Lebioda committed
        widget=forms.TextInput(attrs=DATEPICKER_DATE_ATTRS)
Jacek Lebioda's avatar
Jacek Lebioda committed
    )
    datetime_end = forms.DateField(label="Visit ends on",
Jacek Lebioda's avatar
Jacek Lebioda committed
        widget=forms.TextInput(attrs=DATEPICKER_DATE_ATTRS)
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
    class Meta:
        model = Visit
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
        exclude = ['is_finished']

    def clean(self):
        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
    )