Merge pull request #107 from dod-ccpo/ui/request-form

UI/request form
This commit is contained in:
luisgov 2018-07-31 11:21:08 -04:00 committed by GitHub
commit 60ff20834b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 395 additions and 444 deletions

View File

@ -8,14 +8,30 @@ from .validators import DateRange, PhoneNumber, Alphabet
class OrgForm(ValidatedForm):
fname_request = StringField("First Name", validators=[Required(), Alphabet()])
lname_request = StringField("Last Name", validators=[Required(), Alphabet()])
fname_request = StringField(
"First Name",
validators=[Required(), Alphabet()]
)
email_request = EmailField("Email Address", validators=[Required(), Email()])
lname_request = StringField(
"Last Name",
validators=[Required(), Alphabet()]
)
phone_number = TelField("Phone Number", validators=[Required(), PhoneNumber()])
email_request = EmailField(
"Email Address",
validators=[Required(), Email()]
)
service_branch = StringField("Service Branch or Agency", validators=[Required()])
phone_number = TelField(
"Phone Number",
validators=[Required(), PhoneNumber()]
)
service_branch = StringField(
"Service Branch or Agency",
validators=[Required()]
)
citizenship = RadioField(
choices=[
@ -37,7 +53,7 @@ class OrgForm(ValidatedForm):
)
date_latest_training = DateField(
"Latest Information Assurance (IA) Training completion date.",
"Latest Information Assurance (IA) Training completion date",
validators=[
Required(),
DateRange(

View File

@ -1,15 +1,27 @@
from wtforms.fields import StringField
from wtforms.fields.html5 import EmailField
from wtforms.validators import Required, Email, Length
from .forms import ValidatedForm
from .validators import IsNumber, Alphabet
class POCForm(ValidatedForm):
fname_poc = StringField("POC First Name", validators=[Required(), Alphabet()])
lname_poc = StringField("POC Last Name", validators=[Required(), Alphabet()])
fname_poc = StringField(
"POC First Name",
validators=[Required()]
)
email_poc = StringField("POC Email Address", validators=[Required(), Email()])
lname_poc = StringField(
"POC Last Name",
validators=[Required()]
)
email_poc = EmailField(
"POC Email Address",
validators=[Required(), Email()]
)
dodid_poc = StringField(
"DOD ID", validators=[Required(), Length(min=10), IsNumber()]
"DOD ID",
validators=[Required(), Length(min=10), IsNumber()]
)

View File

@ -1,5 +1,5 @@
from wtforms.fields.html5 import IntegerField
from wtforms.fields import RadioField, StringField, TextAreaField
from wtforms.fields import RadioField, StringField, TextAreaField, SelectField
from wtforms.validators import NumberRange, InputRequired
from .fields import DateField
from .forms import ValidatedForm
@ -9,74 +9,113 @@ import pendulum
class RequestForm(ValidatedForm):
# Details of Use: Overall Request Details
# Details of Use: General
dod_component = SelectField(
"DoD Component",
description="Identify the DoD component that is requesting access to the JEDI Cloud",
choices=[
("null","Select an option"),
("us_air_force","US Air Force"),
("us_army","US Army"),
("us_navy","US Navy"),
("us_marine_corps","US Marine Corps"),
("joint_chiefs_of_staff","Joint Chiefs of Staff")],
)
jedi_usage = TextAreaField(
"JEDI Usage",
description="Briefly describe how you are expecting to use the JEDI Cloud",
render_kw={"placeholder": "e.g. We are migrating XYZ application to the cloud so that..."},
)
# Details of Use: Cloud Readiness
num_software_systems = IntegerField(
"Number of Software System",
description="Estimate the number of software systems that will be supported by this JEDI Cloud access request",
)
jedi_migration = RadioField(
"Are you using the JEDI Cloud to migrate existing systems?",
choices=[("yes", "Yes"), ("no", "No")],
)
rationalization_software_systems = RadioField(
"Have you completed a “rationalization” of your software systems to move to the cloud?",
choices=[("yes", "Yes"), ("no", "No"), ("in_progress","In Progress")],
)
technical_support_team = RadioField(
"Are you working with a technical support team experienced in cloud migrations?",
choices=[("yes", "Yes"), ("no", "No")],
)
organization_providing_assistance = RadioField( # this needs to be updated to use checkboxes instead of radio
"If you are receiving migration assistance, indicate the type of organization providing assistance below:",
choices=[
("in_house_staff","In-house staff"),
("contractor","Contractor"),
("other_dod_organization","Other DoD organization")],
)
engineering_assessment = RadioField(
description="Have you completed an engineering assessment of your software systems for cloud readiness?",
choices=[("yes", "Yes"), ("no", "No"), ("in_progress","In Progress")],
)
data_transfers = SelectField(
description="How much data is being transferred to the cloud?",
choices=[
("null","Select an option"),
("less_than_100gb","Less than 100GB"),
("100gb-500gb","100GB-500GB"),
("500gb-1tb","500GB-1TB"),
("1tb-50tb","1TB-50TB"),
("50tb-100tb","50TB-100TB"),
("100tb-500tb","100TB-500TB"),
("500tb-1pb","500TB-1PB"),
("1pb-5pb","1PB-5PB"),
("5pb-10pb","5PB-10PB"),
("above_10pb","Above 10PB")],
)
expected_completion_date = SelectField(
description="When do you expect to complete your migration to the JEDI Cloud?",
choices=[
("null","Select an option"),
("less_than_1_month","Less than 1 month"),
("1_to_3_months","1-3 months"),
("3_to_6_months","3-6 months"),
("above_12_months","Above 12 months")],
)
cloud_native = RadioField(
"Are your software systems being developed cloud native?",
choices=[("yes", "Yes"), ("no", "No")],
)
# Details of Use: Financial Usage
estimated_monthly_spend = IntegerField(
"Estimated monthly spend",
description="Use the <a href=\"#\">JEDI CSP Calculator</a> to estimate your monthly cloud resource usage and enter the dollar amount below. Note these estimates are for initial approval only. After the request is approved, you will be asked to provide a valid Task Order number with specific CLIN amounts for cloud services."
)
dollar_value = IntegerField(
"What is the total estimated dollar value of the cloud resources you are requesting using the <a href=\"#\" target=\"_blank\">JEDI CSP Calculator</a>?",
validators=[InputRequired(), NumberRange(min=1)],
"Total Spend",
description="What is your total expected budget for this JEDI Cloud Request?",
)
num_applications = IntegerField(
"Estimate the number of applications that might be supported by this request",
validators=[InputRequired(), NumberRange(min=1)],
number_user_sessions = IntegerField(
description="How many user sessions do you expect on these systems each day?",
)
date_start = DateField(
"Date you expect to start accessing this cloud resource.",
validators=[
InputRequired(),
DateRange(
lower_bound=pendulum.duration(days=0),
message="Must be no earlier than today.",
),
],
average_daily_traffic = IntegerField(
description="What is the average daily traffic you expect the systems under this cloud contract to use?",
)
app_description = TextAreaField(
"Describe how your team is expecting to use the JEDI Cloud"
start_date = DateField(
description="When do you expect to start using the JEDI Cloud (not for billing purposes)?",
)
supported_organizations = StringField(
"What organizations are supported by these applications?",
validators=[InputRequired()],
)
# Details of Use: Cloud Resources
total_cores = IntegerField(
"Total Number of vCPU cores", validators=[InputRequired(), NumberRange(min=0)]
)
total_ram = IntegerField(
"Total RAM", validators=[InputRequired(), NumberRange(min=0)]
)
total_object_storage = IntegerField(
"Total object storage", validators=[InputRequired(), NumberRange(min=0)]
)
total_database_storage = IntegerField(
"Total database storage", validators=[InputRequired(), NumberRange(min=0)]
)
total_server_storage = IntegerField(
"Total server storage", validators=[InputRequired(), NumberRange(min=0)]
)
# Details of Use: Support Staff
has_contractor_advisor = RadioField(
"Do you have a contractor to advise and assist you with using cloud services?",
choices=[("yes", "Yes"), ("no", "No")],
validators=[InputRequired()],
)
is_migrating_application = RadioField(
"Are you using the JEDI Cloud to migrate existing applications?",
choices=[("yes", "Yes"), ("no", "No")],
validators=[InputRequired()],
)
has_migration_office = RadioField(
"Do you have a migration office that you're working with to migrate to the cloud?",
choices=[("yes", "Yes"), ("no", "No")],
validators=[InputRequired()],
)
supporting_organization = StringField(
"Describe the organizations that are supporting you, include both government and contractor resources",
validators=[InputRequired()],
)

View File

@ -1,4 +1,5 @@
<div class='usa-input {% if errors %}usa-input--error{% end %}'>
<fieldset class="usa-input__choices {% if inline %}usa-input__choices--inline{% end %}">
<legend>
{{ label }}

View File

@ -1,5 +1,5 @@
<div class='usa-input {% if errors %}usa-input--error{% end %}'>
<label for={{input.name}}>
<label for={{field.name}}>
{{ label }}
{% if description %}

View File

@ -24,7 +24,7 @@
<b class="usa-input-error-message">There were some errors, see below.</b>
{% end %}
<p class="usa-font-lead">In order to get you access to the JEDI Cloud, we will need you to enter the details below that will help us verify and account for your Task Order.</p>
<p>In order to get you access to the JEDI Cloud, we will need you to enter the details below that will help us verify and account for your Task Order.</p>
{{ f.task_order_id.label }}
{{ f.task_order_id(placeholder="Example: 1234567899C0001") }}

View File

@ -3,7 +3,7 @@
{% block form %}
<h2>New JEDI Request</h2>
<p class="usa-font-lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus error omnis a, tenetur similique quo officiis voluptates eum recusandae dolorem minus dignissimos, magni consequatur, maxime debitis reprehenderit sint non iusto?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus error omnis a, tenetur similique quo officiis voluptates eum recusandae dolorem minus dignissimos, magni consequatur, maxime debitis reprehenderit sint non iusto?</p>
<a class='usa-button usa-button-secondary' href='{{ reverse_url('request_form_new',next_screen) }}'>New Application</a>
<a class='usa-button usa-button-secondary' href='{{ reverse_url('request_form_new',next_screen) }}'>Existing Application</a>

View File

@ -1,154 +1,45 @@
{% extends '../requests_new.html.to' %}
{% block subtitle %}
<h2>Details of Use</h2>
<h2>Details of Use</h2>
{% end %}
{% block form %}
{% autoescape None %}
{% if f.errors %}
<b class="usa-input-error-message">There were some errors, see below.</b>
{% module Alert('There were some errors',
message="<p>Please see below.</p>",
level='error'
) %}
{% end %}
<!-- DETAILS OF USE -->
<!-- Overall Request Details -->
<p>Wed like to know a little about how you plan to use JEDI Cloud services to process your request. Please answer the following questions to the best of your ability. Note that the CCPO does not directly help with migrating systems to JEDI Cloud. These questions are for learning about your cloud readiness and financial usage of the JEDI Cloud; your estimates will not be used for any department level reporting.</p>
<p><em>All fields are required, unless specified optional.</em></p>
<h3 id="overall-request-details">Overall Request Details</h3>
<p class="usa-font-lead">Please help us understand the size and scope of your resource request.</p>
<h2>General</h2>
{% module TextInput(f.dod_component) %}
{% module TextInput(f.jedi_usage,placeholder="e.g. We are migrating XYZ application to the cloud so that...") %}
{{ f.dollar_value.label }}
{{ f.dollar_value(placeholder="Total dollar amount to be associated with the Task Order")}}
{% for e in f.dollar_value.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<h2>Cloud Readiness</h2>
{% module TextInput(f.num_software_systems,placeholder="Number of systems") %}
{% module OptionsInput(f.jedi_migration) %}
{% module OptionsInput(f.rationalization_software_systems) %}
{% module OptionsInput(f.technical_support_team) %}
{% module OptionsInput(f.organization_providing_assistance) %}
{% module OptionsInput(f.engineering_assessment) %}
{% module TextInput(f.data_transfers) %}
{% module TextInput(f.expected_completion_date) %}
{% module OptionsInput(f.cloud_native) %}
{{ f.num_applications.label }}
{{ f.num_applications(placeholder="Estimated number of applications") }}
{% for e in f.num_applications.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<h2>Financial Usage</h2>
{% module TextInput(f.estimated_monthly_spend) %}
<p>So this means you are spending approximately <b>$X</b> annually</p>
{% module TextInput(f.dollar_value) %}
{% module TextInput(f.number_user_sessions) %}
{% module TextInput(f.average_daily_traffic) %}
{% module TextInput(f.start_date) %}
{{ f.date_start.label }}
{{ f.date_start }}
{% for e in f.date_start.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.app_description.label }}
{{ f.app_description(placeholder="Example: My organization is supporting the migration of XYZ system to the cloud due to XX policy memo. I am planning to use a sandbox environment to do testing.") }}
{% for e in f.app_description.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.supported_organizations.label }}
{{ f.supported_organizations(placeholder="Add tags associated with DoD components or other entities") }}
{% for e in f.supported_organizations.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<!-- Cloud Resources -->
<h3 id="cloud-resources">Cloud Resources</h3>
<p class="usa-font-lead">Please tell us about your expected cloud resource usage as best as you can. Refer to the <a href="">Cloud Service Provider</a> as necessary.</p>
{{ f.total_cores.label }}
{{ f.total_cores(placeholder="Expected total cores", min="1", max="32") }}
{% for e in f.total_cores.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.total_ram.label }}
{{ f.total_ram(placeholder="Expected amount of RAM", min="1", max="32") }}
{% for e in f.total_ram.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.total_object_storage.label }}
{{ f.total_object_storage(placeholder="Expected total object storage") }}
{% for e in f.total_object_storage.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.total_database_storage.label }}
{{ f.total_database_storage(placeholder="Expected total database storage") }}
{% for e in f.total_database_storage.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.total_server_storage.label }}
{{ f.total_server_storage(placeholder="Expected total server storage") }}
{% for e in f.total_server_storage.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<!-- Support Staff -->
<h3 id="support-staff">Support Staff</h3>
<p class="usa-font-lead">We want to learn more about the people helping you with the cloud.</p>
<fieldset class="usa-fieldset-inputs">
{{ f.has_contractor_advisor.label }}
{{ f.has_contractor_advisor(class_="usa-unstyled-list") }}
{% for e in f.has_contractor_advisor.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
<fieldset class="usa-fieldset-inputs">
{{ f.is_migrating_application.label }}
{{ f.is_migrating_application(class_="usa-unstyled-list") }}
{% for e in f.is_migrating_application.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
<fieldset class="usa-fieldset-inputs">
{{ f.has_migration_office.label }}
{{ f.has_migration_office(class_="usa-unstyled-list") }}
{% for e in f.has_migration_office.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
<fieldset class="usa-fieldset-inputs">
{{ f.supporting_organization.label }}
{{ f.supporting_organization(placeholder="Example: AF CCE/HNI, Navy SPAWAR, MITRE") }}
{% for e in f.supporting_organization.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
{% end %}

View File

@ -1,84 +1,31 @@
{% extends '../requests_new.html.to' %}
{% block subtitle %}
<h2>Information About You</h2>
<h2>Information About You</h2>
{% end %}
{% block form %}
{% autoescape None %}
{% if f.errors %}
<b class="usa-input-error-message">There were some errors, see below.</b>
{% module Alert('There were some errors',
message="<p>Please see below.</p>",
level='error'
) %}
{% end %}
<p class="usa-font-lead">Please tell us more about yourself.</p>
<p>Please tell us more about you.</p>
{{ f.fname_request.label }}
{{ f.fname_request(placeholder="Your first name") }}
{% for e in f.fname_request.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{% module TextInput(f.fname_request,placeholder='First Name') %}
{% module TextInput(f.lname_request,placeholder='Last Name') %}
{% module TextInput(f.email_request,placeholder='jane@mail.mil') %}
{% module TextInput(f.phone_number,placeholder='(123) 456-7890') %}
{{ f.lname_request.label }}
{{ f.lname_request(placeholder="Your last name") }}
{% for e in f.lname_request.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<p>We want to collect the following information from you for security auditing and determining priviledged user access</p>
{{ f.email_request.label }}
{{ f.email_request(placeholder="jane@mail.mil") }}
{% for e in f.email_request.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{% module TextInput(f.service_branch,placeholder='e.g. US Air Force, US Army, US Navy, Marine Corps, Defense Media Agency') %}
{% module OptionsInput(f.citizenship) %}
{% module OptionsInput(f.designation) %}
{% module TextInput(f.date_latest_training) %}
{{ f.phone_number.label }}
{{ f.phone_number(placeholder="(123) 456-7890") }}
{% for e in f.phone_number.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.service_branch.label }}
{{ f.service_branch(placeholder="i.e. US Air Force, US Army, US Navy, Marine Corps, Defense Media Agency") }}
{% for e in f.service_branch.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
<fieldset class="usa-fieldset-inputs">
{{ f.citizenship.label }}
{{ f.citizenship(class_="usa-unstyled-list") }}
{% for e in f.citizenship.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
<fieldset class="usa-fieldset-inputs">
{{ f.designation.label }}
{{ f.designation(class_="usa-unstyled-list") }}
{% for e in f.designation.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
</fieldset>
{{ f.date_latest_training.label }}
{{ f.date_latest_training }}
{% for e in f.date_latest_training.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{% end %}
{% end %}

View File

@ -1,17 +1,20 @@
{% extends '../requests_new.html.to' %}
{% block subtitle %}
<h2>Primary Government/Military <br> Point of Contact (POC)</h2>
<h2>Primary Government/Military <br> Point of Contact (POC)</h2>
{% end %}
{% block form %}
{% autoescape None %}
{% if f.errors %}
<b class="usa-input-error-message">There were some errors, see below.</b>
{% module Alert('There were some errors',
message="<p>Please see below.</p>",
level='error'
) %}
{% end %}
<p class="usa-font-lead">Please designate a Primary Point of Contact that will be responsible for owning the workspace in the JEDI Cloud.</p>
<p>Please designate a Primary Point of Contact that will be responsible for owning the workspace in the JEDI Cloud.</p>
<p>The Point of Contact will become the primary owner of the <em>workspace</em> created to use the JEDI Cloud. As a workspace owner, this person will have the ability to:
<ul>
<li>Create multiple application stacks and environments in the workspace to access the commercial cloud service provider portal</li>
@ -23,36 +26,9 @@
<em>This POC may be you.</em>
</p>
{{ f.fname_poc.label }}
{{ f.fname_poc(placeholder="First name") }}
{% for e in f.fname_poc.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{% module TextInput(f.fname_poc,placeholder='First Name') %}
{% module TextInput(f.lname_poc,placeholder='Last Name') %}
{% module TextInput(f.email_poc,placeholder='jane@mail.mil') %}
{% module TextInput(f.dodid_poc,placeholder='10-digit number on the back of the CAC') %}
{{ f.lname_poc.label }}
{{ f.lname_poc(placeholder="Last name") }}
{% for e in f.lname_poc.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.email_poc.label }}
{{ f.email_poc(placeholder="jane@mail.mil") }}
{% for e in f.email_poc.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{{ f.dodid_poc.label }}
{{ f.dodid_poc(placeholder="10-digit number on the back of the CAC") }}
{% for e in f.dodid_poc.errors %}
<div class="usa-input-error-message">
{{ e }}
</div>
{% end %}
{% end %}
{% end %}

View File

@ -1,127 +1,197 @@
{% extends '../requests_new.html.to' %}
{% block subtitle %}
<h2>Review &amp; Submit</h2>
<h2>Review &amp; Submit</h2>
{% end %}
{% block form_action %}
<form method='POST' action="{{ reverse_url('requests_submit', request_id) }}" autocomplete="off">
{% end %}
<form method='POST' action="{{ reverse_url('requests_submit', request_id) }}" autocomplete="off">
{% end %}
{% block form %}
{% block form %}
{% autoescape None %}
{% if f.errors %}
<b>There were some errors, see below.</b>
{% end %}
{% autoescape None %}
{% if f.errors %}
{% module Alert('There were some errors',
message="<p>Please complete all required fields before submitting.</p>",
level='error'
) %}
{% end %}
<p class="usa-font-lead">Before you can submit your request, please take a moment to review the information entered in the form. You may make changes by clicking the edit link on each section. When all information looks right, go ahead and submit.</p>
<p>Before you can submit your request, please take a moment to review the information entered in the form. You may make changes by clicking the edit link on each section. When all information looks right, go ahead and submit.</p>
<h3>Details of Use <a href="{{ reverse_url('request_form_update', 1, request_id) }}">Edit</a></h3>
<h2>Details of Use <a href="{{ reverse_url('request_form_update', 1, request_id) }}" class="icon-link">Edit</a></h2>
<h4>Overall Request Details</h4>
<label>What is the total estimated dollar value of the cloud resources you are requesting using the JEDI CSP Calculator? </label>
<b>{{ data['details_of_use']['dollar_value'] }}</b>
<label>Please estimate the number of applications that might be supported by this request</label>
<b>{{ data['details_of_use']['num_applications'] }}</b>
<label>Start Date</label>
<b>{{ data['details_of_use']['date_start'] }}</b>
<label>Please briefly describe how your team is expecting to use the JEDI Cloud</label>
<b>{{ data['details_of_use']['app_description'] }}</b>
<label>What organizations are supported by these applications?</label>
<b>{{ data['details_of_use']['supported_organizations'] }}</b>
<h4>Cloud Resources</h4>
<label>Total Number of vCPU cores</label>
<b>{{ data['details_of_use']['total_cores'] }}</b>
<label>Total RAM</label>
<b>{{ data['details_of_use']['total_ram'] }}</b>
<label>Total object storage</label>
<b>{{ data['details_of_use']['total_object_storage'] }}</b>
<label>Total server storage</label>
<b>{{ data['details_of_use']['total_server_storage'] }}</b>
<h4>Support Staff</h4>
<label>Do you have a contractor to advise and assist you with using cloud services?</label>
<b>{{ data['details_of_use']['has_contractor_advisor'] }}</b>
<label>Are you using the JEDI Cloud to migrate existing applications?</label>
<b>{{ data['details_of_use']['is_migrating_application'] }}</b>
<label>Please describe the organizations that are supporting you, include both government and contractor resources</label>
<b>{{ data['details_of_use']['supporting_organization'] }}</b>
<label>Do you have a migration office that you're working with to migrate to the cloud?</label>
<b>{{ data['details_of_use']['has_migration_office'] }}</b>
<label>Please describe the organizations that are supporting you, include both government and contractor resources.</label>
<b>{{ data['details_of_use']['supporting_organization'] }}</b>
<br><br><hr>
<h3>Information About You <a href="{{ reverse_url('request_form_update', 2, request_id) }}">Edit</a></h3>
<label>First Name</label>
<b>{{ data['information_about_you']['fname_request'] }}</b>
<label>Last Name</label>
<b>{{ data['information_about_you']['lname_request'] }}</b>
<label>Email (associated with your CAC)</label>
<b>{{ data['information_about_you']['email_request'] }}</b>
<label>Phone Number</label>
<b>{{ data['information_about_you']['phone_number'] }}</b>
<label>Service Branch or Agency</label>
<b>{{ data['information_about_you']['service_branch'] }}</b>
<label>Citizenship</label>
<b>{{ data['information_about_you']['citizenship'] }}</b>
<label>Designation of Person</label>
<b>{{ data['information_about_you']['designation'] }}</b>
<label>Latest Information Assurance (IA) Training completion date</label>
<b>{{ data['information_about_you']['date_latest_training'] }}</b>
<dl>
<div>
<dt>DoD Component</dt>
<dd>{{data['details_of_use']['dod_component']}}</dd>
</div>
<br><br><hr>
<div>
<dt>JEDI Usage</dt>
<dd>{{data['details_of_use']['jedi_usage']}}</dd>
</div>
<h3>Primary Government/Military Point of Contact (POC) <a href="{{ reverse_url('request_form_update', 3, request_id) }}">Edit</a></h3>
<div>
<dt>Number of software systems</dt>
<dd>{{data['details_of_use']['num_software_systems']}}</dd>
</div>
<div>
<dt>JEDI Migration</dt>
<dd>{{data['details_of_use']['jedi_migration']}}</dd>
</div>
<div>
<dt>Rationalization of Software Systems</dt>
<dd>{{data['details_of_use']['rationalization_software_systems']}}</dd>
</div>
<div>
<dt>Technical Support Team</dt>
<dd>{{data['details_of_use']['technical_support_team']}}</dd>
</div>
<div>
<dt>Organization Providing Assistance</dt>
<dd>{{data['details_of_use']['organization_providing_assistance']}}</dd>
</div>
<div>
<dt>Engineering Assessment</dt>
<dd>{{data['details_of_use']['engineering_assessment']}}</dd>
</div>
<div>
<dt>Data Transfers</dt>
<dd>{{data['details_of_use']['data_transfers']}}</dd>
</div>
<div>
<dt>Expected Completion Date</dt>
<dd>{{data['details_of_use']['expected_completion_date']}}</dd>
</div>
<div>
<dt>Cloud Native</dt>
<dd>{{data['details_of_use']['cloud_native']}}</dd>
</div>
<div>
<dt>Estimated Monthly Spend</dt>
<dd>{{data['details_of_use']['estimated_monthly_spend']}}</dd>
</div>
<div>
<dt>Total Spend</dt>
<dd>${{data['details_of_use']['dollar_value']}}</dd>
</div>
<div>
<dt>Number of User Sessions</dt>
<dd>{{data['details_of_use']['number_user_sessions']}}</dd>
</div>
<div>
<dt>Average Daily Traffic</dt>
<dd>{{data['details_of_use']['average_daily_traffic']}}</dd>
</div>
<div>
<dt>Start Date</dt>
<dd>{{data['details_of_use']['start_date']}}</dd>
</div>
</dl>
<h2>Information About You <a href="{{ reverse_url('request_form_update', 2, request_id) }}" class="icon-link">Edit</a></h2>
<label>POC First Name</label>
<b>{{ data['primary_poc']['fname_poc']}}</b>
<dl>
<div>
<dt>First Name</dt>
<dd>{{data['information_about_you']['fname_request']}}</dd>
</div>
<label>POC Last Name</label>
<b>{{ data['primary_poc']['lname_poc']}}</b>
<div>
<dt>Last Name</dt>
<dd>{{data['information_about_you']['lname_request']}}</dd>
</div>
<label>POC Email (associated with CAC)</label>
<b>{{ data['primary_poc']['email_poc']}} </b>
<div>
<dt>Email Address</dt>
<dd>{{data['information_about_you']['email_request']}}</dd>
</div>
<label>DOD ID</label>
<b>{{ data['primary_poc']['dodid_poc']}}</b>
<div>
<dt>Phone Number</dt>
<dd>{{data['information_about_you']['phone_number']}}</dd>
</div>
<div>
<dt>Service Branch or Agency</dt>
<dd>{{data['information_about_you']['service_branch']}}</dd>
</div>
<div>
<dt>Citizenship</dt>
<dd>{{data['information_about_you']['citizenship']}}</dd>
</div>
<div>
<dt>Designation of Person</dt>
<dd>{{data['information_about_you']['designation']}}</dd>
</div>
<div>
<dt>Latest Information Assurance (IA) Training completion date</dt>
<dd>{{data['information_about_you']['date_latest_training']}}</dd>
</div>
</dl>
<h2>Primary Point of Contact <a href="{{ reverse_url('request_form_update', 3, request_id) }}" class="icon-link">Edit</a></h2>
<dl>
<div>
<dt>POC First Name</dt>
<dd>{{data['primary_poc']['fname_poc']}}</dd>
</div>
<div>
<dt>POC Last Name</dt>
<dd>{{data['primary_poc']['lname_poc']}}</dd>
</div>
<div>
<dt>POC Email Address</dt>
<dd>{{data['primary_poc']['email_poc']}}</dd>
</div>
<div>
<dt>DOD ID</dt>
<dd>{{data['primary_poc']['dodid_poc']}}</dd>
</div>
</dl>
<br><br>
{% end %}
{% block next %}
{% if not can_submit %}
<b class="usa-input-error-message">Please complete all required fields before submitting.</b>
{% module Alert('There were some errors',
message="<p>Please complete all required fields before submitting.</p>",
level='error'
) %}
{% end %}
<input type='submit' class='usa-button usa-button-primary' value='Submit' {{ "disabled" if not can_submit else "" }} />
<div class='action-group'>
<input type='submit' class='usa-button usa-button-primary' value='Submit' {{ "disabled" if not can_submit else "" }} />
</div>
</form>
{% end %}

View File

@ -4,12 +4,15 @@
{% autoescape None %}
{% if f.errors %}
<b class="usa-input-error-message">There were some errors, see below.</b>
{% module Alert('There were some errors',
message="<p>Please complete all the fields before submitting.</p>",
level='error'
) %}
{% end %}
<h2 id="financial-verification">Financial Verification</h2>
<p class="usa-font-lead">In order to get you access to the JEDI Cloud, we will need you to enter the details below that will help us verify and account for your Task Order.</p>
<p>In order to get you access to the JEDI Cloud, we will need you to enter the details below that will help us verify and account for your Task Order.</p>
{{ f.task_order_id.label }}
{{ f.task_order_id(placeholder="Example: 1234567899C0001") }}

View File

@ -8,32 +8,38 @@
<div class="panel">
<main class="panel__content">
<div class="panel__heading">
<h1>New Request</h1>
<div class="subtitle">{% block subtitle %}{% end %}</div>
</div>
<div class="panel__heading">
<h1>New Request</h1>
<div class="subtitle">{% block subtitle %}{% end %}</div>
</div>
{% block form_action %}
{% if request_id %}
<form method='POST' action="{{ reverse_url('request_form_update', current, request_id) }}" autocomplete="off">
{% else %}
<form method='POST' action="{{ reverse_url('request_form_new', current) }}" autocomplete="off">
{% end %}
<div class="panel__content">
{% block form_action %}
{% if request_id %}
<form method='POST' action="{{ reverse_url('request_form_update', current, request_id) }}" autocomplete="off">
{% else %}
<form method='POST' action="{{ reverse_url('request_form_new', current) }}" autocomplete="off">
{% end %}
{% end %}
{% module xsrf_form_html() %}
{% block form %}
form goes here
{% end %}
{% block next %}
<input type='submit' class='usa-button usa-button-primary' value='Save & Continue' />
{% end %}
</form>
{% module xsrf_form_html() %}
{% block form %}
form goes here
{% end %}
</main>
</div>
</div>
{% block next %}
<div class='action-group'>
<input type='submit' class='usa-button usa-button-primary' value='Save & Continue' />
</div>
{% end %}
</form>
</div>
{% end %}

View File

@ -1,10 +0,0 @@
import wtforms
import pytest
from atst.forms.request import RequestForm
form = RequestForm()
def test_form_has_expected_fields():
label = form.dollar_value.label
assert "estimated dollar value" in label.text

View File

@ -4,7 +4,7 @@ import tornado
import urllib
from tests.mocks import MOCK_USER
ERROR_CLASS = "usa-input-error-message"
ERROR_CLASS = "alert--error"
@pytest.mark.gen_test
def test_submit_invalid_request_form(monkeypatch, http_client, base_url):