leigh-mil 3683c79ae0 Use template args for the contract start and end date
pointing to base.ini in the JS file resulted in the raw string content of base.ini to be in the JS bundle
2019-09-09 14:23:38 -04:00

279 lines
9.4 KiB
Python

from flask import (
g,
redirect,
render_template,
request as http_request,
url_for,
current_app as app,
jsonify,
)
from datetime import datetime
from . import task_orders_bp
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.exceptions import NoAccessError
from atst.domain.task_orders import TaskOrders
from atst.forms.task_order import TaskOrderForm, SignatureForm
from atst.models.permissions import Permissions
from atst.utils.flash import formatted_flash as flash
def render_task_orders_edit(
template, portfolio_id=None, task_order_id=None, form=None, extra_args=None
):
render_args = extra_args or {}
render_args["contract_start"] = app.config.get("CONTRACT_START_DATE")
render_args["contract_end"] = app.config.get("CONTRACT_END_DATE")
if task_order_id:
task_order = TaskOrders.get(task_order_id)
portfolio_id = task_order.portfolio_id
render_args["form"] = form or TaskOrderForm(obj=task_order)
render_args["task_order_id"] = task_order_id
render_args["task_order"] = task_order
else:
render_args["form"] = form or TaskOrderForm()
render_args["cancel_save_url"] = url_for(
"task_orders.cancel_edit",
task_order_id=task_order_id,
portfolio_id=portfolio_id,
save=True,
)
render_args["cancel_discard_url"] = url_for(
"task_orders.cancel_edit",
task_order_id=task_order_id,
portfolio_id=portfolio_id,
save=False,
)
return render_template(template, **render_args)
def update_task_order(
form_data, next_page, current_template, portfolio_id=None, task_order_id=None
):
form = None
if task_order_id:
task_order = TaskOrders.get(task_order_id)
form = TaskOrderForm(form_data, obj=task_order)
else:
form = TaskOrderForm(form_data)
if form.validate():
task_order = None
if task_order_id:
task_order = TaskOrders.update(task_order_id, **form.data)
portfolio_id = task_order.portfolio_id
else:
task_order = TaskOrders.create(g.current_user, portfolio_id, **form.data)
return redirect(url_for(next_page, task_order_id=task_order.id))
else:
return (
render_task_orders_edit(
current_template, portfolio_id, task_order_id, form
),
400,
)
@task_orders_bp.route("/task_orders/<portfolio_id>/upload_token")
@user_can(Permissions.CREATE_TASK_ORDER, message="edit task order form")
def upload_token(portfolio_id):
(token, object_name) = app.csp.files.get_token()
render_args = {"token": token, "objectName": object_name}
return jsonify(render_args)
@task_orders_bp.route("/task_orders/<portfolio_id>/download_link")
@user_can(Permissions.VIEW_TASK_ORDER_DETAILS, message="view task order download link")
def download_link(portfolio_id):
filename = http_request.args.get("filename")
object_name = http_request.args.get("objectName")
render_args = {
"downloadLink": app.csp.files.generate_download_link(object_name, filename)
}
return jsonify(render_args)
@task_orders_bp.route("/task_orders/<task_order_id>/edit")
@user_can(Permissions.CREATE_TASK_ORDER, message="edit task order form")
def edit(task_order_id):
task_order = TaskOrders.get(task_order_id)
if not task_order.pdf:
return redirect(
url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order_id)
)
elif not task_order.number:
return redirect(
url_for("task_orders.form_step_two_add_number", task_order_id=task_order_id)
)
elif not task_order.clins_are_completed:
return redirect(
url_for(
"task_orders.form_step_three_add_clins", task_order_id=task_order_id
)
)
elif task_order.is_completed:
return redirect(
url_for("task_orders.form_step_four_review", task_order_id=task_order_id)
)
else:
return redirect(
url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order_id)
)
@task_orders_bp.route("/portfolios/<portfolio_id>/task_orders/form/step_1")
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_1")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_one_add_pdf(portfolio_id=None, task_order_id=None):
return render_task_orders_edit(
"task_orders/step_1.html",
portfolio_id=portfolio_id,
task_order_id=task_order_id,
)
@task_orders_bp.route(
"/portfolios/<portfolio_id>/task_orders/form/step-1", methods=["POST"]
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_1", methods=["POST"])
@user_can(Permissions.CREATE_TASK_ORDER, message="update task order form")
def submit_form_step_one_add_pdf(portfolio_id=None, task_order_id=None):
form_data = {**http_request.form}
next_page = "task_orders.form_step_two_add_number"
current_template = "task_orders/step_1.html"
return update_task_order(
form_data,
next_page,
current_template,
portfolio_id=portfolio_id,
task_order_id=task_order_id,
)
@task_orders_bp.route(
"/portfolios/<portfolio_id>/task_orders/form/cancel", methods=["POST"]
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/cancel", methods=["POST"])
@user_can(Permissions.CREATE_TASK_ORDER, message="cancel task order form")
def cancel_edit(task_order_id=None, portfolio_id=None):
# Either save the currently entered data, or delete the TO
save = http_request.args.get("save", "True").lower() == "true"
if save:
form_data = {**http_request.form}
form = None
if task_order_id:
task_order = TaskOrders.get(task_order_id)
form = TaskOrderForm(form_data, obj=task_order)
else:
form = TaskOrderForm(form_data)
if form.validate(flash_invalid=False):
task_order = None
if task_order_id:
task_order = TaskOrders.update(task_order_id, **form.data)
else:
task_order = TaskOrders.create(
g.current_user, portfolio_id, **form.data
)
elif not save and task_order_id:
TaskOrders.delete(task_order_id)
return redirect(
url_for("task_orders.portfolio_funding", portfolio_id=g.portfolio.id)
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_2")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_two_add_number(task_order_id):
return render_task_orders_edit(
"task_orders/step_2.html", task_order_id=task_order_id
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_2", methods=["POST"])
@user_can(Permissions.CREATE_TASK_ORDER, message="update task order form")
def submit_form_step_two_add_number(task_order_id):
form_data = {**http_request.form}
next_page = "task_orders.form_step_three_add_clins"
current_template = "task_orders/step_2.html"
return update_task_order(
form_data, next_page, current_template, task_order_id=task_order_id
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_3")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_three_add_clins(task_order_id):
return render_task_orders_edit(
"task_orders/step_3.html", task_order_id=task_order_id
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_3", methods=["POST"])
@user_can(Permissions.CREATE_TASK_ORDER, message="update task order form")
def submit_form_step_three_add_clins(task_order_id):
form_data = {**http_request.form}
next_page = "task_orders.form_step_four_review"
current_template = "task_orders/step_3.html"
return update_task_order(
form_data, next_page, current_template, task_order_id=task_order_id
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_4")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_four_review(task_order_id):
task_order = TaskOrders.get(task_order_id)
extra_args = {
"pdf_download_url": app.csp.files.generate_download_link(
task_order.pdf.object_name, task_order.pdf.filename
)
}
if task_order.is_completed == False:
raise NoAccessError("task order form review")
return render_task_orders_edit(
"task_orders/step_4.html", task_order_id=task_order_id, extra_args=extra_args
)
@task_orders_bp.route("/task_orders/<task_order_id>/form/step_5")
@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form")
def form_step_five_confirm_signature(task_order_id):
task_order = TaskOrders.get(task_order_id)
if task_order.is_completed == False:
raise NoAccessError("task order form signature")
return render_task_orders_edit(
"task_orders/step_5.html", task_order_id=task_order_id, form=SignatureForm()
)
@task_orders_bp.route("/task_orders/<task_order_id>/submit", methods=["POST"])
@user_can(Permissions.CREATE_TASK_ORDER, "submit task order")
def submit_task_order(task_order_id):
task_order = TaskOrders.get(task_order_id)
TaskOrders.sign(task_order=task_order, signer_dod_id=g.current_user.dod_id)
flash("task_order_submitted", task_order=task_order)
return redirect(
url_for("task_orders.portfolio_funding", portfolio_id=task_order.portfolio_id)
)