Merge pull request #662 from dod-ccpo/manage-invitations-incomplete-to

Manage invitations should be inactive until user has completed TO flow
This commit is contained in:
George Drummond 2019-02-20 10:51:01 -05:00 committed by GitHub
commit e260d82a97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 11 deletions

View File

@ -5,6 +5,7 @@ from flask import g, redirect, render_template, url_for, request as http_request
from . import portfolios_bp from . import portfolios_bp
from atst.database import db from atst.database import db
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders
from atst.domain.exceptions import NotFoundError
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios
from atst.domain.authz import Authorization from atst.domain.authz import Authorization
from atst.forms.officers import EditTaskOrderOfficersForm from atst.forms.officers import EditTaskOrderOfficersForm
@ -113,12 +114,16 @@ def task_order_invitations(portfolio_id, task_order_id):
portfolio = Portfolios.get(g.current_user, portfolio_id) portfolio = Portfolios.get(g.current_user, portfolio_id)
task_order = TaskOrders.get(g.current_user, task_order_id) task_order = TaskOrders.get(g.current_user, task_order_id)
form = EditTaskOrderOfficersForm(obj=task_order) form = EditTaskOrderOfficersForm(obj=task_order)
return render_template(
"portfolios/task_orders/invitations.html", if TaskOrders.all_sections_complete(task_order):
portfolio=portfolio, return render_template(
task_order=task_order, "portfolios/task_orders/invitations.html",
form=form, portfolio=portfolio,
) task_order=task_order,
form=form,
)
else:
raise NotFoundError("task_order")
@portfolios_bp.route( @portfolios_bp.route(

View File

@ -203,10 +203,12 @@
<div class="panel__content"> <div class="panel__content">
<div class="task-order-invitations__heading row"> <div class="task-order-invitations__heading row">
<h3>Invitations</h3> <h3>Invitations</h3>
<a href="{{ url_for('portfolios.task_order_invitations', portfolio_id=portfolio.id, task_order_id=task_order.id) }}" class="icon-link"> {% if all_sections_complete %}
<span>manage</span> <a href="{{ url_for('portfolios.task_order_invitations', portfolio_id=portfolio.id, task_order_id=task_order.id) }}" class="icon-link">
{{ Icon("edit") }} <span>{{ "common.manage" | translate }}</span>
</a> {{ Icon("edit") }}
</a>
{% endif %}
</div> </div>
{{ InvitationStatus('Contracting Officer', task_order.contracting_officer, officer_info=task_order.officer_dictionary('contracting_officer')) }} {{ InvitationStatus('Contracting Officer', task_order.contracting_officer, officer_info=task_order.officer_dictionary('contracting_officer')) }}
{{ InvitationStatus('Contracting Officer Representative', task_order.contracting_officer_representative, officer_info=task_order.officer_dictionary('contracting_officer_representative')) }} {{ InvitationStatus('Contracting Officer Representative', task_order.contracting_officer_representative, officer_info=task_order.officer_dictionary('contracting_officer_representative')) }}

View File

@ -5,6 +5,7 @@ from datetime import timedelta, date
from atst.domain.roles import Roles from atst.domain.roles import Roles
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders
from atst.models.portfolio_role import Status as PortfolioStatus from atst.models.portfolio_role import Status as PortfolioStatus
from atst.utils.localization import translate
from tests.factories import ( from tests.factories import (
PortfolioFactory, PortfolioFactory,
@ -178,6 +179,7 @@ def test_ko_can_view_task_order(client, user_session):
) )
task_order = TaskOrderFactory.create(portfolio=portfolio, contracting_officer=ko) task_order = TaskOrderFactory.create(portfolio=portfolio, contracting_officer=ko)
user_session(ko) user_session(ko)
response = client.get( response = client.get(
url_for( url_for(
"portfolios.view_task_order", "portfolios.view_task_order",
@ -186,9 +188,21 @@ def test_ko_can_view_task_order(client, user_session):
) )
) )
assert response.status_code == 200 assert response.status_code == 200
assert translate("common.manage") in response.data.decode()
TaskOrders.update(ko, task_order, clin_01=None)
response = client.get(
url_for(
"portfolios.view_task_order",
portfolio_id=portfolio.id,
task_order_id=task_order.id,
)
)
assert response.status_code == 200
assert translate("common.manage") not in response.data.decode()
def test_can_view_task_order_invitations(client, user_session): def test_can_view_task_order_invitations_when_complete(client, user_session):
portfolio = PortfolioFactory.create() portfolio = PortfolioFactory.create()
user_session(portfolio.owner) user_session(portfolio.owner)
task_order = TaskOrderFactory.create(portfolio=portfolio) task_order = TaskOrderFactory.create(portfolio=portfolio)
@ -202,6 +216,20 @@ def test_can_view_task_order_invitations(client, user_session):
assert response.status_code == 200 assert response.status_code == 200
def test_cant_view_task_order_invitations_when_not_complete(client, user_session):
portfolio = PortfolioFactory.create()
user_session(portfolio.owner)
task_order = TaskOrderFactory.create(portfolio=portfolio, clin_01=None)
response = client.get(
url_for(
"portfolios.task_order_invitations",
portfolio_id=portfolio.id,
task_order_id=task_order.id,
)
)
assert response.status_code == 404
def test_ko_can_view_ko_review_page(client, user_session): def test_ko_can_view_ko_review_page(client, user_session):
portfolio = PortfolioFactory.create() portfolio = PortfolioFactory.create()
ko = UserFactory.create() ko = UserFactory.create()

View File

@ -20,6 +20,7 @@ base_public:
title_tag: JEDI Cloud title_tag: JEDI Cloud
common: common:
back: Back back: Back
manage: manage
save_and_continue: Save & Continue save_and_continue: Save & Continue
sign: Sign sign: Sign
components: components: