Merge branch 'master' into ie/fix-toggler
This commit is contained in:
@@ -1,24 +1,35 @@
|
||||
{% from "components/icon.html" import Icon %}
|
||||
{% from "components/tooltip.html" import Tooltip %}
|
||||
|
||||
{% macro TextInput(field, tooltip='', placeholder='', validation='anything', paragraph=False, initial_value='') -%}
|
||||
{% macro TextInput(
|
||||
field,
|
||||
label=field.label | striptags,
|
||||
description=field.description,
|
||||
tooltip='',
|
||||
placeholder='',
|
||||
validation='anything',
|
||||
paragraph=False,
|
||||
initial_value='',
|
||||
noMaxWidth=False) -%}
|
||||
|
||||
<textinput
|
||||
name='{{ field.name }}'
|
||||
validation='{{ validation }}'
|
||||
{% if paragraph %}paragraph='true'{% endif %}
|
||||
{% if noMaxWidth %}no-max-width='true'{% endif %}
|
||||
{% if initial_value or field.data %}initial-value='{{ initial_value or field.data }}'{% endif %}
|
||||
{% if field.errors %}v-bind:initial-errors='{{ field.errors }}'{% endif %}
|
||||
key='{{ field.name }}'
|
||||
inline-template>
|
||||
|
||||
<div
|
||||
v-bind:class="['usa-input usa-input--validation--' + validation, { 'usa-input--error': showError, 'usa-input--success': showValid, 'usa-input--validation--paragraph': paragraph }]">
|
||||
v-bind:class="['usa-input usa-input--validation--' + validation, { 'usa-input--error': showError, 'usa-input--success': showValid, 'usa-input--validation--paragraph': paragraph, 'no-max-width': noMaxWidth }]">
|
||||
|
||||
<label for={{field.name}}>
|
||||
<div class="usa-input__title">{{ field.label | striptags }} {% if tooltip %}{{ Tooltip(tooltip) }}{% endif %}</div>
|
||||
<div class="usa-input__title">{{ label }} {% if tooltip %}{{ Tooltip(tooltip) }}{% endif %}</div>
|
||||
|
||||
{% if field.description %}
|
||||
<span class='usa-input__help'>{{ field.description | safe }}</span>
|
||||
<span class='usa-input__help'>{{ description | safe }}</span>
|
||||
{% endif %}
|
||||
|
||||
<span v-show='showError'>{{ Icon('alert',classes="icon-validation") }}</span>
|
||||
|
@@ -17,7 +17,7 @@
|
||||
{{ Icon('avatar', classes='topbar__link-icon') }}
|
||||
</a>
|
||||
|
||||
<a href="/" class="topbar__link" title='Log out of JEDI Cloud'>
|
||||
<a href="{{ url_for('atst.logout') }}" class="topbar__link" title='Log out of JEDI Cloud'>
|
||||
{{ Icon('logout', classes='topbar__link-icon') }}
|
||||
</a>
|
||||
</div>
|
||||
|
@@ -6,6 +6,10 @@
|
||||
|
||||
{% include 'requests/menu.html' %}
|
||||
|
||||
{% if review_comment %}
|
||||
{% include 'requests/comment.html' %}
|
||||
{% endif %}
|
||||
|
||||
{% block form_action %}
|
||||
{% if request_id %}
|
||||
<form method='POST' action="{{ url_for('requests.requests_form_update', screen=current, request_id=request_id) }}" autocomplete="off">
|
||||
|
@@ -6,8 +6,9 @@
|
||||
<div>
|
||||
<dt>{{ title | safe }}</dt>
|
||||
<dd>
|
||||
{% if data[section] and data[section][item_name] %}
|
||||
{{ data[section][item_name] | findFilter(filter, filter_args) }}
|
||||
{% set value = data.get(section, {}).get(item_name) %}
|
||||
{% if value is not none %}
|
||||
{{ value | findFilter(filter, filter_args) }}
|
||||
{% else %}
|
||||
{{ RequiredLabel() }}
|
||||
{% endif %}
|
||||
@@ -23,8 +24,6 @@
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
<hr>
|
||||
<h2>
|
||||
Details of Use
|
||||
{% if editable %}
|
||||
|
@@ -16,8 +16,9 @@
|
||||
{% endif %}
|
||||
|
||||
<section class='panel'>
|
||||
<header class='panel__heading request-approval__heading'>
|
||||
<h1 class='h2'>Request #{{ request.id }}</h1>
|
||||
<header class='panel__heading panel__heading--divider request-approval__heading'>
|
||||
<h1 class='h2'>Request #{{ request.id }}
|
||||
</h1>
|
||||
<span class='label label--info'>{{ current_status }}</span>
|
||||
</header>
|
||||
|
||||
@@ -32,153 +33,162 @@
|
||||
</section>
|
||||
|
||||
{% if pending_review %}
|
||||
<form method="POST" action="{{ url_for("requests.submit_approval", request_id=request.id) }}" autocomplete="off">
|
||||
{{ f.csrf_token }}
|
||||
<section class='panel'>
|
||||
<header class='panel__heading'>
|
||||
<h2 class='h3'>Approval Notes</h2>
|
||||
</header>
|
||||
<section class='request-approval__review'>
|
||||
<form method="POST" action="{{ url_for("requests.submit_approval", request_id=request.id) }}" autocomplete="off">
|
||||
{{ f.csrf_token }}
|
||||
|
||||
<div class='panel__content'>
|
||||
<ccpo-approval inline-template>
|
||||
<div>
|
||||
<div class='panel'>
|
||||
<div class='panel__content'>
|
||||
<h2>Review this Request</h2>
|
||||
|
||||
<div class="form__sub-fields">
|
||||
<div class='usa-input'>
|
||||
<fieldset class='usa-input__choices usa-input__choices--inline'>
|
||||
<input v-on:change='setReview' type='radio' name='review' id='review-approving' value='approving'/>
|
||||
<label for='review-approving'>Ready for approval</label>
|
||||
|
||||
<h3>Instructions for the Requestor</h3>
|
||||
<input v-on:change='setReview' type='radio' name='review' id='review-denying' value='denying'/>
|
||||
<label for='review-denying'>Request revisions</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
Provide instructions or notes for additional information that is necessary to approve the request here. The requestor may then re-submit the updated request or initiate contact outside of AT-AT if further discussion is required. <b>These notes will be visible to the person making the JEDI Cloud request</b>.
|
||||
<div v-if='approving || denying' class='form__sub-fields' v-cloak>
|
||||
<h3>Message to Requestor <span class='subtitle'>(optional)</span></h3>
|
||||
<div v-if='approving' key='approving' v-cloak>
|
||||
{{ TextInput(
|
||||
f.comment,
|
||||
label='Approval comments or notes',
|
||||
description='Provide any comments or notes regarding the approval of this request. <strong>This message will be shared with the person making the JEDI request.</strong>.',
|
||||
paragraph=True,
|
||||
noMaxWidth=True
|
||||
) }}
|
||||
</div>
|
||||
|
||||
{{ TextInput(f.comment, paragraph=True, placeholder="Add notes or comments explaining what changes are being requested or why further discussion is needed about this request.") }}
|
||||
<div v-else key='denying' v-cloak>
|
||||
{{ TextInput(
|
||||
f.comment,
|
||||
label='Revision instructions or notes',
|
||||
paragraph=True,
|
||||
noMaxWidth=True
|
||||
) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-if='approving' class='form__sub-fields' v-cloak>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-col">
|
||||
<h3>Authorizing Officials</h3>
|
||||
<p>This section is not visible to the person making the request. It is only viewable by CCPO staff.</p>
|
||||
<p>Provide the name of the key officials for both parties that have authorized this request to move forward.</p>
|
||||
<h3>Authorizing Officials <span class='subtitle'>(optional)</span></h3>
|
||||
<p>Provide the name of the key officials for both parties that have authorized this request to move forward. <strong>This section is not visible to the person making the request. It is only viewable by CCPO staff.</strong></p>
|
||||
|
||||
<hr />
|
||||
|
||||
<h4>Mission Authorizing Official</h4>
|
||||
|
||||
<div class='form-row'>
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.fname_mao, placeholder="First name of mission authorizing official") }}
|
||||
</div>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.lname_mao, placeholder="Last name of mission authorizing official") }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='form-row'>
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.email_mao, placeholder="name@mail.mil", validation='email') }}
|
||||
</div>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.phone_mao, placeholder="(123) 456-7890", validation='usPhone') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<h4>CCPO Authorizing Official</h4>
|
||||
|
||||
<div class='form-row'>
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.fname_ccpo, placeholder="First name of CCPO authorizing official") }}
|
||||
</div>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.lname_ccpo, placeholder="Last name of CCPO authorizing official") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if='approving || denying' class='action-group' v-cloak>
|
||||
<button v-if='approving' type="submit" name="approved" class='usa-button usa-button-big'>Approve Request</button>
|
||||
<button v-if='denying' type="submit" name="denied" class='usa-button usa-button-big'>Request Revisions</button>
|
||||
<a href='{{ url_for("requests.requests_index") }}' class='icon-link'>
|
||||
{{ Icon('x') }}
|
||||
<span>Cancel</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="h3">Mission Authorizing Official</h4>
|
||||
|
||||
|
||||
<div class='form-row'>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.fname_mao, placeholder="First name of mission authorizing official") }}
|
||||
</div>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.lname_mao, placeholder="Last name of mission authorizing official") }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class='form-row'>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.email_mao, placeholder="name@mail.mil") }}
|
||||
</div>
|
||||
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.phone_mao, placeholder="(123) 456-7890", validation='usPhone') }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h4 class="h3">CCPO Authorizing Official</h4>
|
||||
|
||||
<div class='form-row'>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.fname_ccpo, placeholder="First name of CCPO authorizing official") }}
|
||||
</div>
|
||||
|
||||
<div class='form-col form-col--half'>
|
||||
{{ TextInput(f.lname_ccpo, placeholder="Last name of CCPO authorizing official") }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
<section class='action-group'>
|
||||
<input type="submit" name="approved" class='usa-button usa-button-big' value='Approve Request'>
|
||||
<input type="submit" name="denied" class='usa-button usa-button-big usa-button-secondary' value='Mark as Changes Requested'>
|
||||
<a href='{{ url_for("requests.requests_index") }}' class='icon-link'>
|
||||
{{ Icon('x') }}
|
||||
<span>Cancel</span>
|
||||
</a>
|
||||
</section>
|
||||
</form>
|
||||
</ccpo-approval>
|
||||
</form>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
<section class='panel'>
|
||||
<h4 class="h3">CCPO Internal Notes</h4>
|
||||
<p>You may add additional comments and notes for internal CCPO reference and follow-up here.</p>
|
||||
<div class='form-row'>
|
||||
<div class='form-col'>
|
||||
<form method="POST" action="{{ url_for('requests.create_internal_comment', request_id=request.id) }}">
|
||||
{{ internal_comment_form.csrf_token }}
|
||||
{{ TextInput(internal_comment_form.text, paragraph=True) }}
|
||||
<button type="submit">Leave comment</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class='panel'>
|
||||
<header class='panel__heading panel__heading--divider'>
|
||||
<h2 class='h3 request-approval__columns__heading'>CCPO Activity Log</h2>
|
||||
</header>
|
||||
|
||||
<section class='panel'>
|
||||
<header class='panel__heading'>
|
||||
<h2 class='h3 request-approval__columns__heading'>Approval Log</h2>
|
||||
</header>
|
||||
<div>
|
||||
<div class='approval-log'>
|
||||
{% if reviews %}
|
||||
<ol>
|
||||
{% for review in reviews %}
|
||||
<li>
|
||||
<article class='approval-log__log-item'>
|
||||
<div>
|
||||
{{ review.log_name }}
|
||||
<h3 class='approval-log__log-item__header'>{{ review.status.log_name }} by {{ review.full_name_reviewer }}</h3>
|
||||
{% if review.comment %}
|
||||
<p>{{ review.comment }}</p>
|
||||
{% endif %}
|
||||
|
||||
{% for status_event in status_events %}
|
||||
{% if status_event.review %}
|
||||
<li>
|
||||
<article class='approval-log__log-item'>
|
||||
<div>
|
||||
<h3 class='approval-log__log-item__header'>{{ status_event.log_name }} by {{ status_event.review.full_name_reviewer }}</h3>
|
||||
{% if status_event.review.comment %}
|
||||
<p>{{ status_event.review.comment }}</p>
|
||||
<div class='approval-log__behalfs'>
|
||||
{% if review.lname_mao %}
|
||||
<div class='approval-log__behalf'>
|
||||
<h3 class='approval-log__log-item__header'>Mission Owner approval on behalf of:</h3>
|
||||
<span>{{ review.full_name_mao }}</span>
|
||||
<span>{{ review.email_mao }}</span>
|
||||
<span>{{ review.phone_mao }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class='approval-log__behalfs'>
|
||||
{% if status_event.review.lname_mao %}
|
||||
<div class='approval-log__behalf'>
|
||||
<h3 class='approval-log__log-item__header'>Mission Owner approval on behalf of:</h3>
|
||||
<span>{{ status_event.review.full_name_mao }}</span>
|
||||
<span>{{ status_event.review.email_mao }}</span>
|
||||
<span>{{ status_event.review.phone_mao }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if status_event.review.lname_ccpo %}
|
||||
<div class='approval-log__behalf'>
|
||||
<h3 class='approval-log__log-item__header'>CCPO approval on behalf of:</h3>
|
||||
<span>{{ status_event.review.full_name_ccpo }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if review.lname_ccpo %}
|
||||
<div class='approval-log__behalf'>
|
||||
<h3 class='approval-log__log-item__header'>CCPO approval on behalf of:</h3>
|
||||
<span>{{ review.full_name_ccpo }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% set timestamp=status_event.time_created | formattedDate("%Y-%m-%d %H:%M:%S %Z") %}
|
||||
<footer class='approval-log__log-item__timestamp'><time datetime='{{ timestamp }}'>{{ timestamp }}</time></footer>
|
||||
</article>
|
||||
</li>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% set timestamp=review.status.time_created | formattedDate("%Y-%m-%d %H:%M:%S %Z") %}
|
||||
<footer class='approval-log__log-item__timestamp'>
|
||||
<local-datetime timestamp='{{ timestamp }}'></local-datetime>
|
||||
</footer>
|
||||
</article>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
</ol>
|
||||
{% else %}
|
||||
<div class='panel__content'>
|
||||
<p class='h4'>No CCPO approvals or request changes have been recorded yet.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
|
||||
{% endblock %}
|
||||
|
9
templates/requests/comment.html
Normal file
9
templates/requests/comment.html
Normal file
@@ -0,0 +1,9 @@
|
||||
{% from "components/alert.html" import Alert %}
|
||||
|
||||
{% call Alert('Changes Requested', level='warning') %}
|
||||
<p>CCPO has requested changes to your submission with the following notes:
|
||||
<br>
|
||||
{{ review_comment }}
|
||||
<br>
|
||||
Please contact info@jedi.cloud or 123-123-4567 for further discussion.</p>
|
||||
{% endcall %}
|
@@ -5,21 +5,28 @@
|
||||
{% block content %}
|
||||
<div class="col">
|
||||
|
||||
{% if financial_verification %}
|
||||
{% include 'requests/review_menu.html' %}
|
||||
{% endif %}
|
||||
{% if request.is_pending_ccpo_acceptance %}
|
||||
|
||||
{{ Alert('Request submitted. Approval pending.', fragment="fragments/pending_ccpo_acceptance_alert.html") }}
|
||||
|
||||
{% elif request.is_pending_ccpo_approval %}
|
||||
|
||||
{% call Alert('Pending CCPO Approval') %}
|
||||
<p>The CCPO will review and respond to your Financial Verification submission in 3 business days. You will be notified via email or phone.</p>
|
||||
<p>Once the financial verification is approved you will be invited to create your JEDI Workspace and set-up your projects. Click here for more details.</p>
|
||||
{% endcall %}
|
||||
|
||||
{% elif requires_fv_action %}
|
||||
|
||||
{{ Alert('Pending Financial Verification', fragment="fragments/pending_financial_verification.html") }}
|
||||
{% include 'requests/review_menu.html' %}
|
||||
|
||||
{% if pending_review %}
|
||||
{{ Alert('Your request is being reviewed',
|
||||
message="<p>You cannot edit your submitted request while it is under review. Your request will be reviewed within 3 business days.</p>",
|
||||
level='warning'
|
||||
) }}
|
||||
{% endif %}
|
||||
|
||||
<div class="panel">
|
||||
<div class="panel__heading">
|
||||
<h1>Request Details</h1><br/>
|
||||
<h2>#{{ request_id }} <span class="label label--info">{{ status }}</span></h2>
|
||||
<h2>#{{ request.id }} <span class="label label--info">{{ request.status_displayname }}</span></h2>
|
||||
</div>
|
||||
|
||||
<div class="panel__content">
|
||||
|
@@ -8,6 +8,14 @@
|
||||
|
||||
{% include 'requests/review_menu.html' %}
|
||||
|
||||
{% if request.is_pending_financial_verification %}
|
||||
{{ Alert('Pending Financial Verification', fragment="fragments/pending_financial_verification.html") }}
|
||||
{% endif %}
|
||||
|
||||
{% if review_comment %}
|
||||
{% include 'requests/comment.html' %}
|
||||
{% endif %}
|
||||
|
||||
<financial inline-template v-bind:initial-data='{{ f.data|mixedContentToJson }}'>
|
||||
<div class="col">
|
||||
|
||||
@@ -19,21 +27,18 @@
|
||||
{% endif %}
|
||||
|
||||
{% if f.is_missing_task_order_number %}
|
||||
{% set extended_url = url_for('requests.financial_verification', request_id=request_id, extended=True) %}
|
||||
{{ Alert('Task Order not found in EDA',
|
||||
message="We could not find your Task Order in our system of record, EDA.
|
||||
Please confirm that you have entered it correctly.<br>
|
||||
<a class=\"usa-button\" href=\"%s\">Enter Task Order information manually</a>
|
||||
"|format(extended_url),
|
||||
level='warning'
|
||||
) }}
|
||||
{% set extended_url = url_for('requests.financial_verification', request_id=request.id, extended=True) %}
|
||||
{% call Alert('Task Order not found in EDA', level='warning') %}
|
||||
We could not find your Task Order in our system of record, EDA. Please confirm that you have entered it correctly.<br>
|
||||
<a class="usa-button" href="{{ extended_url }}">Enter Task Order information manually</a>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
|
||||
{% block form_action %}
|
||||
{% if extended %}
|
||||
<form method='POST' action="{{ url_for('requests.financial_verification', request_id=request_id, extended=True) }}" autocomplete="off" enctype="multipart/form-data">
|
||||
<form method='POST' action="{{ url_for('requests.financial_verification', request_id=request.id, extended=True) }}" autocomplete="off" enctype="multipart/form-data">
|
||||
{% else %}
|
||||
<form method='POST' action="{{ url_for('requests.financial_verification', request_id=request_id) }}" autocomplete="off">
|
||||
<form method='POST' action="{{ url_for('requests.financial_verification', request_id=request.id) }}" autocomplete="off">
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -52,7 +57,7 @@
|
||||
|
||||
<div class="panel__heading">
|
||||
<h1>Financial Verification</h1>
|
||||
<div class="subtitle" id="financial-verification"><h2>Order #{{ request_id }}</h2></div>
|
||||
<div class="subtitle" id="financial-verification"><h2>Order #{{ request.id }}</h2></div>
|
||||
</div>
|
||||
|
||||
<div class="panel__content">
|
||||
|
@@ -45,18 +45,6 @@
|
||||
|
||||
{% else %}
|
||||
|
||||
{% if pending_financial_verification %}
|
||||
|
||||
{{ Alert('Pending Financial Verification', fragment="fragments/pending_financial_verification.html") }}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if pending_ccpo_approval %}
|
||||
|
||||
{{ Alert('Request submitted. Approval pending.', fragment="fragments/pending_ccpo_approval_alert.html") }}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if extended_view %}
|
||||
<div class="row kpi">
|
||||
<div class="kpi__item col col--grow">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{% set pending_url=url_for('requests.view_request_details', request_id=request_id) %}
|
||||
{% set financial_url=url_for('requests.financial_verification', request_id=request_id) %}
|
||||
{% set pending_url=url_for('requests.view_request_details', request_id=request.id) %}
|
||||
{% set financial_url=url_for('requests.financial_verification', request_id=request.id) %}
|
||||
<div class="progress-menu progress-menu--four">
|
||||
<ul>
|
||||
<li class="progress-menu__item progress-menu__item--complete">
|
||||
|
Reference in New Issue
Block a user