Skip to content
Snippets Groups Projects

Feat: support new fields for meeting mode, proposed start date and duration.

Merged Andrea Callia D'Iddio requested to merge new-project-details into master
+ 37
1
from flask_wtf import FlaskForm
from wtforms import BooleanField, SelectField, StringField, TextAreaField
from wtforms import (
BooleanField,
DateField,
IntegerField,
SelectField,
StringField,
TextAreaField,
validators,
)
from wtforms.validators import DataRequired, ValidationError
@@ -9,6 +17,18 @@ class ProjectForm(FlaskForm):
is_student_proposal = BooleanField("Student Proposal", default=False)
on_behalf = StringField("from", default=None)
category = SelectField("Category", coerce=str)
meeting_mode = SelectField(
"Meeting type",
choices=[("", "N/A"), ("remote", "Remote"), ("in-person", "In person")],
coerce=str,
validators=[validators.Optional()],
)
proposed_start_date = DateField(
"Proposed start date", validators=[validators.Optional()]
)
duration_in_weeks = IntegerField(
"Duration (in weeks)", validators=[validators.Optional()]
)
def validate_on_behalf(self, field):
if self.is_student_proposal.data and not field.data:
@@ -20,3 +40,19 @@ class ProjectForm(FlaskForm):
if field == self.category and field.data == "":
self.category.errors += "Please choose a category for the project."
raise ValidationError("Please choose a category for the project.")
def validate_meeting_mode(self, field):
if field == self.category and field.data not in ["", "remote", "in-person"]:
self.meeting_mode.errors += "Invalid meeting mode."
raise ValidationError(
"The meeting mode for the project is invalid. Choose a valid value or leave it blank."
)
def validate_duration(self, field):
if all(
(field == self.duration_in_weeks, field.data is not None, field.data < 0)
):
self.meeting_mode.errors += "Invalid duration."
raise ValidationError(
"The duration for the project is invalid. Choose a valid value or leave it blank."
)
Loading