40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
from flask_wtf import FlaskForm
|
|
from wtforms import SelectField, StringField, TextAreaField, IntegerField, SubmitField, DateTimeLocalField
|
|
from wtforms.validators import DataRequired, Length, NumberRange, Optional, ValidationError
|
|
from datetime import datetime, timedelta
|
|
|
|
class ReservationForm(FlaskForm):
|
|
classroom_id = SelectField('Classroom', coerce=int, validators=[DataRequired()])
|
|
commission_id = SelectField('Commission/Subject', coerce=int, validators=[DataRequired()])
|
|
start_time = DateTimeLocalField('Start Time', format='%Y-%m-%dT%H:%M', validators=[DataRequired()])
|
|
end_time = DateTimeLocalField('End Time', format='%Y-%m-%dT%H:%M', validators=[DataRequired()])
|
|
purpose = StringField('Purpose', validators=[
|
|
DataRequired(),
|
|
Length(min=3, max=500)
|
|
])
|
|
expected_attendees = IntegerField('Expected Attendees', validators=[
|
|
DataRequired(),
|
|
NumberRange(min=1, max=500)
|
|
])
|
|
notes = TextAreaField('Notes', validators=[
|
|
Optional(),
|
|
Length(max=1000)
|
|
])
|
|
submit = SubmitField('Make Reservation')
|
|
|
|
def validate_end_time(self, field):
|
|
if field.data <= self.start_time.data:
|
|
raise ValidationError('End time must be after start time.')
|
|
|
|
# Check if duration is reasonable (max 8 hours)
|
|
if field.data > self.start_time.data + timedelta(hours=8):
|
|
raise ValidationError('Reservation cannot exceed 8 hours.')
|
|
|
|
def validate_start_time(self, field):
|
|
# Don't allow reservations in the past
|
|
if field.data < datetime.now():
|
|
raise ValidationError('Start time cannot be in the past.')
|
|
|
|
# Don't allow reservations too far in the future (max 3 months)
|
|
if field.data > datetime.now() + timedelta(days=90):
|
|
raise ValidationError('Reservations cannot be made more than 3 months in advance.') |