summaryrefslogtreecommitdiffstats
path: root/tools/pharos-dashboard/dashboard/forms/booking_form.py
blob: 9cf8048fba8018dc0bb6ba50336e25d941940483 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from dashboard.models import Booking
import django.forms as forms
from django.utils.translation import ugettext_lazy as _


class BookingForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = ['start_date_time', 'end_date_time', 'purpose', 'booking_id']

        PURPOSE = {
            'id': 'purposefield',
            'type': 'text',
            'placeholder': 'Booking purpose',
        }

        widgets = {
            'purpose': forms.TextInput(attrs=PURPOSE),
        }

    # DATETIMEFORMAT should be equivalent to the moment.js format string that datetimepicker is
    # using ('YYYY-MM-DD HH:00 ZZ'). The string is used to create a timezone aware datetime object
    DATETIMEFORMAT = '%Y-%m-%d %H:%M %z'
    start_date_time = forms.DateTimeField(input_formats=[DATETIMEFORMAT, ], label='Start')
    end_date_time = forms.DateTimeField(input_formats=[DATETIMEFORMAT, ], label='End')

    # we need this to determine if we create a new booking or change an existing booking
    booking_id = forms.IntegerField(widget=forms.HiddenInput, required=False)

    def clean(self):
        cleaned_data = super(BookingForm, self).clean()
        if 'start_date_time' not in cleaned_data or 'end_date_time' not in cleaned_data:
            raise forms.ValidationError('Date Missing', code='missing_date')
        if cleaned_data['start_date_time'] >= cleaned_data['end_date_time']:
            raise forms.ValidationError(
                'Start date is after end date', code='invalid_dates')
        return cleaned_data