Add check to see if KO can sign the TO and update tests
This commit is contained in:
parent
6720b60bc4
commit
521d98562b
@ -120,6 +120,14 @@ class TaskOrders(object):
|
||||
|
||||
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
|
||||
def is_signed_by_ko(cls, task_order):
|
||||
return task_order.signer_dod_id is not None
|
||||
|
@ -108,7 +108,9 @@ def submit_ko_review(portfolio_id, task_order_id, form=None):
|
||||
|
||||
if form.validate():
|
||||
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(
|
||||
url_for("task_orders.signature_requested", task_order_id=task_order_id)
|
||||
)
|
||||
|
@ -4,7 +4,7 @@ import datetime
|
||||
|
||||
from . import task_orders_bp
|
||||
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.forms.task_order import SignatureForm
|
||||
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)
|
||||
Authorization.check_is_ko(g.current_user, task_order)
|
||||
|
||||
if TaskOrders.is_signed_by_ko(task_order):
|
||||
raise NotFoundError("task_order")
|
||||
if not TaskOrders.can_ko_sign(task_order):
|
||||
raise NoAccessError("task_order")
|
||||
|
||||
return task_order
|
||||
|
||||
|
@ -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)
|
||||
dd_254 = DD254Factory.create()
|
||||
TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
|
||||
user_session(ko)
|
||||
loa_list = ["123123123", "456456456", "789789789"]
|
||||
|
||||
|
@ -1,17 +1,34 @@
|
||||
from flask import url_for
|
||||
|
||||
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):
|
||||
portfolio = PortfolioFactory.create(owner=contracting_officer)
|
||||
user_session(contracting_officer)
|
||||
|
||||
return TaskOrderFactory.create(
|
||||
task_order = TaskOrderFactory.create(
|
||||
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):
|
||||
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):
|
||||
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(
|
||||
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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user