Merge pull request #654 from dod-ccpo/draft-review-alert
Draft review alert
This commit is contained in:
commit
cd2fd99b4c
@ -12,6 +12,7 @@ from flask import (
|
|||||||
from . import task_orders_bp
|
from . import task_orders_bp
|
||||||
from atst.domain.task_orders import TaskOrders
|
from atst.domain.task_orders import TaskOrders
|
||||||
from atst.domain.portfolios import Portfolios
|
from atst.domain.portfolios import Portfolios
|
||||||
|
from atst.utils.flash import formatted_flash as flash
|
||||||
import atst.forms.task_order as task_order_form
|
import atst.forms.task_order as task_order_form
|
||||||
|
|
||||||
|
|
||||||
@ -200,6 +201,12 @@ def get_started():
|
|||||||
@task_orders_bp.route("/portfolios/<portfolio_id>/task_orders/new/<int:screen>")
|
@task_orders_bp.route("/portfolios/<portfolio_id>/task_orders/new/<int:screen>")
|
||||||
def new(screen, task_order_id=None, portfolio_id=None):
|
def new(screen, task_order_id=None, portfolio_id=None):
|
||||||
workflow = ShowTaskOrderWorkflow(g.current_user, screen, task_order_id)
|
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(
|
return render_template(
|
||||||
workflow.template,
|
workflow.template,
|
||||||
current=screen,
|
current=screen,
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
from flask import flash, render_template_string
|
from flask import flash, render_template_string
|
||||||
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
MESSAGES = {
|
MESSAGES = {
|
||||||
|
"task_order_draft": {
|
||||||
|
"title_template": translate("task_orders.form.draft_alert_title"),
|
||||||
|
"message_template": """
|
||||||
|
<p>Please complete your Task Order before submitting it for approval.</p>
|
||||||
|
""",
|
||||||
|
"category": "warning",
|
||||||
|
},
|
||||||
"task_order_signed": {
|
"task_order_signed": {
|
||||||
"title_template": "Task Order Signed",
|
"title_template": "Task Order Signed",
|
||||||
"message_template": """
|
"message_template": """
|
||||||
|
@ -4,6 +4,7 @@ from flask import url_for
|
|||||||
from atst.domain.task_orders import TaskOrders
|
from atst.domain.task_orders import TaskOrders
|
||||||
from atst.models.attachment import Attachment
|
from atst.models.attachment import Attachment
|
||||||
from atst.routes.task_orders.new import ShowTaskOrderWorkflow, UpdateTaskOrderWorkflow
|
from atst.routes.task_orders.new import ShowTaskOrderWorkflow, UpdateTaskOrderWorkflow
|
||||||
|
from atst.utils.localization import translate
|
||||||
|
|
||||||
from tests.factories import UserFactory, TaskOrderFactory, PortfolioFactory
|
from tests.factories import UserFactory, TaskOrderFactory, PortfolioFactory
|
||||||
|
|
||||||
@ -101,9 +102,8 @@ def test_create_new_task_order_for_portfolio(client, user_session):
|
|||||||
assert created_task_order.portfolio == portfolio
|
assert created_task_order.portfolio == portfolio
|
||||||
|
|
||||||
|
|
||||||
def test_task_order_form_shows_errors(client, user_session):
|
def test_task_order_form_shows_errors(client, user_session, task_order):
|
||||||
to = task_order()
|
creator = task_order.creator
|
||||||
creator = to.creator
|
|
||||||
user_session(creator)
|
user_session(creator)
|
||||||
|
|
||||||
task_order_data = TaskOrderFactory.dictionary()
|
task_order_data = TaskOrderFactory.dictionary()
|
||||||
@ -112,7 +112,7 @@ def test_task_order_form_shows_errors(client, user_session):
|
|||||||
funding_data.update({"clin_01": "one milllllion dollars"})
|
funding_data.update({"clin_01": "one milllllion dollars"})
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("task_orders.update", screen=2, task_order_id=to.id),
|
url_for("task_orders.update", screen=2, task_order_id=task_order.id),
|
||||||
data=funding_data,
|
data=funding_data,
|
||||||
follow_redirects=False,
|
follow_redirects=False,
|
||||||
)
|
)
|
||||||
@ -122,9 +122,8 @@ def test_task_order_form_shows_errors(client, user_session):
|
|||||||
assert "Not a valid decimal" in body
|
assert "Not a valid decimal" in body
|
||||||
|
|
||||||
|
|
||||||
def test_task_order_validates_email_address(client, user_session):
|
def test_task_order_validates_email_address(client, user_session, task_order):
|
||||||
to = task_order()
|
creator = task_order.creator
|
||||||
creator = to.creator
|
|
||||||
user_session(creator)
|
user_session(creator)
|
||||||
|
|
||||||
task_order_data = TaskOrderFactory.dictionary()
|
task_order_data = TaskOrderFactory.dictionary()
|
||||||
@ -132,7 +131,7 @@ def test_task_order_validates_email_address(client, user_session):
|
|||||||
oversight_data.update({"ko_email": "not an email"})
|
oversight_data.update({"ko_email": "not an email"})
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("task_orders.update", screen=3, task_order_id=to.id),
|
url_for("task_orders.update", screen=3, task_order_id=task_order.id),
|
||||||
data=oversight_data,
|
data=oversight_data,
|
||||||
follow_redirects=False,
|
follow_redirects=False,
|
||||||
)
|
)
|
||||||
@ -142,6 +141,29 @@ def test_task_order_validates_email_address(client, user_session):
|
|||||||
assert "Invalid email" in body
|
assert "Invalid email" in body
|
||||||
|
|
||||||
|
|
||||||
|
def test_review_screen_when_all_sections_complete(client, user_session, task_order):
|
||||||
|
user_session(task_order.creator)
|
||||||
|
response = client.get(
|
||||||
|
url_for("task_orders.new", screen=4, task_order_id=task_order.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, task_order):
|
||||||
|
TaskOrders.update(task_order.creator, task_order, clin_01=None)
|
||||||
|
user_session(task_order.creator)
|
||||||
|
response = client.get(
|
||||||
|
url_for("task_orders.new", screen=4, task_order_id=task_order.id)
|
||||||
|
)
|
||||||
|
|
||||||
|
body = response.data.decode()
|
||||||
|
assert translate("task_orders.form.draft_alert_title") in body
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def task_order():
|
def task_order():
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
@ -242,4 +264,5 @@ def test_review_task_order_form(client, user_session, task_order):
|
|||||||
response = client.get(
|
response = client.get(
|
||||||
url_for("task_orders.new", screen=idx + 1, task_order_id=task_order.id)
|
url_for("task_orders.new", screen=idx + 1, task_order_id=task_order.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
@ -402,6 +402,8 @@ requests:
|
|||||||
questions_title_text: Questions related to JEDI Cloud migration
|
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.
|
rationalization_software_systems_tooltip: Rationalization is the DoD process to determine whether the application should move to the cloud.
|
||||||
task_orders:
|
task_orders:
|
||||||
|
form:
|
||||||
|
draft_alert_title: Your draft has been saved
|
||||||
sign:
|
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_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
|
digital_signature_label: Digital Signature
|
||||||
|
Loading…
x
Reference in New Issue
Block a user