Add basic KO review form

This commit is contained in:
Montana 2019-01-25 11:17:08 -05:00
parent 3358aa99ba
commit f6a066f983
4 changed files with 74 additions and 1 deletions

38
atst/forms/ko_review.py Normal file
View File

@ -0,0 +1,38 @@
from flask_wtf.file import FileAllowed
from wtforms.fields import StringField, TextAreaField, FileField
from wtforms.validators import Optional, Length, InputRequired
from .forms import CacheableForm
from .validators import IsNumber
from atst.utils.localization import translate
class KOReviewForm(CacheableForm):
pdf = FileField(
translate("forms.ko_review.pdf_label"),
validators=[
FileAllowed(["pdf"], translate("forms.ko_review.pdf_description")),
InputRequired(),
],
render_kw={"required": False},
)
to_number = StringField(
translate("forms.ko_review.to_number"),
validators=[
Length(min=10),
IsNumber(),
],
)
loa = StringField(
translate("forms.ko_review.loa"),
validators=[
Length(min=10),
IsNumber(),
],
)
custom_clauses = TextAreaField(
translate("forms.ko_review.custom_clauses_label"),
description=translate("forms.ko_review.custom_clauses_description"),
validators=[Optional()]
)

View File

@ -9,6 +9,7 @@ from atst.domain.task_orders import TaskOrders
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios
from atst.forms.officers import EditTaskOrderOfficersForm from atst.forms.officers import EditTaskOrderOfficersForm
from atst.models.task_order import Status as TaskOrderStatus from atst.models.task_order import Status as TaskOrderStatus
from atst.forms.ko_review import KOReviewForm
@portfolios_bp.route("/portfolios/<portfolio_id>/task_orders") @portfolios_bp.route("/portfolios/<portfolio_id>/task_orders")
@ -70,15 +71,27 @@ def view_task_order(portfolio_id, task_order_id):
@portfolios_bp.route("/portfolios/<portfolio_id>/task_order/<task_order_id>/review") @portfolios_bp.route("/portfolios/<portfolio_id>/task_order/<task_order_id>/review")
def review_task_order(portfolio_id, task_order_id): def review_task_order(portfolio_id, task_order_id, form=None):
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)
return render_template( return render_template(
"/portfolios/task_orders/review.html", "/portfolios/task_orders/review.html",
portfolio=portfolio, portfolio=portfolio,
task_order=task_order, task_order=task_order,
form=form or KOReviewForm(),
) )
@portfolios_bp.route("/portfolios/<portfolio_id>/task_order/<task_order_id>/submit_review", methods=["POST"])
def submit_review_task_order(portfolio_id, task_order_id, form=None):
portfolio = Portfolios.get(g.current_user, portfolio_id)
task_order = TaskOrders.get(g.current_user, task_order_id)
form = KOReviewForm(http_request.form)
if form.validate():
return redirect(url_for("task_orders.view_task_order"))
else:
return review(portfolio.id, task_order.id)
@portfolios_bp.route( @portfolios_bp.route(
"/portfolios/<portfolio_id>/task_order/<task_order_id>/invitations" "/portfolios/<portfolio_id>/task_order/<task_order_id>/invitations"

View File

@ -10,6 +10,16 @@
{% include "fragments/flash.html" %} {% include "fragments/flash.html" %}
{% block form_action %}
{% if task_order_id %}
<form method='POST' action="{{ url_for('portfolios.submit_review_task_order', portfolio_id=portfolio_id, task_order_id=task_order_id, form=form) }}" autocomplete="off" enctype="multipart/form-data">
{% else %}
<form method='GET' action="{{ url_for('portfolios.view_task_order', portfolio_id=portfolio_id, task_order_id=task_order_id) }}" autocomplete="off" enctype="multipart/form-data">
{% endif %}
{% endblock %}
{% block form %}
{% macro TOEditLink(screen=1, anchor=None) %} {% macro TOEditLink(screen=1, anchor=None) %}
{% if task_order %} {% if task_order %}
{{ EditLink(url_for("task_orders.new", screen=screen, task_order_id=task_order.id, _anchor=anchor)) }} {{ EditLink(url_for("task_orders.new", screen=screen, task_order_id=task_order.id, _anchor=anchor)) }}
@ -195,6 +205,8 @@
</div> </div>
</div> </div>
<div class="">Period of Performance Start Date</div>
<hr> <hr>
<div class="h2">{{ "task_orders.new.review.oversight"| translate }}</div> <div class="h2">{{ "task_orders.new.review.oversight"| translate }}</div>
@ -211,8 +223,11 @@
<div class="h2">{{ "task_orders.ko_review.task_order_information"| translate }}</div> <div class="h2">{{ "task_orders.ko_review.task_order_information"| translate }}</div>
<div class="">Upload a copy of your Task Order document</div>
</div> </div>
</div> </div>
{% endblock %}
<div class='action-group'> <div class='action-group'>
<input type='submit' class='usa-button usa-button-primary' value='Continue' /> <input type='submit' class='usa-button usa-button-primary' value='Continue' />

View File

@ -54,6 +54,13 @@ forms:
lname_mao_label: Last Name (optional) lname_mao_label: Last Name (optional)
phone_ext_mao_label: Extension (optional) phone_ext_mao_label: Extension (optional)
phone_mao_label: Mission Owner phone number (optional) phone_mao_label: Mission Owner phone number (optional)
ko_review:
pdf_label: Upload a copy of your Task Order document
pdf_description: Upload a PDF of the Task Order that you entered in your system of record for your organization.
to_number: Task Order Number
loa: Line of Accounting (LOA) \#1
custom_clauses_label: Task Order Custom Clauses (optional)
custom_clauses_description: This will put a pause on the CSP access once the KO signs until the CCPO reviews that language to make sure it is legal.
edit_member: edit_member:
portfolio_role_label: Portfolio Role portfolio_role_label: Portfolio Role
edit_user: edit_user: