diff options
Diffstat (limited to 'tools/pharos-dashboard/dashboard/forms/booking_form.py')
-rw-r--r-- | tools/pharos-dashboard/dashboard/forms/booking_form.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/pharos-dashboard/dashboard/forms/booking_form.py b/tools/pharos-dashboard/dashboard/forms/booking_form.py new file mode 100644 index 00000000..9cf8048f --- /dev/null +++ b/tools/pharos-dashboard/dashboard/forms/booking_form.py @@ -0,0 +1,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 |