diff --git a/atst/routes/portfolios/task_orders.py b/atst/routes/portfolios/task_orders.py index 5ed29cb6..7fe47504 100644 --- a/atst/routes/portfolios/task_orders.py +++ b/atst/routes/portfolios/task_orders.py @@ -92,7 +92,8 @@ def submit_ko_review(portfolio_id, task_order_id, form=None): form = KOReviewForm(http_request.form) portfolio = Portfolios.get(g.current_user, portfolio_id) - if form.validate() and Authorization.check_is_ko(g.current_user, task_order): + if form.validate(): + Authorization.check_is_ko(g.current_user, task_order) TaskOrders.update(user=g.current_user, task_order=task_order, **form.data) return redirect( url_for( diff --git a/templates/components/review_field.html b/templates/components/review_field.html new file mode 100644 index 00000000..e05e8c70 --- /dev/null +++ b/templates/components/review_field.html @@ -0,0 +1,11 @@ +{% macro ReviewField(heading, field, filter=None) %} +
+

{{ heading }}

+ {% if field %} +

{{ field | findFilter(filter) }}

+ {% endif %} + {% if caller %} + {{ caller() }} + {% endif %} +
+{% endmacro %} diff --git a/templates/fragments/task_order_review/app_info.html b/templates/fragments/task_order_review/app_info.html new file mode 100644 index 00000000..93db4525 --- /dev/null +++ b/templates/fragments/task_order_review/app_info.html @@ -0,0 +1,9 @@ +{% from "components/review_field.html" import ReviewField %} + +
+ {{ 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) }} +
diff --git a/templates/fragments/task_order_review/funding.html b/templates/fragments/task_order_review/funding.html new file mode 100644 index 00000000..8b9e1225 --- /dev/null +++ b/templates/fragments/task_order_review/funding.html @@ -0,0 +1,72 @@ +{% from "components/review_field.html" import ReviewField %} + +
+ {% 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 }} + {% 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() }} + {% 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 %} +
+
+
diff --git a/templates/fragments/task_order_review/oversight.html b/templates/fragments/task_order_review/oversight.html new file mode 100644 index 00000000..cc519892 --- /dev/null +++ b/templates/fragments/task_order_review/oversight.html @@ -0,0 +1,25 @@ +{% 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 }} + {% 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 %} + +
+ {{ 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) }} +
diff --git a/templates/fragments/task_order_review/reporting.html b/templates/fragments/task_order_review/reporting.html new file mode 100644 index 00000000..0b30db0c --- /dev/null +++ b/templates/fragments/task_order_review/reporting.html @@ -0,0 +1,41 @@ +{% from "components/review_field.html" import ReviewField %} + +
+ {{ 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 %} + +{% else %} +

{{ RequiredLabel() }}

+{% endif %} + +
+
+

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

+ {% if task_order.dev_team %} + + {% else %} +

{{ RequiredLabel() }}

+ {% endif %} +
+ {{ ReviewField(("forms.task_order.team_experience.label" |translate), ("forms.task_order.team_experience.{}".format(task_order.team_experience)) | translate) }} +
diff --git a/templates/portfolios/task_orders/review.html b/templates/portfolios/task_orders/review.html index 42dbc156..e58d3850 100644 --- a/templates/portfolios/task_orders/review.html +++ b/templates/portfolios/task_orders/review.html @@ -6,7 +6,7 @@ {% from "components/date_picker.html" import DatePicker %} {% from "components/text_input.html" import TextInput %} {% from "components/alert.html" import Alert %} - +{% from "components/review_field.html" import ReviewField %} {% block content %} @@ -19,44 +19,6 @@ {% block form %} - {% 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) }}

- {% 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 }} - {% 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 %} - {% set message = "task_orders.ko_review.submitted_by" | translate({"name": task_order.creator.full_name}) %} {{ Alert(("task_orders.ko_review.alert_title" | translate), message, level='warning', @@ -73,147 +35,24 @@
{{ "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) }} -
+ {% include "fragments/task_order_review/app_info.html" %}
{{ "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 %} - - {% 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 %} -
- {% endif %} -
- - {{ ReviewField(("forms.task_order.team_experience.label" |translate), ("forms.task_order.team_experience.{}".format(task_order.team_experience)) | translate) }} -
- + {% include "fragments/task_order_review/reporting.html" %}
{{ "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 }} - {% 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() }} - {% 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 %} -
-
-
+ {% include "fragments/task_order_review/funding.html" %}
{{ DatePicker(form.start_date) }} {{ DatePicker(form.end_date) }}
-
{{ "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) }} -
- + {% include "fragments/task_order_review/oversight.html" %}
{{ "task_orders.ko_review.task_order_information"| translate }}
diff --git a/templates/task_orders/new/review.html b/templates/task_orders/new/review.html index dcca1abf..8834da68 100644 --- a/templates/task_orders/new/review.html +++ b/templates/task_orders/new/review.html @@ -3,6 +3,7 @@ {% from "components/edit_link.html" import EditLink %} {% from "components/required_label.html" import RequiredLabel %} {% from "components/icon.html" import Icon %} +{% from "components/review_field.html" import ReviewField %} {% block heading %} {{ "task_orders.new.review.section_title"| translate }} @@ -18,50 +19,9 @@ {% 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_orders.new.review.app_info"| translate }} {{ TOEditLink(screen=1) }}

- -
- {{ 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) }} -
+{% include "fragments/task_order_review/app_info.html" %}

{{ "task_orders.new.review.reporting"| translate }} {{ TOEditLink(screen=1, anchor="reporting") }}

@@ -133,95 +93,11 @@

{{ "task_orders.new.review.funding"| translate }} {{ TOEditLink(screen=2) }}

- -
- {% 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 | dollars }} - {% endif %} -

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

- {% if task_order.clin_01 %} - {{ task_order.clin_01 | dollars }} - {% 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 | dollars or RequiredLabel() }} - {% endif %} -

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

- {% if task_order.clin_03 %} - {{ task_order.clin_03 | dollars 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 | dollars or RequiredLabel() }} - {% endif %} -
-
-
- +{% include "fragments/task_order_review/funding.html" %}

{{ "task_orders.new.review.oversight"| translate }} {{ TOEditLink(screen=3) }}

- -
- {{ 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) }} -
- +{% include "fragments/task_order_review/oversight.html" %} {% endblock %} {% block next %}