commit
c55593f26e
@ -1,11 +1,11 @@
|
|||||||
from flask_wtf import FlaskForm
|
from .forms import BaseForm
|
||||||
from wtforms.fields import StringField, TextAreaField, FieldList
|
from wtforms.fields import StringField, TextAreaField, FieldList
|
||||||
from wtforms.validators import Required
|
from wtforms.validators import Required
|
||||||
from atst.forms.validators import ListItemRequired, ListItemsUnique
|
from atst.forms.validators import ListItemRequired, ListItemsUnique
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class ApplicationForm(FlaskForm):
|
class ApplicationForm(BaseForm):
|
||||||
name = StringField(
|
name = StringField(
|
||||||
label=translate("forms.application.name_label"), validators=[Required()]
|
label=translate("forms.application.name_label"), validators=[Required()]
|
||||||
)
|
)
|
||||||
|
@ -2,13 +2,13 @@ from wtforms.fields.html5 import EmailField, TelField
|
|||||||
from wtforms.fields import StringField, TextAreaField
|
from wtforms.fields import StringField, TextAreaField
|
||||||
from wtforms.validators import Email, Optional
|
from wtforms.validators import Email, Optional
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from .validators import Name, PhoneNumber
|
from .validators import Name, PhoneNumber
|
||||||
|
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class CCPOReviewForm(CacheableForm):
|
class CCPOReviewForm(BaseForm):
|
||||||
comment = TextAreaField(
|
comment = TextAreaField(
|
||||||
translate("forms.ccpo_review.comment_label"),
|
translate("forms.ccpo_review.comment_label"),
|
||||||
description=translate("forms.ccpo_review.comment_description"),
|
description=translate("forms.ccpo_review.comment_description"),
|
||||||
|
@ -5,12 +5,12 @@ from wtforms.validators import Required
|
|||||||
|
|
||||||
from atst.forms.validators import PhoneNumber
|
from atst.forms.validators import PhoneNumber
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from .data import REQUIRED_DISTRIBUTIONS
|
from .data import REQUIRED_DISTRIBUTIONS
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class DD254Form(CacheableForm):
|
class DD254Form(BaseForm):
|
||||||
certifying_official = StringField(
|
certifying_official = StringField(
|
||||||
translate("forms.dd_254.certifying_official.label"),
|
translate("forms.dd_254.certifying_official.label"),
|
||||||
description=translate("forms.dd_254.certifying_official.description"),
|
description=translate("forms.dd_254.certifying_official.description"),
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
from flask_wtf import FlaskForm
|
|
||||||
from wtforms.validators import Required
|
from wtforms.validators import Required
|
||||||
|
|
||||||
|
from .forms import BaseForm
|
||||||
from atst.forms.fields import SelectField
|
from atst.forms.fields import SelectField
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
from .data import PORTFOLIO_ROLES
|
from .data import PORTFOLIO_ROLES
|
||||||
|
|
||||||
|
|
||||||
class EditMemberForm(FlaskForm):
|
class EditMemberForm(BaseForm):
|
||||||
# This form also accepts a field for each environment in each application
|
# This form also accepts a field for each environment in each application
|
||||||
# that the user is a member of
|
# that the user is a member of
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ from wtforms.fields import RadioField, StringField
|
|||||||
from wtforms.validators import Email, DataRequired, Optional
|
from wtforms.validators import Email, DataRequired, Optional
|
||||||
|
|
||||||
from .fields import SelectField
|
from .fields import SelectField
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from .data import SERVICE_BRANCHES
|
from .data import SERVICE_BRANCHES
|
||||||
from atst.models.user import User
|
from atst.models.user import User
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
@ -84,7 +84,7 @@ def inherit_user_field(field_name):
|
|||||||
return inherit_field(USER_FIELDS[field_name], required=required)
|
return inherit_field(USER_FIELDS[field_name], required=required)
|
||||||
|
|
||||||
|
|
||||||
class EditUserForm(CacheableForm):
|
class EditUserForm(BaseForm):
|
||||||
|
|
||||||
first_name = inherit_user_field("first_name")
|
first_name = inherit_user_field("first_name")
|
||||||
last_name = inherit_user_field("last_name")
|
last_name = inherit_user_field("last_name")
|
||||||
|
@ -3,24 +3,26 @@ from flask import current_app, request as http_request
|
|||||||
|
|
||||||
from atst.utils.flash import formatted_flash as flash
|
from atst.utils.flash import formatted_flash as flash
|
||||||
|
|
||||||
|
|
||||||
class ValidatedForm(FlaskForm):
|
|
||||||
EMPTY_LIST_FIELD = ["", None]
|
EMPTY_LIST_FIELD = ["", None]
|
||||||
|
|
||||||
def perform_extra_validation(self, *args, **kwargs):
|
|
||||||
"""Performs any applicable extra validation. Must
|
class BaseForm(FlaskForm):
|
||||||
return True if the form is valid or False otherwise."""
|
def __init__(self, formdata=None, **kwargs):
|
||||||
return True
|
# initialize the form with data from the cache
|
||||||
|
formdata = formdata or {}
|
||||||
|
cached_data = current_app.form_cache.from_request(http_request)
|
||||||
|
cached_data.update(formdata)
|
||||||
|
super().__init__(cached_data, **kwargs)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def data(self):
|
def data(self):
|
||||||
|
# remove 'csrf_token' key/value pair
|
||||||
|
# remove empty strings and None from list fields
|
||||||
_data = super().data
|
_data = super().data
|
||||||
|
_data.pop("csrf_token", None)
|
||||||
for field in _data:
|
for field in _data:
|
||||||
if _data[field].__class__.__name__ == "list":
|
if _data[field].__class__.__name__ == "list":
|
||||||
_data[field] = [
|
_data[field] = [el for el in _data[field] if el not in EMPTY_LIST_FIELD]
|
||||||
el for el in _data[field] if el not in self.EMPTY_LIST_FIELD
|
|
||||||
]
|
|
||||||
_data.pop("csrf_token", None)
|
|
||||||
return _data
|
return _data
|
||||||
|
|
||||||
def validate(self, *args, **kwargs):
|
def validate(self, *args, **kwargs):
|
||||||
@ -28,11 +30,3 @@ class ValidatedForm(FlaskForm):
|
|||||||
if not valid:
|
if not valid:
|
||||||
flash("form_errors")
|
flash("form_errors")
|
||||||
return valid
|
return valid
|
||||||
|
|
||||||
|
|
||||||
class CacheableForm(ValidatedForm):
|
|
||||||
def __init__(self, formdata=None, **kwargs):
|
|
||||||
formdata = formdata or {}
|
|
||||||
cached_data = current_app.form_cache.from_request(http_request)
|
|
||||||
cached_data.update(formdata)
|
|
||||||
super().__init__(cached_data, **kwargs)
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from wtforms.fields import TextAreaField
|
from wtforms.fields import TextAreaField
|
||||||
from wtforms.validators import InputRequired
|
from wtforms.validators import InputRequired
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class InternalCommentForm(CacheableForm):
|
class InternalCommentForm(BaseForm):
|
||||||
text = TextAreaField(
|
text = TextAreaField(
|
||||||
translate("forms.internal_comment.text_label"),
|
translate("forms.internal_comment.text_label"),
|
||||||
default="",
|
default="",
|
||||||
|
@ -4,12 +4,12 @@ from wtforms.fields.html5 import DateField
|
|||||||
from wtforms.fields import StringField, TextAreaField, FileField, FieldList
|
from wtforms.fields import StringField, TextAreaField, FileField, FieldList
|
||||||
from wtforms.validators import Optional, Length
|
from wtforms.validators import Optional, Length
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
|
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class KOReviewForm(CacheableForm):
|
class KOReviewForm(BaseForm):
|
||||||
start_date = DateField(
|
start_date = DateField(
|
||||||
translate("forms.ko_review.start_date_label"), format="%m/%d/%Y"
|
translate("forms.ko_review.start_date_label"), format="%m/%d/%Y"
|
||||||
)
|
)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from flask_wtf import FlaskForm
|
|
||||||
from wtforms.fields import StringField
|
from wtforms.fields import StringField
|
||||||
from wtforms.fields.html5 import EmailField
|
from wtforms.fields.html5 import EmailField
|
||||||
from wtforms.validators import Required, Email, Length
|
from wtforms.validators import Required, Email, Length
|
||||||
|
|
||||||
|
from .forms import BaseForm
|
||||||
from atst.forms.validators import IsNumber
|
from atst.forms.validators import IsNumber
|
||||||
from atst.forms.fields import SelectField
|
from atst.forms.fields import SelectField
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
@ -10,7 +10,7 @@ from atst.utils.localization import translate
|
|||||||
from .data import PORTFOLIO_ROLES
|
from .data import PORTFOLIO_ROLES
|
||||||
|
|
||||||
|
|
||||||
class NewMemberForm(FlaskForm):
|
class NewMemberForm(BaseForm):
|
||||||
|
|
||||||
first_name = StringField(
|
first_name = StringField(
|
||||||
label=translate("forms.new_member.first_name_label"), validators=[Required()]
|
label=translate("forms.new_member.first_name_label"), validators=[Required()]
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
from flask_wtf import FlaskForm
|
|
||||||
from wtforms.fields import StringField, BooleanField
|
from wtforms.fields import StringField, BooleanField
|
||||||
from wtforms.fields.html5 import TelField
|
from wtforms.fields.html5 import TelField
|
||||||
from wtforms.validators import Email, Length, Optional
|
from wtforms.validators import Email, Length, Optional
|
||||||
|
|
||||||
from atst.forms.validators import IsNumber, PhoneNumber
|
from atst.forms.validators import IsNumber, PhoneNumber
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from .fields import FormFieldWrapper
|
from .fields import FormFieldWrapper
|
||||||
|
|
||||||
|
|
||||||
class OfficerForm(FlaskForm):
|
class OfficerForm(BaseForm):
|
||||||
first_name = StringField("First Name")
|
first_name = StringField("First Name")
|
||||||
last_name = StringField("Last Name")
|
last_name = StringField("Last Name")
|
||||||
email = StringField("Email", validators=[Optional(), Email()])
|
email = StringField("Email", validators=[Optional(), Email()])
|
||||||
@ -18,7 +17,7 @@ class OfficerForm(FlaskForm):
|
|||||||
invite = BooleanField("Invite to Task Order Builder")
|
invite = BooleanField("Invite to Task Order Builder")
|
||||||
|
|
||||||
|
|
||||||
class EditTaskOrderOfficersForm(CacheableForm):
|
class EditTaskOrderOfficersForm(BaseForm):
|
||||||
|
|
||||||
contracting_officer = FormFieldWrapper(OfficerForm)
|
contracting_officer = FormFieldWrapper(OfficerForm)
|
||||||
contracting_officer_representative = FormFieldWrapper(OfficerForm)
|
contracting_officer_representative = FormFieldWrapper(OfficerForm)
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from wtforms.fields import StringField
|
from wtforms.fields import StringField
|
||||||
from wtforms.validators import Length
|
from wtforms.validators import Length
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class PortfolioForm(CacheableForm):
|
class PortfolioForm(BaseForm):
|
||||||
name = StringField(
|
name = StringField(
|
||||||
translate("forms.portfolio.name_label"),
|
translate("forms.portfolio.name_label"),
|
||||||
validators=[
|
validators=[
|
||||||
|
@ -15,7 +15,7 @@ from flask_wtf.file import FileAllowed
|
|||||||
|
|
||||||
from atst.forms.validators import IsNumber, PhoneNumber, RequiredIf
|
from atst.forms.validators import IsNumber, PhoneNumber, RequiredIf
|
||||||
|
|
||||||
from .forms import CacheableForm
|
from .forms import BaseForm
|
||||||
from .data import (
|
from .data import (
|
||||||
SERVICE_BRANCHES,
|
SERVICE_BRANCHES,
|
||||||
APP_MIGRATION,
|
APP_MIGRATION,
|
||||||
@ -27,7 +27,7 @@ from .data import (
|
|||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
class AppInfoForm(CacheableForm):
|
class AppInfoForm(BaseForm):
|
||||||
portfolio_name = StringField(
|
portfolio_name = StringField(
|
||||||
translate("forms.task_order.portfolio_name_label"),
|
translate("forms.task_order.portfolio_name_label"),
|
||||||
description=translate("forms.task_order.portfolio_name_description"),
|
description=translate("forms.task_order.portfolio_name_description"),
|
||||||
@ -88,7 +88,7 @@ class AppInfoForm(CacheableForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class FundingForm(CacheableForm):
|
class FundingForm(BaseForm):
|
||||||
performance_length = SelectField(
|
performance_length = SelectField(
|
||||||
translate("forms.task_order.performance_length.label"),
|
translate("forms.task_order.performance_length.label"),
|
||||||
choices=PERIOD_OF_PERFORMANCE_LENGTH,
|
choices=PERIOD_OF_PERFORMANCE_LENGTH,
|
||||||
@ -134,7 +134,7 @@ class UnclassifiedFundingForm(FundingForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class OversightForm(CacheableForm):
|
class OversightForm(BaseForm):
|
||||||
ko_first_name = StringField(
|
ko_first_name = StringField(
|
||||||
translate("forms.task_order.oversight_first_name_label")
|
translate("forms.task_order.oversight_first_name_label")
|
||||||
)
|
)
|
||||||
@ -220,11 +220,11 @@ class OversightForm(CacheableForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ReviewForm(CacheableForm):
|
class ReviewForm(BaseForm):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SignatureForm(CacheableForm):
|
class SignatureForm(BaseForm):
|
||||||
level_of_warrant = DecimalField(
|
level_of_warrant = DecimalField(
|
||||||
translate("task_orders.sign.level_of_warrant_label"),
|
translate("task_orders.sign.level_of_warrant_label"),
|
||||||
description=translate("task_orders.sign.level_of_warrant_description"),
|
description=translate("task_orders.sign.level_of_warrant_description"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user