extract new member form into standalone form class
This commit is contained in:
parent
c4ad7b4378
commit
dd0b184bc2
27
atst/forms/member.py
Normal file
27
atst/forms/member.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from flask_wtf import FlaskForm
|
||||||
|
from wtforms.fields.html5 import EmailField, TelField
|
||||||
|
from wtforms.validators import Required, Email, Length, Optional
|
||||||
|
from wtforms.fields import StringField
|
||||||
|
|
||||||
|
from atst.forms.validators import IsNumber, PhoneNumber
|
||||||
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
|
|
||||||
|
class NewForm(FlaskForm):
|
||||||
|
first_name = StringField(
|
||||||
|
label=translate("forms.new_member.first_name_label"), validators=[Required()]
|
||||||
|
)
|
||||||
|
last_name = StringField(
|
||||||
|
label=translate("forms.new_member.last_name_label"), validators=[Required()]
|
||||||
|
)
|
||||||
|
email = EmailField(
|
||||||
|
translate("forms.new_member.email_label"), validators=[Required(), Email()]
|
||||||
|
)
|
||||||
|
phone_number = TelField(
|
||||||
|
translate("forms.new_member.phone_number_label"),
|
||||||
|
validators=[Optional(), PhoneNumber()],
|
||||||
|
)
|
||||||
|
dod_id = StringField(
|
||||||
|
translate("forms.new_member.dod_id_label"),
|
||||||
|
validators=[Required(), Length(min=10), IsNumber()],
|
||||||
|
)
|
@ -1,10 +1,9 @@
|
|||||||
from wtforms.fields.html5 import EmailField, TelField
|
from wtforms.validators import Required
|
||||||
from wtforms.validators import Required, Email, Length, Optional
|
|
||||||
from wtforms.fields import StringField, FormField, FieldList, HiddenField
|
from wtforms.fields import StringField, FormField, FieldList, HiddenField
|
||||||
|
|
||||||
from atst.domain.permission_sets import PermissionSets
|
from atst.domain.permission_sets import PermissionSets
|
||||||
from .forms import BaseForm
|
from .forms import BaseForm
|
||||||
from atst.forms.validators import IsNumber, PhoneNumber
|
from .member import NewForm as BaseNewMemberForm
|
||||||
from atst.forms.fields import SelectField
|
from atst.forms.fields import SelectField
|
||||||
from atst.utils.localization import translate
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
@ -62,24 +61,16 @@ class EditForm(PermissionsForm):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NewForm(PermissionsForm):
|
class NewForm(BaseForm):
|
||||||
first_name = StringField(
|
user_data = FormField(BaseNewMemberForm)
|
||||||
label=translate("forms.new_member.first_name_label"), validators=[Required()]
|
permission_sets = FormField(PermissionsForm)
|
||||||
)
|
|
||||||
last_name = StringField(
|
@property
|
||||||
label=translate("forms.new_member.last_name_label"), validators=[Required()]
|
def update_data(self):
|
||||||
)
|
return {
|
||||||
email = EmailField(
|
"permission_sets": self.data.get("permission_sets").get("permission_sets"),
|
||||||
translate("forms.new_member.email_label"), validators=[Required(), Email()]
|
**self.data.get("user_data"),
|
||||||
)
|
}
|
||||||
phone_number = TelField(
|
|
||||||
translate("forms.new_member.phone_number_label"),
|
|
||||||
validators=[Optional(), PhoneNumber()],
|
|
||||||
)
|
|
||||||
dod_id = StringField(
|
|
||||||
translate("forms.new_member.dod_id_label"),
|
|
||||||
validators=[Required(), Length(min=10), IsNumber()],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class AssignPPOCForm(PermissionsForm):
|
class AssignPPOCForm(PermissionsForm):
|
||||||
|
@ -34,9 +34,9 @@ def create_member(portfolio_id):
|
|||||||
|
|
||||||
if form.validate():
|
if form.validate():
|
||||||
try:
|
try:
|
||||||
member = Portfolios.create_member(portfolio, form.data)
|
member = Portfolios.create_member(portfolio, form.update_data)
|
||||||
invite_service = InvitationService(
|
invite_service = InvitationService(
|
||||||
g.current_user, member, form.data.get("email")
|
g.current_user, member, form.update_data.get("email")
|
||||||
)
|
)
|
||||||
invite_service.invite()
|
invite_service.invite()
|
||||||
|
|
||||||
|
@ -21,23 +21,23 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class='form-row'>
|
<div class='form-row'>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
{{ TextInput(member_form.first_name, validation='requiredField') }}
|
{{ TextInput(member_form.user_data.first_name, validation='requiredField') }}
|
||||||
</div>
|
</div>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
{{ TextInput(member_form.last_name, validation='requiredField') }}
|
{{ TextInput(member_form.user_data.last_name, validation='requiredField') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='form-row'>
|
<div class='form-row'>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
{{ TextInput(member_form.email, validation='email') }}
|
{{ TextInput(member_form.user_data.email, validation='email') }}
|
||||||
</div>
|
</div>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
{{ TextInput(member_form.phone_number, validation='usPhone', optional=True) }}
|
{{ TextInput(member_form.user_data.phone_number, validation='usPhone', optional=True) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='form-row'>
|
<div class='form-row'>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
{{ TextInput(member_form.dod_id, validation='dodId') }}
|
{{ TextInput(member_form.user_data.dod_id, validation='dodId') }}
|
||||||
</div>
|
</div>
|
||||||
<div class='form-col form-col--half'>
|
<div class='form-col form-col--half'>
|
||||||
</div>
|
</div>
|
||||||
@ -61,10 +61,10 @@
|
|||||||
{{ "portfolios.admin.permissions_info" | translate }}
|
{{ "portfolios.admin.permissions_info" | translate }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{{ SimpleOptionsInput(member_form.perms_app_mgmt) }}
|
{{ SimpleOptionsInput(member_form.permission_sets.perms_app_mgmt) }}
|
||||||
{{ SimpleOptionsInput(member_form.perms_funding) }}
|
{{ SimpleOptionsInput(member_form.permission_sets.perms_funding) }}
|
||||||
{{ SimpleOptionsInput(member_form.perms_reporting) }}
|
{{ SimpleOptionsInput(member_form.permission_sets.perms_reporting) }}
|
||||||
{{ SimpleOptionsInput(member_form.perms_portfolio_mgmt) }}
|
{{ SimpleOptionsInput(member_form.permission_sets.perms_portfolio_mgmt) }}
|
||||||
<div class='action-group'>
|
<div class='action-group'>
|
||||||
<input
|
<input
|
||||||
type="submit"
|
type="submit"
|
||||||
|
@ -49,11 +49,14 @@ def test_new_member_accepts_valid_invite(monkeypatch, client, user_session):
|
|||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("portfolios.create_member", portfolio_id=portfolio.id),
|
url_for("portfolios.create_member", portfolio_id=portfolio.id),
|
||||||
data={
|
data={
|
||||||
"perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
|
"permission_sets-perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
|
||||||
"perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
|
"permission_sets-perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
|
||||||
"perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
|
"permission_sets-perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
|
||||||
"perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
|
"permission_sets-perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
|
||||||
**user_info,
|
"user_data-first_name": user_info["first_name"],
|
||||||
|
"user_data-last_name": user_info["last_name"],
|
||||||
|
"user_data-dod_id": user_info["dod_id"],
|
||||||
|
"user_data-email": user_info["email"],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,10 +5,10 @@ from atst.domain.permission_sets import PermissionSets
|
|||||||
from atst.queue import queue
|
from atst.queue import queue
|
||||||
|
|
||||||
_DEFAULT_PERMS_FORM_DATA = {
|
_DEFAULT_PERMS_FORM_DATA = {
|
||||||
"perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
|
"permission_sets-perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
|
||||||
"perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
|
"permission_sets-perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
|
||||||
"perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
|
"permission_sets-perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
|
||||||
"perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
|
"permission_sets-perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -32,11 +32,11 @@ def test_create_member(client, user_session):
|
|||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("portfolios.create_member", portfolio_id=portfolio.id),
|
url_for("portfolios.create_member", portfolio_id=portfolio.id),
|
||||||
data={
|
data={
|
||||||
"dod_id": user.dod_id,
|
"user_data-dod_id": user.dod_id,
|
||||||
"first_name": "Wilbur",
|
"user_data-first_name": "user_data-Wilbur",
|
||||||
"last_name": "Zuckerman",
|
"user_data-last_name": "user_data-Zuckerman",
|
||||||
"email": "some_pig@zuckermans.com",
|
"user_data-email": "user_data-some_pig@zuckermans.com",
|
||||||
"portfolio_role": "developer",
|
"user_data-portfolio_role": "user_data-developer",
|
||||||
**_DEFAULT_PERMS_FORM_DATA,
|
**_DEFAULT_PERMS_FORM_DATA,
|
||||||
},
|
},
|
||||||
follow_redirects=True,
|
follow_redirects=True,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user