Add check to see if KO can sign the TO and update tests

This commit is contained in:
leigh-mil 2019-03-07 16:15:03 -05:00
parent 6720b60bc4
commit 521d98562b
5 changed files with 59 additions and 7 deletions

View File

@ -120,6 +120,14 @@ class TaskOrders(object):
return True return True
@classmethod
def can_ko_sign(cls, task_order):
return (
TaskOrders.all_sections_complete(task_order)
and DD254s.is_complete(task_order.dd_254)
and not TaskOrders.is_signed_by_ko(task_order)
)
@classmethod @classmethod
def is_signed_by_ko(cls, task_order): def is_signed_by_ko(cls, task_order):
return task_order.signer_dod_id is not None return task_order.signer_dod_id is not None

View File

@ -108,7 +108,9 @@ def submit_ko_review(portfolio_id, task_order_id, form=None):
if form.validate(): if form.validate():
TaskOrders.update(user=g.current_user, task_order=task_order, **form.data) TaskOrders.update(user=g.current_user, task_order=task_order, **form.data)
if Authorization.is_ko(g.current_user, task_order): if Authorization.is_ko(g.current_user, task_order) and TaskOrders.can_ko_sign(
task_order
):
return redirect( return redirect(
url_for("task_orders.signature_requested", task_order_id=task_order_id) url_for("task_orders.signature_requested", task_order_id=task_order_id)
) )

View File

@ -4,7 +4,7 @@ import datetime
from . import task_orders_bp from . import task_orders_bp
from atst.domain.authz import Authorization from atst.domain.authz import Authorization
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NoAccessError
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders
from atst.forms.task_order import SignatureForm from atst.forms.task_order import SignatureForm
from atst.utils.flash import formatted_flash as flash from atst.utils.flash import formatted_flash as flash
@ -14,8 +14,8 @@ def find_unsigned_ko_to(task_order_id):
task_order = TaskOrders.get(g.current_user, task_order_id) task_order = TaskOrders.get(g.current_user, task_order_id)
Authorization.check_is_ko(g.current_user, task_order) Authorization.check_is_ko(g.current_user, task_order)
if TaskOrders.is_signed_by_ko(task_order): if not TaskOrders.can_ko_sign(task_order):
raise NotFoundError("task_order") raise NoAccessError("task_order")
return task_order return task_order

View File

@ -412,6 +412,8 @@ def test_submit_completed_ko_review_page_as_ko(client, user_session, pdf_upload)
) )
task_order = TaskOrderFactory.create(portfolio=portfolio, contracting_officer=ko) task_order = TaskOrderFactory.create(portfolio=portfolio, contracting_officer=ko)
dd_254 = DD254Factory.create()
TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
user_session(ko) user_session(ko)
loa_list = ["123123123", "456456456", "789789789"] loa_list = ["123123123", "456456456", "789789789"]

View File

@ -1,17 +1,34 @@
from flask import url_for from flask import url_for
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders
from tests.factories import UserFactory, TaskOrderFactory, PortfolioFactory from tests.factories import (
UserFactory,
TaskOrderFactory,
PortfolioFactory,
DD254Factory,
)
def create_ko_task_order(user_session, contracting_officer): def create_ko_task_order(user_session, contracting_officer):
portfolio = PortfolioFactory.create(owner=contracting_officer) portfolio = PortfolioFactory.create(owner=contracting_officer)
user_session(contracting_officer) user_session(contracting_officer)
return TaskOrderFactory.create( task_order = TaskOrderFactory.create(
portfolio=portfolio, contracting_officer=contracting_officer portfolio=portfolio, contracting_officer=contracting_officer
) )
TaskOrders.add_officer(
contracting_officer,
task_order,
"contracting_officer",
contracting_officer.to_dictionary(),
)
dd_254 = DD254Factory.create()
TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
return task_order
def test_show_signature_requested_not_ko(client, user_session): def test_show_signature_requested_not_ko(client, user_session):
contracting_officer = UserFactory.create() contracting_officer = UserFactory.create()
@ -27,12 +44,35 @@ def test_show_signature_requested_not_ko(client, user_session):
def test_show_signature_requested(client, user_session): def test_show_signature_requested(client, user_session):
contracting_officer = UserFactory.create() contracting_officer = UserFactory.create()
task_order = create_ko_task_order(user_session, contracting_officer) portfolio = PortfolioFactory.create(owner=contracting_officer)
user_session(contracting_officer)
# create unfinished TO
task_order = TaskOrderFactory.create(portfolio=portfolio, clin_01=None)
TaskOrders.add_officer(
contracting_officer,
task_order,
"contracting_officer",
contracting_officer.to_dictionary(),
)
response = client.get( response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id) url_for("task_orders.signature_requested", task_order_id=task_order.id)
) )
assert response.status_code == 404
# Finish TO
TaskOrders.update(contracting_officer, task_order, clin_01=100)
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
)
assert response.status_code == 404
# Complete DD 254
dd_254 = DD254Factory.create()
TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
)
assert response.status_code == 200 assert response.status_code == 200