diff --git a/atst/app.py b/atst/app.py index b91544ba..2fbe08b2 100644 --- a/atst/app.py +++ b/atst/app.py @@ -9,6 +9,7 @@ from atst.handlers.root import Root from atst.handlers.login_redirect import LoginRedirect from atst.handlers.workspace import Workspace from atst.handlers.request import Request +from atst.handlers.request_financial_verification import RequestFinancialVerification from atst.handlers.request_new import RequestNew from atst.handlers.request_submit import RequestsSubmit from atst.handlers.dev import Dev @@ -98,6 +99,22 @@ def make_app(config, deps, **kwargs): {"page": "request_approval"}, name="request_approval" ), + url( + r"/requests/verify/(\S+)", + RequestFinancialVerification, + { + "page": "financial_verification", + "requests_client": deps["requests_client"], + "fundz_client": deps["fundz_client"], + }, + name="financial_verification", + ), + url( + r"/requests/financial_verification_submitted", + Main, + {"page": "requests/financial_verification_submitted"}, + name="financial_verification_submitted", + ), url(r"/users", Main, {"page": "users"}, name="users"), url(r"/reports", Main, {"page": "reports"}, name="reports"), url(r"/calculator", Main, {"page": "calculator"}, name="calculator"), diff --git a/atst/handlers/request_financial_verification.py b/atst/handlers/request_financial_verification.py new file mode 100644 index 00000000..4c81f9d7 --- /dev/null +++ b/atst/handlers/request_financial_verification.py @@ -0,0 +1,75 @@ +import tornado + +from atst.handler import BaseHandler +from atst.forms.financial import FinancialForm + + +class RequestFinancialVerification(BaseHandler): + def initialize(self, page, requests_client, fundz_client): + self.page = page + self.requests_client = requests_client + self.fundz_client = fundz_client + + @tornado.gen.coroutine + def get_existing_request(self, request_id): + if request_id is None: + return {} + request = yield self.requests_client.get("/requests/{}".format(request_id)) + return request.json + + @tornado.web.authenticated + @tornado.gen.coroutine + def get(self, request_id=None): + existing_request = yield self.get_existing_request(request_id) + form = FinancialForm(data=existing_request['body'].get('financial_verification')) + self.render( + "requests/financial_verification.html.to", + page=self.page, + f=form, + request_id=request_id, + ) + + @tornado.gen.coroutine + def update_request(self, request_id, form_data): + request_data = { + "creator_id": self.current_user["id"], + "request": {"financial_verification": form_data}, + } + response = yield self.requests_client.patch( + "/requests/{}".format(request_id), json=request_data + ) + return response + + @tornado.web.authenticated + @tornado.gen.coroutine + def post(self, request_id=None): + self.check_xsrf_cookie() + post_data = self.request.arguments + existing_request = yield self.get_existing_request(request_id) + form = FinancialForm(post_data) + + rerender_args = dict(request_id=request_id, f=form) + + if form.validate(): + response = yield self.update_request(request_id, form.data) + if response.ok: + valid = yield form.perform_extra_validation( + existing_request.get('body', {}).get('financial_verification'), + self.fundz_client + ) + if valid: + self.redirect( + self.application.default_router.reverse_url("financial_verification_submitted") + ) + else: + self.render( + "requests/financial_verification.html.to", + **rerender_args + ) + else: + self.set_status(response.code) + else: + self.render( + "requests/financial_verification.html.to", + **rerender_args + ) diff --git a/atst/handlers/request_new.py b/atst/handlers/request_new.py index 096572d3..de3c2713 100644 --- a/atst/handlers/request_new.py +++ b/atst/handlers/request_new.py @@ -6,7 +6,6 @@ from atst.forms.request import RequestForm from atst.forms.org import OrgForm from atst.forms.poc import POCForm from atst.forms.review import ReviewForm -from atst.forms.financial import FinancialForm class RequestNew(BaseHandler): @@ -221,12 +220,6 @@ class JEDIRequestFlow(object): "form": ReviewForm, "show":True, }, - { - "title": "Financial Verification", - "section": "financial_verification", - "form": FinancialForm, - "show": self.request and self.request["status"] == "approved", - }, ] @tornado.gen.coroutine diff --git a/templates/requests.html.to b/templates/requests.html.to index 3d420a88..1814da3f 100644 --- a/templates/requests.html.to +++ b/templates/requests.html.to @@ -39,7 +39,8 @@ {% for r in requests %} - {{ r['order_id'] }} + + {{ r['order_id'] }} {% if r['is_new'] %}New {% end %} diff --git a/templates/requests/financial_verification.html.to b/templates/requests/financial_verification.html.to new file mode 100644 index 00000000..dc1c4d71 --- /dev/null +++ b/templates/requests/financial_verification.html.to @@ -0,0 +1,219 @@ +{% extends "../base.html.to" %} + +{% block content %} + +
+ +
+ +
+ +
+

