diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 97f3d0c1..208f8f14 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -95,7 +95,7 @@ def add_to_number(task_order_id): @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def update_to_number(task_order_id): form_data = {**http_request.form} - next_page = "task_orders.add_to_pdf" + next_page = "task_orders.add_clins" current_template = "task_orders/step_2.html" return update_task_order( @@ -103,6 +103,26 @@ def update_to_number(task_order_id): ) +@task_orders_bp.route("/task_orders//step_3") +@user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") +def 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//step_3", methods=["POST"]) +@user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") +def update_clins(task_order_id): + form_data = {**http_request.form} + next_page = "task_orders.review_task_order" + 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("/portfolios//task_orders/new") @task_orders_bp.route("/task_orders//edit") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") diff --git a/templates/task_orders/step_3.html b/templates/task_orders/step_3.html new file mode 100644 index 00000000..af912b73 --- /dev/null +++ b/templates/task_orders/step_3.html @@ -0,0 +1,379 @@ +{% extends "portfolios/base.html" %} + +{% from 'components/date_picker.html' import DatePicker %} +{% from 'components/icon.html' import Icon %} +{% from "components/sticky_cta.html" import StickyCTA %} +{% from 'components/text_input.html' import TextInput %} + +{% macro LOAInput() %} +
+ +
+ + + + + + + +
+
+
+ + +{% endmacro %} + +{% macro CLINFields(fields, index) %} + {% if index != 0 %} +
+ {% endif %} + + +
+
+
+ {{ OptionsInput(fields.jedi_clin_type, watch=True) }} +
+
+ {{ TextInput(fields.number, watch=True) }} +
+
+ +
+
+ +
+ {{ 'task_orders.form.loa_label' | translate }} +
+
+ {% for loa in fields.loas %} + {{ TextInput(loa, showLabel=False, watch=True) }} + {% endfor %} + + {{ LOAInput() }} +
+
+ + {{ DatePicker(fields.start_date, watch=True, optional=False) }} + {{ DatePicker(fields.end_date, watch=True, optional=False) }} + {{ TextInput(fields.obligated_amount, validation='dollars', watch=True) }} +
+
+{% endmacro %} + + +{% block portfolio_content %} + {% set action = url_for("task_orders.update_clins", task_order_id=task_order_id) %} + + +
+ {{ form.csrf_token }} + + {% call StickyCTA(text=('task_orders.form.sticky_header_text' | translate )) %} + + + + + {{ "common.cancel" | translate }} + + + {% endcall %} + + {% include "fragments/flash.html" %} + +
+ {{ 'task_orders.form.cloud_funding_header' | translate }} +
+
+ {{ 'task_orders.form.cloud_funding_text' | translate }} +
+ + {% for clin in form.clins %} + {{ CLINFields(clin, index=loop.index - 1) }} + {% endfor %} + +
+
+ +
+
+
+ +
+
+ +
+ {{ 'task_orders.form.clin_type_label' | translate }} +
+
+ +
+
+
+
+
+ +
+ + + + + + + + + +
+
+ +
+
+ +
+
+ +
+ {{ 'task_orders.form.loa_label' | translate }} +
+
+ {{ LOAInput() }} +
+
+ + +
+ +
+ {{ 'task_orders.form.pop_start' | translate }} +
+
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ {{ Icon("ok", classes="icon--green") }} +
+
+
+
+ + +
+ +
+ {{ 'task_orders.form.pop_end' | translate }} +
+
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ {{ Icon("ok", classes="icon--green") }} +
+
+
+
+ + +
+ + + + + + + + + +
+
+
+
+
+ + +
+
+{% endblock %} diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index cf53d0b3..1f41382b 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -18,7 +18,6 @@ from tests.factories import ( def task_order(): user = UserFactory.create() portfolio = PortfolioFactory.create(owner=user) - attachment = Attachment(filename="sample_attachment", object_name="sample") return TaskOrderFactory.create(creator=user, portfolio=portfolio) @@ -73,6 +72,42 @@ def test_task_orders_update_to_number(client, user_session, task_order): assert task_order.number == "1234567890" +def test_task_orders_add_clins(client, user_session, task_order): + user_session(task_order.creator) + response = client.get(url_for("task_orders.add_clins", task_order_id=task_order.id)) + assert response.status_code == 200 + + +def test_task_orders_update_clins(client, user_session, task_order): + user_session(task_order.creator) + form_data = { + "clins-0-jedi_clin_type": "JEDI_CLIN_1", + "clins-0-clin_number": "12312", + "clins-0-start_date": "01/01/2020", + "clins-0-end_date": "01/01/2021", + "clins-0-obligated_amount": "5000", + "clins-0-loas-0": "123123123123", + "clins-0-loas-1": "345345234", + "clins-1-jedi_clin_type": "JEDI_CLIN_1", + "clins-1-number": "12312", + "clins-1-start_date": "01/01/2020", + "clins-1-end_date": "01/01/2021", + "clins-1-obligated_amount": "5000", + "clins-1-loas-0": "78979087", + } + response = client.post( + url_for("task_orders.update_to_number", task_order_id=task_order.id), + data=form_data, + ) + + assert response.status_code == 302 + assert len(task_order.clins) == 2 + + +def test_task_orders_new_flow(): + pass + + def test_task_orders_save_incomplete(client, user_session, portfolio): user_session(portfolio.owner) form_data = { @@ -100,24 +135,19 @@ def test_task_orders_add_to_pdf_existing_to(client, user_session, task_order): def test_task_orders_upload_to_pdf_existing_to( - client, user_session, task_order, pdf_upload + client, user_session, task_order, pdf_upload, pdf_upload2 ): + task_order.pdf = pdf_upload + assert task_order.pdf.filename == pdf_upload.filename + user_session(task_order.creator) - form_data = {"pdf": pdf_upload} + form_data = {"pdf": pdf_upload2} response = client.post( url_for("task_orders.upload_to_pdf", task_order_id=task_order.id), data=form_data, ) assert response.status_code == 302 - assert task_order.pdf.filename == pdf_upload.filename - - -def test_task_orders_add_to_number_existing_to(client, user_session, task_order): - user_session(task_order.creator) - response = client.get( - url_for("task_orders.add_to_number", task_order_id=task_order.id) - ) - assert response.status_code == 200 + assert task_order.pdf.filename == pdf_upload2.filename def test_task_orders_update_to_number_existing_to(client, user_session, task_order): @@ -133,6 +163,46 @@ def test_task_orders_update_to_number_existing_to(client, user_session, task_ord assert task_order.number != original_number +def test_task_orders_update_clins_existing_to(client, user_session, task_order): + clin_list = [ + { + "jedi_clin_type": "JEDI_CLIN_1", + "number": "12312", + "start_date": "01/01/2020", + "end_date": "01/01/2021", + "obligated_amount": "5000", + "loas": ["123123123123", "345345234"], + }, + { + "jedi_clin_type": "JEDI_CLIN_1", + "number": "12312", + "start_date": "01/01/2020", + "end_date": "01/01/2021", + "obligated_amount": "5000", + "loas": ["78979087"], + }, + ] + TaskOrders.create_clins(task_order.id, clin_list) + assert len(task_order.clins) == 2 + + user_session(task_order.creator) + form_data = { + "clins-0-jedi_clin_type": "JEDI_CLIN_1", + "clins-0-clin_number": "12312", + "clins-0-start_date": "01/01/2020", + "clins-0-end_date": "01/01/2021", + "clins-0-obligated_amount": "5000", + "clins-0-loas-0": "123123123123", + } + response = client.post( + url_for("task_orders.update_to_number", task_order_id=task_order.id), + data=form_data, + ) + + assert response.status_code == 302 + assert len(task_order.clins) == 1 + + def test_task_orders_update_existing_to(client, user_session, task_order): user_session(task_order.creator) form_data = {