Merge pull request #622 from dod-ccpo/oversight-invites-styling

Oversight invites styling
This commit is contained in:
leigh-mil 2019-02-12 11:58:58 -05:00 committed by GitHub
commit 3d7f79f8c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 103 additions and 35 deletions

View File

@ -1,5 +1,5 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms.fields import StringField 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
@ -15,6 +15,7 @@ class OfficerForm(FlaskForm):
email = StringField("Email", validators=[Optional(), Email()]) email = StringField("Email", validators=[Optional(), Email()])
phone_number = TelField("Phone Number", validators=[PhoneNumber()]) phone_number = TelField("Phone Number", validators=[PhoneNumber()])
dod_id = StringField("DoD ID", validators=[Optional(), Length(min=10), IsNumber()]) dod_id = StringField("DoD ID", validators=[Optional(), Length(min=10), IsNumber()])
invite = BooleanField("Invite to Task Order Builder")
class EditTaskOrderOfficersForm(CacheableForm): class EditTaskOrderOfficersForm(CacheableForm):

View File

@ -361,6 +361,48 @@
} }
.officer__form { .officer__form {
padding: 1.5rem;
background-color: $color-aqua-lightest;
border-left-color: $color-blue;
border-left-style: solid;
border-left-width: $gap / 2;
margin-top: 1.5rem;
.edit-officer {
margin-bottom: $gap * 2;
h4 {
color: $color-gray;
margin-top: 0;
}
p {
font-size: 1.5rem;
}
}
.usa-input__title {
font-weight: normal;
}
.form-row {
margin-bottom: 0rem;
margin-top: 0rem;
margin-right: 2rem;
.usa-input {
margin-bottom: 1.5rem;
}
&.officer__form--dodId {
margin-top: 1.5rem;
.usa-input {
margin-bottom: 0rem;
}
}
}
.officer__form--actions { .officer__form--actions {
display: flex; display: flex;
flex-direction: row; flex-direction: row;

View File

@ -1,11 +1,17 @@
{% macro CheckboxInput(field, inline=False, classes="") -%} {% macro CheckboxInput(
field,
label=field.label | striptags,
inline=False,
classes="") -%}
<checkboxinput name='{{ field.name }}' inline-template key='{{ field.name }}'> <checkboxinput name='{{ field.name }}' inline-template key='{{ field.name }}'>
<div class='usa-input {{ classes }} {% if field.errors %}usa-input--error{% endif %}'> <div class='usa-input {{ classes }} {% if field.errors %}usa-input--error{% endif %}'>
<fieldset v-on:change="onInput" class="usa-input__choices {% if inline %}usa-input__choices--inline{% endif %}"> <fieldset v-on:change="onInput" class="usa-input__choices {% if inline %}usa-input__choices--inline{% endif %}">
<legend> <legend>
{{ field() }} {{ field() }}
{{ field.label }} <label for={{field.name}}>
{{ label }}
</label>
{% if field.description %} {% if field.description %}
<span class='usa-input__help'>{{ field.description | safe }}</span> <span class='usa-input__help'>{{ field.description | safe }}</span>

View File

@ -13,11 +13,12 @@
</a> </a>
{% endmacro %} {% endmacro %}
{% macro EditOfficerInfo(form, officer_type) -%} {% macro EditOfficerInfo(form, officer_type, invited) -%}
<div class='officer__form'>
<template v-if="editing"> <template v-if="editing">
<div class='alert'> <div class='officer__form'>
<div class='alert__content'> <div class="edit-officer">
<h4>{{ ("task_orders.invitations." + officer_type + ".edit_title") | translate}}</h4>
</div>
<div class='form-row'> <div class='form-row'>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(form.first_name) }} {{ TextInput(form.first_name) }}
@ -37,9 +38,18 @@
{{ TextInput(form.phone_number, placeholder='(123) 456-7890', validation='usPhone') }} {{ TextInput(form.phone_number, placeholder='(123) 456-7890', validation='usPhone') }}
</div> </div>
</div> </div>
{% if form.dod_id.data %} <div class='form-row officer__form--dodId'>
{{ TextInput(form.dod_id, validation='dodId', disabled=True)}} <div class="form-col">
{% if not invited %}
<div class='form-row'>
{{ CheckboxInput(form.invite, label=(("forms.officers." + officer_type + "_invite") | translate)) }}
</div>
{% endif %} {% endif %}
<div class='form-row'>
{{ TextInput(form.dod_id, tooltip="task_orders.new.oversight.dod_id_tooltip" | translate, tooltip_title='Why', validation='dodId', disabled=invited)}}
</div>
</div>
</div>
<div class='alert__actions officer__form--actions'> <div class='alert__actions officer__form--actions'>
<a href="#{{ officer_type }}" v-on:click="cancel" class="icon-link"> <a href="#{{ officer_type }}" v-on:click="cancel" class="icon-link">
{{ Icon("x") }} {{ Icon("x") }}
@ -48,9 +58,7 @@
<input type='submit' class='usa-button usa-button-primary' value='Save Changes' /> <input type='submit' class='usa-button usa-button-primary' value='Save Changes' />
</div> </div>
</div> </div>
</div>
</template> </template>
</div>
{% endmacro %} {% endmacro %}
{% macro OfficerInfo(task_order, officer_type, form) %} {% macro OfficerInfo(task_order, officer_type, form) %}
@ -67,8 +75,11 @@
{% set email = task_order[prefix + "_email"] %} {% set email = task_order[prefix + "_email"] %}
{% set phone_number = task_order[prefix + "_phone_number"] %} {% set phone_number = task_order[prefix + "_phone_number"] %}
{% set dod_id = task_order[prefix + "_dod_id"] %} {% set dod_id = task_order[prefix + "_dod_id"] %}
{% set invited = False %}
{% if task_order[officer_type] %} {% if task_order[officer_type] %}
{% set invited = True %}
<div class="officer__info"> <div class="officer__info">
<div class="row"> <div class="row">
<div class="officer__info--name">{{ first_name }} {{ last_name }}</div> <div class="officer__info--name">{{ first_name }} {{ last_name }}</div>
@ -101,7 +112,7 @@
<div class="officer__actions"> <div class="officer__actions">
{{ Link("Update", "edit", onClick="edit") }} {{ Link("Update", "edit", onClick="edit") }}
{{ Link("Remove", "trash", classes="remove") }} {{ Link("Remove", "trash", classes="remove") }}
<button type='button' class='usa-button usa-button-primary'> <button v-if="!editing" type='button' class='usa-button usa-button-primary' v-on:click="edit">
{{ ("task_orders.invitations." + officer_type + ".invite_button_text") | translate }} {{ ("task_orders.invitations." + officer_type + ".invite_button_text") | translate }}
</button> </button>
</div> </div>
@ -113,13 +124,13 @@
</div> </div>
</div> </div>
<div class="officer__actions"> <div class="officer__actions">
<button type='button' class='usa-button usa-button-primary'> <button v-if="!editing" type='button' class='usa-button usa-button-primary' v-on:click="edit">
{{ ("task_orders.invitations." + officer_type + ".add_button_text") | translate }} {{ ("task_orders.invitations." + officer_type + ".add_button_text") | translate }}
</button> </button>
</div> </div>
{% endif %} {% endif %}
{{ EditOfficerInfo(form, officer_type) }} {{ EditOfficerInfo(form, officer_type, invited) }}
</div> </div>
</edit-officer-form> </edit-officer-form>
</div> </div>

View File

@ -254,6 +254,10 @@ forms:
portfolio: portfolio:
name_label: Portfolio Name name_label: Portfolio Name
name_length_validation_message: Portfolio names must be at least 4 and not more than 100 characters name_length_validation_message: Portfolio names must be at least 4 and not more than 100 characters
officers:
contracting_officer_invite: Invite KO to Task Order Builder
contracting_officer_representative_invite: Invite COR to Task Order Builder
security_officer_invite: Invite SO to Task Order Builder
fragments: fragments:
edit_application_form: edit_application_form:
explain: 'AT-AT allows you to create multiple applications within a portfolio. Each application can then be broken down into its own customizable environments.' explain: 'AT-AT allows you to create multiple applications within a portfolio. Each application can then be broken down into its own customizable environments.'
@ -461,21 +465,25 @@ task_orders:
pending_to: Pending TO Completion pending_to: Pending TO Completion
invitations: invitations:
dod_id_label: DoD ID dod_id_label: DoD ID
edit_text: A new invitation e-mail will be sent when new information is saved.
contracting_officer: contracting_officer:
title: Contracting Officer (KO) Information title: Contracting Officer (KO) Information
description: You'll need a signature from your KO. You might want to work with your program Financial Manager to get your TO documents moving in the right direction. description: You'll need a signature from your KO. You might want to work with your program Financial Manager to get your TO documents moving in the right direction.
add_button_text: Add / Invite KO add_button_text: Add / Invite KO
invite_button_text: Invite KO invite_button_text: Invite KO
edit_title: Edit KO
contracting_officer_representative: contracting_officer_representative:
title: Contracting Officer Representative (COR) Information title: Contracting Officer Representative (COR) Information
description: Your COR may assist in submitting the Task Order documents within their official system of record. description: Your COR may assist in submitting the Task Order documents within their official system of record.
add_button_text: Add / Invite COR add_button_text: Add / Invite COR
invite_button_text: Invite COR invite_button_text: Invite COR
edit_title: Edit COR
security_officer: security_officer:
title: IA Security Officer Information title: IA Security Officer Information
description: Your Security Officer will need to answer some security configuration questions in order to generate a DD-254 document, then digitally sign. description: Your Security Officer will need to answer some security configuration questions in order to generate a DD-254 document, then digitally sign.
add_button_text: Add / Invite Security Officer add_button_text: Add / Invite Security Officer
invite_button_text: Invite Security Officer invite_button_text: Invite Security Officer
edit_title: Edit SO
ko_review: ko_review:
alert_title: Verify Your Info alert_title: Verify Your Info
title: Task Order Builder title: Task Order Builder