From 3358aa99ba28cfb225c00cf457e1c14bf3486d34 Mon Sep 17 00:00:00 2001 From: Montana Date: Fri, 25 Jan 2019 09:28:20 -0500 Subject: [PATCH] Add basic review page --- atst/routes/portfolios/task_orders.py | 8 +- templates/portfolios/task_orders/review.html | 224 +++++++++++++++++++ translations.yaml | 2 + 3 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 templates/portfolios/task_orders/review.html diff --git a/atst/routes/portfolios/task_orders.py b/atst/routes/portfolios/task_orders.py index 928d15db..3dd4c08e 100644 --- a/atst/routes/portfolios/task_orders.py +++ b/atst/routes/portfolios/task_orders.py @@ -71,7 +71,13 @@ def view_task_order(portfolio_id, task_order_id): @portfolios_bp.route("/portfolios//task_order//review") def review_task_order(portfolio_id, task_order_id): - return render_template("/portfolios/task_orders/review.html") + portfolio = Portfolios.get(g.current_user, portfolio_id) + task_order = TaskOrders.get(g.current_user, task_order_id) + return render_template( + "/portfolios/task_orders/review.html", + portfolio=portfolio, + task_order=task_order, + ) @portfolios_bp.route( diff --git a/templates/portfolios/task_orders/review.html b/templates/portfolios/task_orders/review.html new file mode 100644 index 00000000..7089b383 --- /dev/null +++ b/templates/portfolios/task_orders/review.html @@ -0,0 +1,224 @@ +{% extends "base.html" %} + +{% from "components/edit_link.html" import EditLink %} +{% from "components/required_label.html" import RequiredLabel %} +{% from "components/icon.html" import Icon %} + +{% block content %} + +
+ + {% include "fragments/flash.html" %} + + {% macro TOEditLink(screen=1, anchor=None) %} + {% if task_order %} + {{ EditLink(url_for("task_orders.new", screen=screen, task_order_id=task_order.id, _anchor=anchor)) }} + {% else %} + {{ EditLink(url_for("task_orders.new", screen=screen, _anchor=anchor)) }} + {% endif %} + {% endmacro %} + + {% macro ReviewField(heading, field, filter=None) %} +
+

{{ heading }}

+ {% if field %} +

{{ field | findFilter(filter) }}

+ {% else %} + {{ RequiredLabel() }} + {% endif %} + {% if caller %} + {{ caller() }} + {% endif %} +
+ {% endmacro %} + + {% macro ReviewOfficerInfo(heading, first_name, last_name, email, phone_number, dod_id, officer) %} +
+

{{ heading | translate }}

+ {{ first_name }} {{ last_name }}
+ {{ email }}
+ {% if phone_number %} + {{ phone_number | usPhone }} + {% else %} + {{ RequiredLabel() }} + {% endif %} +
+ {{ "task_orders.new.review.dod_id" | translate }} {{ dod_id}}
+ {% if officer %} + {{ Icon('ok', classes='icon--green') }} {{ "task_orders.new.review.invited"| translate }} + {% else %} + {{ Icon('alert', classes='icon--red') }} {{ "task_orders.new.review.not_invited"| translate }} + {% endif %} +
+ {% endmacro %} + +
+ +
+

+
Task Order Builder
+ {{ "task_orders.new.review.section_title"| translate }} +

+
+ +
+
{{ "task_orders.new.review.app_info"| translate }}
+ +
+ {{ ReviewField(("task_orders.new.review.portfolio" | translate), task_order.portfolio_name) }} + {{ ReviewField(("task_orders.new.review.dod" | translate), task_order.defense_component, filter="normalizeOrder") }} +
+
+ {{ ReviewField(("task_orders.new.review.scope" | translate), task_order.scope) }} +
+
+ +
{{ "task_orders.new.review.reporting"| translate }}
+ +
+ {{ ReviewField(("forms.task_order.app_migration.label" | translate), ("forms.task_order.app_migration.{}".format(task_order.app_migration) | translate), filter="removeHtml") }} + {{ ReviewField(("forms.task_order.native_apps.label" | translate), ("forms.task_order.native_apps.{}".format(task_order.native_apps))| translate) }} +
+ +

{{ "task_orders.new.review.complexity"| translate }}

+ {% if task_order.complexity %} +
    + {% for item in task_order.complexity %} +
  • + {{ Icon('ok', classes='icon--gray icon--medium') }}{{ "forms.task_order.complexity.{}".format(item) | translate }}{% if item == 'other' %}: {{ task_order.complexity_other }}{% endif %} +
  • + {% endfor %} +
+ {% else %} +

{{ RequiredLabel() }}

+ {% endif %} + +
+
+

{{ "task_orders.new.review.team"| translate }}

+ {% if task_order.dev_team %} +
    + {% for item in task_order.dev_team %} +
  • + {% if item == 'other' %} + {{ Icon('ok', classes='icon--gray icon--medium') }}Other: {{ task_order.dev_team_other }} + {% else %} + {{ Icon('ok', classes='icon--gray icon--medium') }}{{ "forms.task_order.dev_team.{}".format(item) | translate }} + {% endif %} +
  • + {% endfor %} +
+ {% else %} +

{{ RequiredLabel() }}

+ {% endif %} +
+ + {{ ReviewField(("forms.task_order.team_experience.label" |translate), ("forms.task_order.team_experience.{}".format(task_order.team_experience)) | translate) }} +
+ +
+ +
{{ "task_orders.new.review.funding"| translate }}
+ +
+ {% call ReviewField(("task_orders.new.review.performance_period" | translate), task_order.performance_length, filter="translateDuration") %} + {% if task_order.csp_estimate %} +

+ {{ Icon('download') }} {{ "task_orders.new.review.usage_est_link"| translate }} +

+ {% else %} +
+ {{ Icon('download') }} {{ "task_orders.new.review.usage_est_link"| translate }} + {{ Icon('alert', classes='icon--red') }} {{ "task_orders.new.review.not_uploaded"| translate }} + {% endif %} + {% endcall %} + +
+ + + + + + + + + + + + + + + + + + + + + + + +

{{ "task_orders.new.review.to_value"| translate }}

+ {% if task_order.budget %} + {{ task_order.budget | dollarsWithCents }} + {% endif %} +

{{ "task_orders.new.review.clin_1"| translate }}

+ {% if task_order.clin_01 %} + {{ task_order.clin_01 | dollarsWithCents }} + {% else %} + {{ RequiredLabel() }} + {% endif %} +

+ {{ "task_orders.new.review.clin_2"| translate }} + {% if not config.CLASSIFIED %} +
{{ "task_orders.new.review.classified_inactive"| translate }}
+ {% endif %} +

+ {% if task_order.clin_02 and config.CLASSIFIED %} + {{ task_order.clin_02 | dollarsWithCents or RequiredLabel() }} + {% endif %} +

{{ "task_orders.new.review.clin_3"| translate }}

+ {% if task_order.clin_03 %} + {{ task_order.clin_03 | dollarsWithCents or RequiredLabel() }} + {% else %} + {{ RequiredLabel() }} + {% endif %} +

+ {{ "task_orders.new.review.clin_4"| translate }} + {% if not config.CLASSIFIED %} +
{{ "task_orders.new.review.classified_inactive"| translate }}
+ {% endif %} +

+ {% if task_order.clin_04 and config.CLASSIFIED %} + {{ task_order.clin_04 | dollarsWithCents or RequiredLabel() }} + {% endif %} +
+
+
+ +
+ +
{{ "task_orders.new.review.oversight"| translate }}
+ +
+ {{ ReviewOfficerInfo("task_orders.new.review.ko", task_order.ko_first_name, task_order.ko_last_name, task_order.ko_email, task_order.ko_phone_number, task_order.ko_dod_id, task_order.contracting_officer) }} + {{ ReviewOfficerInfo("task_orders.new.review.cor", task_order.cor_first_name, task_order.cor_last_name, task_order.cor_email, task_order.cor_phone_number, task_order.cor_dod_id, task_order.contracting_officer_representative) }} +
+
+ {{ ReviewOfficerInfo("task_orders.new.review.so", task_order.so_first_name, task_order.so_last_name, task_order.so_email, task_order.so_phone_number, task_order.so_dod_id, task_order.security_officer) }} +
+ +
+ +
{{ "task_orders.ko_review.task_order_information"| translate }}
+ +
+
+ +
+ +
+ + + +
+{% endblock %} diff --git a/translations.yaml b/translations.yaml index 6b7ad7fa..ccc6878c 100644 --- a/translations.yaml +++ b/translations.yaml @@ -456,6 +456,8 @@ task_orders: description: Your Security Officer will need to answer some security configuration questions in order to generate a DD-254 document, then electronically sign. add_button_text: Add / Invite Security Officer invite_button_text: Invite Security Officer + ko_review: + task_order_information: Task Order Information testing: example_string: Hello World example_with_variables: 'Hello, {name}!'