Order #{{ request_id }}

+

Financial Verification

+
+ + {% block form_action %} +
+ {% end %} + + {% module xsrf_form_html() %} + {% block form %} + {% autoescape None %} + {% if f.errors %} + There were some errors, see below. + {% end %} + +

In order to get you access to the JEDI Cloud, we will need you to enter the details below that will help us verify and account for your Task Order.

+ + {{ f.task_order_id.label }} + {{ f.task_order_id(placeholder="Example: 1234567899C0001") }} + {% for e in f.task_order_id.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.uii_ids.label }} + {{ f.uii_ids(placeholder="Example: \nDI 0CVA5786950 \nUN1945326361234786950") }} + {% for e in f.uii_ids.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.pe_id.label }} + {{ f.pe_id(placeholder="Example: 0203752A") }} + {% for e in f.pe_id.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.treasury_code.label }} + {{ f.treasury_code(placeholder="Example: 1200") }} + {% for e in f.treasury_code.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.ba_code.label }} + {{ f.ba_code(placeholder="Example: 02") }} + {% for e in f.ba_code.errors %} +
+ {{ e }} +
+ {% end %} + + + +

Contracting Officer (KO) Information

+ + {{ f.fname_co.label }} + {{ f.fname_co(placeholder="Contracting Officer first name") }} + {% for e in f.fname_co.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.lname_co.label }} + {{ f.lname_co(placeholder="Contracting Officer last name") }} + {% for e in f.lname_co.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.email_co.label }} + {{ f.email_co(placeholder="jane@mail.mil") }} + {% for e in f.email_co.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.office_co.label }} + {{ f.office_co(placeholder="Example: WHS") }} + {% for e in f.office_co.errors %} +
+ {{ e }} +
+ {% end %} + + + + +

Contracting Officer Representative (COR) Information

+ + {{ f.fname_cor.label }} + {{ f.fname_cor(placeholder="Contracting Officer Representative first name") }} + {% for e in f.fname_cor.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.lname_cor.label }} + {{ f.lname_cor(placeholder="Contracting Officer Representative last name") }} + {% for e in f.lname_cor.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.email_cor.label }} + {{ f.email_cor(placeholder="jane@mail.mil") }} + {% for e in f.email_cor.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.office_cor.label }} + {{ f.office_cor(placeholder="Example: WHS") }} + {% for e in f.office_cor.errors %} +
+ {{ e }} +
+ {% end %} + +

+ ↓ FIELDS NEEDED FOR MANUAL ENTRY OF TASK ORDER INFORMATION (only necessary if EDA info not available) + + + {{ f.funding_type.label }} + {{ f.funding_type }} + {% for e in f.funding_type.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.funding_type_other.label }} + {{ f.funding_type_other(placeholder="") }} + {% for e in f.funding_type_other.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_0001.label }} + {{ f.clin_0001(placeholder="50,000") }} + {% for e in f.clin_0001.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_0003.label }} + {{ f.clin_0003(placeholder="13,000") }} + {% for e in f.clin_0003.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_1001.label }} + {{ f.clin_1001(placeholder="30,000") }} + {% for e in f.clin_1001.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_1003.label }} + {{ f.clin_1003(placeholder="7,000") }} + {% for e in f.clin_1003.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_2001.label }} + {{ f.clin_2001(placeholder="30,000") }} + {% for e in f.clin_2001.errors %} +
+ {{ e }} +
+ {% end %} + + {{ f.clin_2003.label }} + {{ f.clin_2003(placeholder="7,000") }} + {% for e in f.clin_2003.errors %} +
+ {{ e }} +
+ {% end %} + {% end %} + {% block next %} + + {% end %} +
+ +
+
+
+ +{% end %} diff --git a/templates/requests/financial_verification_submitted.html.to b/templates/requests/financial_verification_submitted.html.to new file mode 100644 index 00000000..21088724 --- /dev/null +++ b/templates/requests/financial_verification_submitted.html.to @@ -0,0 +1,18 @@ +{% extends "../base.html.to" %} + +{% block content %} + +
+ +
+ +
+ +
+

Submitted

+
+
+
+
+ +{% end %} diff --git a/templates/requests/menu.html.to b/templates/requests/menu.html.to index f7378753..4bc77431 100644 --- a/templates/requests/menu.html.to +++ b/templates/requests/menu.html.to @@ -1,4 +1,4 @@ -
+