Add basic KO review form
This commit is contained in:
parent
3358aa99ba
commit
f6a066f983
38
atst/forms/ko_review.py
Normal file
38
atst/forms/ko_review.py
Normal 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()]
|
||||||
|
)
|
@ -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"
|
||||||
|
@ -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' />
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user