post data and submit so review

This commit is contained in:
dandds 2019-02-19 05:38:47 -05:00
parent 139e31b9a4
commit 979f700e36
4 changed files with 96 additions and 8 deletions

View File

@ -173,6 +173,14 @@ class TaskOrders(object):
"{} is not an officer role on task orders".format(officer_type)
)
@classmethod
def add_dd_254(user, task_order, dd_254_data):
dd_254 = DD254(**dd_254_data)
task_order.dd_254 = dd_254
db.session.add(task_order)
db.session.commit()
class DD254s:
# TODO: standin implementation until we have a real download,

View File

@ -181,4 +181,37 @@ def so_review(portfolio_id, task_order_id):
form = so_review_form(task_order)
return render_template("portfolios/task_orders/so_review.html", form=form)
return render_template(
"portfolios/task_orders/so_review.html",
form=form,
portfolio=task_order.portfolio,
task_order=task_order,
)
@portfolios_bp.route(
"/portfolios/<portfolio_id>/task_order/<task_order_id>/dd254", methods=["POST"]
)
def submit_so_review(portfolio_id, task_order_id):
task_order = TaskOrders.get(g.current_user, task_order_id)
Authorization.check_is_so(g.current_user, task_order)
form = DD254Form(http_request.form)
if form.validate():
TaskOrders.add_dd_254(task_order, form.data)
# TODO: will redirect to download, sign, upload page
return redirect(
url_for(
"portfolios.view_task_order",
portfolio_id=task_order.portfolio.id,
task_order_id=task_order.id,
)
)
else:
return render_template(
"portfolios/task_orders/so_review.html",
form=form,
portfolio=task_order.portfolio,
task_order=task_order,
)

View File

@ -5,6 +5,8 @@
{% block content %}
{% include "fragments/flash.html" %}
<div class="col">
<div class="panel">
@ -14,16 +16,26 @@
</h1>
</div>
<div class="panel__content">
<h3 class="subheading">{{ "task_orders.so_review.certification" | translate }}</h3>
{{ TextInput(form.certifying_official) }}
{{ TextInput(form.co_title) }}
{{ TextInput(form.co_phone, placeholder='(123) 456-7890', validation='usPhone') }}
{{ TextInput(form.co_address, paragraph=True) }}
<form method="POST" action='{{ url_for("portfolios.submit_so_review", portfolio_id=portfolio.id, task_order_id=task_order.id) }}'>
{{ form.csrf_token }}
<h3 class="subheading">{{ "task_orders.so_review.certification" | translate }}</h3>
{{ TextInput(form.certifying_official) }}
{{ TextInput(form.co_title) }}
{{ TextInput(form.co_phone, placeholder='(123) 456-7890', validation='usPhone') }}
{{ TextInput(form.co_address, paragraph=True) }}
<hr>
<hr>
{{ MultiCheckboxInput(form.required_distribution) }}
{{ MultiCheckboxInput(form.required_distribution) }}
<div class="action-group">
<button class="usa-button usa-button-big usa-button-primary">
Continue
</button>
</div>
</form>
</div>
</div>
</div>

View File

@ -12,6 +12,7 @@ from tests.factories import (
PortfolioRoleFactory,
TaskOrderFactory,
UserFactory,
DD254Factory,
random_future_date,
random_past_date,
)
@ -353,3 +354,37 @@ def test_so_review_page(app, client, user_session):
assert (
task_order.so_first_name in co_name and task_order.so_last_name in co_name
)
def test_submit_so_review(app, client, user_session):
portfolio = PortfolioFactory.create()
so = UserFactory.create()
PortfolioRoleFactory.create(
role=Roles.get("officer"),
portfolio=portfolio,
user=so,
status=PortfolioStatus.ACTIVE,
)
task_order = TaskOrderFactory.create(portfolio=portfolio, security_officer=so)
dd_254_data = DD254Factory.dictionary()
user_session(so)
response = client.post(
url_for(
"portfolios.submit_so_review",
portfolio_id=portfolio.id,
task_order_id=task_order.id,
),
data=dd_254_data,
)
expected_redirect = url_for(
"portfolios.view_task_order",
portfolio_id=portfolio.id,
task_order_id=task_order.id,
_external=True,
)
assert response.status_code == 302
assert response.headers["Location"] == expected_redirect
assert task_order.dd_254
assert task_order.dd_254.certifying_official == dd_254_data["certifying_official"]