diff --git a/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py b/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py index e27074f2..bd5e3136 100644 --- a/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py +++ b/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py @@ -35,7 +35,7 @@ def downgrade(): session = Session(bind=op.get_bind()) owner_and_admin = session.query(Role).filter(Role.name.in_(["owner", "admin"])).all() - for role in owner_and_ccpo: + for role in owner_and_admin: role.remove_permission(Permissions.EDIT_WORKSPACE_INFORMATION) session.add(role) diff --git a/alembic/versions/a496111da617_add_name_to_request_revision.py b/alembic/versions/a496111da617_add_name_to_request_revision.py new file mode 100644 index 00000000..cdfdaf34 --- /dev/null +++ b/alembic/versions/a496111da617_add_name_to_request_revision.py @@ -0,0 +1,28 @@ +"""add name to request revision + +Revision ID: a496111da617 +Revises: 4f4defb7b440 +Create Date: 2018-09-18 16:45:59.297289 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a496111da617' +down_revision = '4f4defb7b440' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('request_revisions', sa.Column('name', sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('request_revisions', 'name') + # ### end Alembic commands ### diff --git a/atst/domain/workspaces/workspaces.py b/atst/domain/workspaces/workspaces.py index 61996955..df2275a5 100644 --- a/atst/domain/workspaces/workspaces.py +++ b/atst/domain/workspaces/workspaces.py @@ -11,7 +11,7 @@ from .scopes import ScopedWorkspace class Workspaces(object): @classmethod def create(cls, request, name=None): - name = name or request.id + name = name or request.displayname workspace = WorkspacesQuery.create(request=request, name=name) Workspaces._create_workspace_role(request.creator, workspace, "owner") WorkspacesQuery.add_and_commit(workspace) diff --git a/atst/forms/new_request.py b/atst/forms/new_request.py index 368fa63a..74f35f51 100644 --- a/atst/forms/new_request.py +++ b/atst/forms/new_request.py @@ -147,6 +147,19 @@ class DetailsOfUseForm(ValidatedForm): format="%m/%d/%Y", ) + name = StringField( + "Name Your Request", + description="This name serves as a reference for your initial request and the associated workspace that will be created once this request is approved. You may edit this name later.", + validators=[ + Required(), + Length( + min=4, + max=100, + message="Request names must be at least 4 and not more than 100 characters", + ), + ], + ) + class InformationAboutYouForm(ValidatedForm): fname_request = StringField("First Name", validators=[Required(), Alphabet()]) diff --git a/atst/forms/workspace.py b/atst/forms/workspace.py index 76dd6aae..9fde98bb 100644 --- a/atst/forms/workspace.py +++ b/atst/forms/workspace.py @@ -10,7 +10,7 @@ class WorkspaceForm(ValidatedForm): validators=[ Length( min=4, - max=50, + max=100, message="Workspace names must be at least 4 and not more than 50 characters", ) ], diff --git a/atst/models/request.py b/atst/models/request.py index d7072d35..d43e2c5f 100644 --- a/atst/models/request.py +++ b/atst/models/request.py @@ -75,6 +75,7 @@ class Request(Base): "average_daily_traffic_gb", "rationalization_software_systems", "organization_providing_assistance", + "name", ] INFORMATION_ABOUT_YOU_FIELDS = [ "citizenship", @@ -212,3 +213,7 @@ class Request(Base): or self.is_pending_financial_verification_changes or self.is_approved ) and self.task_order + + @property + def displayname(self): + return self.latest_revision.name or self.id diff --git a/atst/models/request_revision.py b/atst/models/request_revision.py index 53b3d31f..2cfee3c4 100644 --- a/atst/models/request_revision.py +++ b/atst/models/request_revision.py @@ -51,6 +51,7 @@ class RequestRevision(Base, TimestampsMixin): average_daily_traffic_gb = Column(Integer) rationalization_software_systems = Column(String) organization_providing_assistance = Column(String) + name = Column(String) # information_about_you citizenship = Column(String) diff --git a/atst/routes/requests/index.py b/atst/routes/requests/index.py index a59b1f45..b348dec7 100644 --- a/atst/routes/requests/index.py +++ b/atst/routes/requests/index.py @@ -81,7 +81,7 @@ class RequestsIndex(object): return { "workspace_id": request.workspace.id if request.workspace else None, - "order_id": request.id, + "name": request.displayname, "is_new": is_new, "status": request.status_displayname, "app_count": app_count, diff --git a/js/lib/input_validations.js b/js/lib/input_validations.js index 1696facc..4df1f7dd 100644 --- a/js/lib/input_validations.js +++ b/js/lib/input_validations.js @@ -81,8 +81,8 @@ export default { }, workspaceName: { mask: false, - match: /^.{4,50}$/, + match: /^.{4,100}$/, unmask: [], - validationError: 'Workspace names must be at least 4 and not more than 50 characters' + validationError: 'Workspace and request names must be at least 4 and not more than 100 characters' }, } diff --git a/templates/requests/_review.html b/templates/requests/_review.html index e48f27d0..2bf0d665 100644 --- a/templates/requests/_review.html +++ b/templates/requests/_review.html @@ -80,6 +80,8 @@ {{ DefinitionReviewField("Total Spend", "details_of_use", "dollar_value", filter="dollars") }} {{ DefinitionReviewField("Start Date", "details_of_use", "start_date") }} + + {{ DefinitionReviewField("Request Name", "details_of_use", "name") }}
diff --git a/templates/requests/approval.html b/templates/requests/approval.html index 316ea8d7..9b590ef5 100644 --- a/templates/requests/approval.html +++ b/templates/requests/approval.html @@ -17,7 +17,7 @@
-

Request #{{ request.id }} +

Request: {{ request.displayname }}

{{ current_status }}
diff --git a/templates/requests/details.html b/templates/requests/details.html index 06b860d3..59411fe1 100644 --- a/templates/requests/details.html +++ b/templates/requests/details.html @@ -24,7 +24,7 @@

Request Details

-

#{{ request.id }} {{ request.status_displayname }}

+

{{ request.displayname }} {{ request.status_displayname }}

diff --git a/templates/requests/financial_verification.html b/templates/requests/financial_verification.html index 6f29ee2d..66a5afa2 100644 --- a/templates/requests/financial_verification.html +++ b/templates/requests/financial_verification.html @@ -58,7 +58,7 @@

Financial Verification

-

Order #{{ request.id }}

+

Request: {{ request.displayname }}

diff --git a/templates/requests/index.html b/templates/requests/index.html index 9411776d..67df4760 100644 --- a/templates/requests/index.html +++ b/templates/requests/index.html @@ -90,7 +90,7 @@ - + {% if extended_view %} @@ -107,7 +107,7 @@ {% for r in requests %} diff --git a/templates/requests/screen-1.html b/templates/requests/screen-1.html index a3b3c871..e95bce00 100644 --- a/templates/requests/screen-1.html +++ b/templates/requests/screen-1.html @@ -78,6 +78,7 @@ {{ TextInput(f.dollar_value, validation='dollars', placeholder='$0', tooltip='You may specify a different Total Spend amount to cover other JEDI Cloud services that the JEDI Cloud cost calculator was not able to estimate. Examples may include support packages from the cloud service provider.') }} {{ DateInput(f.start_date, placeholder='MM / DD / YYYY', validation='date') }} + {{ TextInput(f.name, placeholder='Request Name', validation='workspaceName') }} diff --git a/tests/domain/test_workspaces.py b/tests/domain/test_workspaces.py index 5ff8aa69..06d3f836 100644 --- a/tests/domain/test_workspaces.py +++ b/tests/domain/test_workspaces.py @@ -35,8 +35,8 @@ def test_request_is_associated_with_workspace(workspace, request_): assert workspace.request == request_ -def test_default_workspace_name_is_request_id(workspace, request_): - assert workspace.name == str(request_.id) +def test_default_workspace_name_is_request_name(workspace, request_): + assert workspace.name == str(request_.displayname) def test_get_nonexistent_workspace_raises(): diff --git a/tests/factories.py b/tests/factories.py index 5cd1b7fa..dd342b09 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -108,6 +108,7 @@ class RequestFactory(Base): def create_initial_revision(cls, request, dollar_value=1000000): user = request.creator default_data = dict( + name=factory.Faker("domain_word"), am_poc=False, dodid_poc=user.dod_id, email_poc=user.email, diff --git a/tests/forms/test_new_request.py b/tests/forms/test_new_request.py index e97cc236..16fa3623 100644 --- a/tests/forms/test_new_request.py +++ b/tests/forms/test_new_request.py @@ -14,6 +14,7 @@ class TestDetailsOfUseForm: "number_user_sessions": "6", "average_daily_traffic": "0", "start_date": "12/12/2050", + "name": "blue-beluga", } migration_data = { "jedi_migration": "yes",
JEDI Cloud Request IDJEDI Cloud Request Name Date Request SubmittedDate Request Last Edited
- {{ r.order_id }} + {{ r.name }} {% if r.action_required %}Action Required{% endif %} {{ r.last_submission_timestamp | formattedDate }}