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
|
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
|
||||||
|
@ -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)
|
||||||
)
|
)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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"]
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user