diff --git a/atst/filters.py b/atst/filters.py
index 524d39bb..1c368aee 100644
--- a/atst/filters.py
+++ b/atst/filters.py
@@ -19,6 +19,14 @@ def dollars(value):
return "${:,.0f}".format(numberValue)
+def dollarsWithCents(value):
+ try:
+ numberValue = float(value)
+ except ValueError:
+ numberValue = 0
+ return "${:,.2f}".format(numberValue)
+
+
def usPhone(number):
phone = re.sub(r"\D", "", number)
return "+1 ({}) {} - {}".format(phone[0:3], phone[3:6], phone[6:])
@@ -113,6 +121,7 @@ def normalizeOrder(title):
def register_filters(app):
app.jinja_env.filters["iconSvg"] = iconSvg
app.jinja_env.filters["dollars"] = dollars
+ app.jinja_env.filters["dollarsWithCents"] = dollarsWithCents
app.jinja_env.filters["usPhone"] = usPhone
app.jinja_env.filters["readableInteger"] = readableInteger
app.jinja_env.filters["getOptionLabel"] = getOptionLabel
diff --git a/atst/forms/task_order.py b/atst/forms/task_order.py
index e84f5e07..5d1157d6 100644
--- a/atst/forms/task_order.py
+++ b/atst/forms/task_order.py
@@ -45,8 +45,8 @@ class AppInfoForm(CacheableForm):
default="",
)
native_apps = RadioField(
- translate("forms.task_order.native_apps_label"),
- description=translate("forms.task_order.native_apps_description"),
+ translate("forms.task_order.native_apps.label"),
+ description=translate("forms.task_order.native_apps.description"),
choices=[("yes", "Yes"), ("no", "No"), ("not_sure", "Not Sure")],
)
complexity = SelectMultipleField(
diff --git a/templates/task_orders/new/review.html b/templates/task_orders/new/review.html
index 929e2910..2e47acf1 100644
--- a/templates/task_orders/new/review.html
+++ b/templates/task_orders/new/review.html
@@ -18,56 +18,57 @@
{% endif %}
{% endmacro %}
-{% if task_order.defense_component %}
- {% set defense_component_description = task_order.defense_component | normalizeOrder %}
-{% endif %}
+{% macro ReviewField(heading, field, filter=None) %}
+
+
+ {% if field %}
+
{{ field | findFilter(filter) }}
+ {% else %}
+ {{ RequiredLabel() }}
+ {% endif %}
+ {% if caller %}
+ {{ caller() }}
+ {% endif %}
+
+{% endmacro %}
-{% if task_order.app_migration %}
- {% set app_migration_description = "forms.task_order.app_migration.{}".format(task_order.app_migration) | translate | removeHtml %}
-{% endif %}
-
-{% if task_order.native_apps %}
- {% set native_apps_description = "task_orders.new.review.{}_native".format(task_order.native_apps) | translate %}
-{% endif %}
-
-{% if task_order.team_experience %}
- {% set team_experience_description = "forms.task_order.team_experience.{}".format(task_order.team_experience) | translate %}
-{% endif %}
+{% macro ReviewOfficerInfo(heading, first_name, last_name, email, phone_number, dod_id, invite) %}
+
+
+ {{ first_name }} {{ last_name }}
+ {{ email }}
+ {% if phone_number %}
+ {{ phone_number | usPhone }}
+ {% else %}
+ {{ RequiredLabel() }}
+ {% endif %}
+
+ {{ "task_orders.new.review.dod_id" | translate }} {{ dod_id}}
+ {% if invite %}
+ {{ 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) }}
-
-
-
{{ task_order.portfolio_name or RequiredLabel() }}
-
-
-
-
-
{{ defense_component_description or RequiredLabel() }}
-
+ {{ 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_order.scope or RequiredLabel() }}
-
-
{{ "task_orders.new.review.reporting"| translate }} {{ TOEditLink(screen=1, anchor="reporting") }}
-
-
-
{{ app_migration_description or RequiredLabel() }}
-
-
-
-
-
{{ native_apps_description or RequiredLabel() }}
-
+ {{ 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) }}
@@ -95,7 +96,6 @@
{% else %}
{{ Icon('ok', classes='icon--gray icon--medium') }}{{ "forms.task_order.dev_team.{}".format(item) | translate }}
{% endif %}
-
{% endfor %}
@@ -104,10 +104,7 @@
{% endif %}
-
-
-
{{ team_experience_description or RequiredLabel() }}
-
+ {{ ReviewField(("forms.task_order.team_experience.label" |translate), ("forms.task_order.team_experience.{}".format(task_order.team_experience)) | translate) }}
@@ -115,22 +112,30 @@
{{ "task_orders.new.review.funding"| translate }} {{ TOEditLink(screen=2) }}
-
+ {% call ReviewField(("task_orders.new.review.performance_period" | translate), task_order.performance_length, filter="translateDuration") %}
+
{{ Icon('download') }} {{ "task_orders.new.review.usage_est_link" | translate }}
+ {% endcall %}
{{ "task_orders.new.review.to_value"| translate }} |
- {{ '${:,.2f}'.format(task_order.budget) }} |
+
+ {% if task_order.budget %}
+ {{ task_order.budget | dollarsWithCents }}
+ {% endif %}
+ |
|
- {{ '${:,.2f}'.format(task_order.clin_01) }} |
+
+ {% if task_order.clin_01 %}
+ {{ task_order.clin_01 | dollarsWithCents }}
+ {% else %}
+ {{ RequiredLabel() }}
+ {% endif %}
+ |
|
- {% if config.CLASSIFIED %}
- {{ '${:,.2f}'.format(task_order.clin_02) }}
+ {% if task_order.clin_02 and config.CLASSIFIED %}
+ {{ task_order.clin_02 | dollarsWithCents or RequiredLabel() }}
{% endif %}
|
|
- {{ '${:,.2f}'.format(task_order.clin_03) }} |
+
+ {% if task_order.clin_03 %}
+ {{ task_order.clin_03 | dollarsWithCents or RequiredLabel() }}
+ {% else %}
+ {{ RequiredLabel() }}
+ {% endif %}
+ |
- |
-
- {% if config.CLASSIFIED %}
- {{ '${:,.2f}'.format(task_order.clin_04) }}
- {% endif %}
- |
+ |
+
+ {% if task_order.clin_04 and config.CLASSIFIED %}
+ {{ task_order.clin_04 | dollarsWithCents or RequiredLabel() }}
+ {% endif %}
+ |
@@ -172,45 +183,11 @@
{{ "task_orders.new.review.oversight"| translate }} {{ TOEditLink(screen=3) }}
-
-
- {{ task_order.ko_first_name }} {{ task_order.ko_last_name }}
- {{ task_order.ko_email }}
- {{ task_order.ko_phone_number | usPhone }}
- {{ "task_orders.new.review.dod_id"| translate }} {{ task_order.ko_dod_id}}
- {% if task_order.ko_invite %}
- {{ 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 %}
-
-
-
-
- {{ task_order.cor_first_name }} {{ task_order.cor_last_name }}
- {{ task_order.cor_email }}
- {{ task_order.cor_phone_number | usPhone }}
- {{ "task_orders.new.review.dod_id"| translate }} {{ task_order.cor_dod_id}}
- {% if task_order.cor_invite %}
- {{ 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 %}
-
+ {{ 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.ko_invite) }}
+ {{ 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.cor_invite) }}
-
-
- {{ task_order.so_first_name }} {{ task_order.so_last_name }}
- {{ task_order.so_email }}
- {{ task_order.so_phone_number | usPhone }}
- {{ "task_orders.new.review.dod_id"| translate }} {{ task_order.so_dod_id}}
- {% if task_order.so_invite %}
- {{ 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 %}
-
+ {{ 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.so_invite) }}
{% endblock %}
@@ -222,5 +199,7 @@
{% endblock %}
{% block form_action %}
-