diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 894885e9..d9bee3b7 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -12,6 +12,7 @@ from flask import ( from . import task_orders_bp from atst.domain.task_orders import TaskOrders from atst.domain.portfolios import Portfolios +from atst.utils.flash import formatted_flash as flash import atst.forms.task_order as task_order_form @@ -200,6 +201,12 @@ def get_started(): @task_orders_bp.route("/portfolios//task_orders/new/") def new(screen, task_order_id=None, portfolio_id=None): workflow = ShowTaskOrderWorkflow(g.current_user, screen, task_order_id) + + if task_order_id and screen is 4: + task_order = TaskOrders.get(g.current_user, task_order_id) + if not TaskOrders.all_sections_complete(task_order): + flash("task_order_draft") + return render_template( workflow.template, current=screen, diff --git a/atst/utils/flash.py b/atst/utils/flash.py index 5f2dfafd..3614dffb 100644 --- a/atst/utils/flash.py +++ b/atst/utils/flash.py @@ -1,6 +1,14 @@ from flask import flash, render_template_string +from atst.utils.localization import translate MESSAGES = { + "task_order_draft": { + "title_template": translate("task_orders.form.draft_alert_title"), + "message_template": """ +

Please complete your Task Order before submitting it for approval.

+ """, + "category": "warning", + }, "task_order_signed": { "title_template": "Task Order Signed", "message_template": """ diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index 726b3fae..dff155cf 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -4,6 +4,7 @@ from flask import url_for from atst.domain.task_orders import TaskOrders from atst.models.attachment import Attachment from atst.routes.task_orders.new import ShowTaskOrderWorkflow, UpdateTaskOrderWorkflow +from atst.utils.localization import translate from tests.factories import UserFactory, TaskOrderFactory, PortfolioFactory @@ -142,6 +143,27 @@ def test_task_order_validates_email_address(client, user_session): assert "Invalid email" in body +def test_review_screen_when_all_sections_complete(client, user_session): + to = task_order() + user_session(to.creator) + response = client.get(url_for("task_orders.new", screen=4, task_order_id=to.id)) + + body = response.data.decode() + assert translate("task_orders.form.draft_alert_title") not in body + assert response.status_code == 200 + + +def test_review_screen_when_not_all_sections_complete(client, user_session): + to = task_order() + TaskOrders.update(to.creator, to, clin_01=None) + user_session(to.creator) + response = client.get(url_for("task_orders.new", screen=4, task_order_id=to.id)) + + body = response.data.decode() + assert translate("task_orders.form.draft_alert_title") in body + assert response.status_code == 200 + + @pytest.fixture def task_order(): user = UserFactory.create() @@ -242,4 +264,5 @@ def test_review_task_order_form(client, user_session, task_order): response = client.get( url_for("task_orders.new", screen=idx + 1, task_order_id=task_order.id) ) + assert response.status_code == 200 diff --git a/translations.yaml b/translations.yaml index a7923816..a7ce25da 100644 --- a/translations.yaml +++ b/translations.yaml @@ -403,6 +403,8 @@ requests: questions_title_text: Questions related to JEDI Cloud migration rationalization_software_systems_tooltip: Rationalization is the DoD process to determine whether the application should move to the cloud. task_orders: + form: + draft_alert_title: Your draft has been saved sign: digital_signature_description: I acknowledge that I have read and fully understand the DoD CCPO JEDI agreements and completed all the necessary steps, as detailed in the FAR (Federal Acquisition Regulation). digital_signature_label: Digital Signature