From edbcfb5f04479a539802c3a3b92c6ab78afce820 Mon Sep 17 00:00:00 2001 From: dandds Date: Thu, 13 Sep 2018 09:45:22 -0400 Subject: [PATCH 1/5] review tabs for financial verification --- atst/domain/requests/requests.py | 4 ++++ atst/routes/requests/index.py | 6 ++--- atst/routes/requests/requests_form.py | 11 ++++++--- .../requests/financial_verification.html | 4 ++++ templates/requests/review_menu.html | 23 +++++++++++++++++++ templates/requests/view_pending.html | 15 ++++++++---- 6 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 templates/requests/review_menu.html diff --git a/atst/domain/requests/requests.py b/atst/domain/requests/requests.py index b2f43a64..bdb05dbc 100644 --- a/atst/domain/requests/requests.py +++ b/atst/domain/requests/requests.py @@ -151,6 +151,10 @@ class Requests(object): def is_pending_ccpo_approval(cls, request): return request.status == RequestStatus.PENDING_CCPO_APPROVAL + @classmethod + def is_pending_ccpo_action(cls, request): + return Requests.is_pending_ccpo_acceptance(request) or Requests.is_pending_ccpo_approval(request) + @classmethod def status_count(cls, status, creator=None): return RequestsQuery.status_count(status, creator) diff --git a/atst/routes/requests/index.py b/atst/routes/requests/index.py index 5f7bf1cf..c55890dd 100644 --- a/atst/routes/requests/index.py +++ b/atst/routes/requests/index.py @@ -66,10 +66,8 @@ class RequestsIndex(object): return url_for( "requests.financial_verification", request_id=request.id, extended=True ) - elif Requests.is_pending_ccpo_acceptance( - request - ) or Requests.is_pending_ccpo_approval(request): - return url_for("requests.view_pending_request", request_id=request.id) + elif Requests.is_pending_ccpo_action(request): + return url_for("requests.view_request_details", request_id=request.id) else: return url_for( "requests.requests_form_update", screen=1, request_id=request.id diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 0aef5fec..7a2b95c5 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -124,7 +124,12 @@ def requests_submit(request_id=None): return redirect("/requests?modal=pendingCCPOApproval") -@requests_bp.route("/requests/pending/", methods=["GET"]) -def view_pending_request(request_id=None): +@requests_bp.route("/requests/details/", methods=["GET"]) +def view_request_details(request_id=None): request = Requests.get(g.current_user, request_id) - return render_template("requests/view_pending.html", data=request.body) + return render_template( + "requests/view_pending.html", + data=request.body, + request_id=request.id, + pending_review=Requests.is_pending_ccpo_action(request) + ) diff --git a/templates/requests/financial_verification.html b/templates/requests/financial_verification.html index 25837927..74b2ff72 100644 --- a/templates/requests/financial_verification.html +++ b/templates/requests/financial_verification.html @@ -6,6 +6,10 @@ {% block content %} +{% with complete=False %} + {% include 'requests/review_menu.html' %} +{% endwith %} +
diff --git a/templates/requests/review_menu.html b/templates/requests/review_menu.html new file mode 100644 index 00000000..e8cf6d85 --- /dev/null +++ b/templates/requests/review_menu.html @@ -0,0 +1,23 @@ +{% set pending_url=url_for('requests.view_request_details', request_id=request_id) %} +{% set financial_url=url_for('requests.financial_verification', request_id=request_id) %} +
+ +
diff --git a/templates/requests/view_pending.html b/templates/requests/view_pending.html index 302b439b..ddde2d55 100644 --- a/templates/requests/view_pending.html +++ b/templates/requests/view_pending.html @@ -4,10 +4,17 @@ {% block content %}
- {{ Alert('Your request is being reviewed', - message="

You cannot edit your submitted request while it is under review. Your request will be reviewed within 3 business days.

", - level='warning' - ) }} + + {% with complete=False %} + {% include 'requests/review_menu.html' %} + {% endwith %} + + {% if pending_review %} + {{ Alert('Your request is being reviewed', + message="

You cannot edit your submitted request while it is under review. Your request will be reviewed within 3 business days.

", + level='warning' + ) }} + {% endif %}
From 636f5b3315ada2610e28ef9b9e90731ca5dd577b Mon Sep 17 00:00:00 2001 From: dandds Date: Thu, 13 Sep 2018 10:38:30 -0400 Subject: [PATCH 2/5] correct views per request status --- atst/domain/requests/requests.py | 4 ++++ atst/filters.py | 2 +- atst/routes/requests/approval.py | 3 +-- atst/routes/requests/index.py | 2 +- atst/routes/requests/requests_form.py | 13 +++++++++++-- templates/requests/_review.html | 12 +++++------- templates/requests/view_pending.html | 11 +++++++---- 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/atst/domain/requests/requests.py b/atst/domain/requests/requests.py index bdb05dbc..bd5fd380 100644 --- a/atst/domain/requests/requests.py +++ b/atst/domain/requests/requests.py @@ -155,6 +155,10 @@ class Requests(object): def is_pending_ccpo_action(cls, request): return Requests.is_pending_ccpo_acceptance(request) or Requests.is_pending_ccpo_approval(request) + @classmethod + def is_approved(cls, request): + return request.status == RequestStatus.APPROVED + @classmethod def status_count(cls, status, creator=None): return RequestsQuery.status_count(status, creator) diff --git a/atst/filters.py b/atst/filters.py index b0ceda9c..0ee5f1cd 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -31,7 +31,7 @@ def readableInteger(value): def getOptionLabel(value, options): if hasattr(value, "value"): - value = value.value + value = value.name try: return next(tup[1] for tup in options if tup[0] == value) except StopIteration: diff --git a/atst/routes/requests/approval.py b/atst/routes/requests/approval.py index 55a4c967..e813f726 100644 --- a/atst/routes/requests/approval.py +++ b/atst/routes/requests/approval.py @@ -42,8 +42,7 @@ def render_approval(request, form=None): current_status=request.status.value, pending_review=pending_review, financial_review=pending_final_approval, - pdf_available=request.task_order and request.task_order.pdf, - f=form, + f=form or CCPOReviewForm(), internal_comment_form=internal_comment_form, ) diff --git a/atst/routes/requests/index.py b/atst/routes/requests/index.py index c55890dd..360668c0 100644 --- a/atst/routes/requests/index.py +++ b/atst/routes/requests/index.py @@ -66,7 +66,7 @@ class RequestsIndex(object): return url_for( "requests.financial_verification", request_id=request.id, extended=True ) - elif Requests.is_pending_ccpo_action(request): + elif Requests.is_pending_ccpo_action(request) or Requests.is_approved(request): return url_for("requests.view_request_details", request_id=request.id) else: return url_for( diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 7a2b95c5..2b6fd5cf 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -127,9 +127,18 @@ def requests_submit(request_id=None): @requests_bp.route("/requests/details/", methods=["GET"]) def view_request_details(request_id=None): request = Requests.get(g.current_user, request_id) + financial_review=Requests.is_pending_ccpo_approval(request) or Requests.is_approved(request) + + data = request.body + if financial_review and request.task_order: + data["task_order"] = request.task_order.to_dictionary() + return render_template( "requests/view_pending.html", - data=request.body, + data=data, request_id=request.id, - pending_review=Requests.is_pending_ccpo_action(request) + status=request.status_displayname, + pending_review=Requests.is_pending_ccpo_action(request), + financial_verification=Requests.is_pending_financial_verification(request), + financial_review=financial_review, ) diff --git a/templates/requests/_review.html b/templates/requests/_review.html index 4caeaf53..d93a7ed2 100644 --- a/templates/requests/_review.html +++ b/templates/requests/_review.html @@ -139,13 +139,11 @@ Financial Verification - {% if pdf_available %} - - {% endif %} +
{{ DefinitionReviewField("Task Order Information Source", "task_order", "source", filter="getOptionLabel", filter_args=[task_order_sources]) }} diff --git a/templates/requests/view_pending.html b/templates/requests/view_pending.html index ddde2d55..e4520cfb 100644 --- a/templates/requests/view_pending.html +++ b/templates/requests/view_pending.html @@ -5,9 +5,11 @@ {% block content %}
- {% with complete=False %} - {% include 'requests/review_menu.html' %} - {% endwith %} + {% if financial_verification %} + {% with complete=False %} + {% include 'requests/review_menu.html' %} + {% endwith %} + {% endif %} {% if pending_review %} {{ Alert('Your request is being reviewed', @@ -18,7 +20,8 @@
-

View Pending Request

+

Request Details


+

#{{ request_id }} {{ status }}

From a84e18d888a8008cab60486bd6affc476b3d12ec Mon Sep 17 00:00:00 2001 From: dandds Date: Thu, 13 Sep 2018 11:12:18 -0400 Subject: [PATCH 3/5] ensure correct forms display when financial verification changes requested --- atst/domain/requests/requests.py | 4 +++- .../routes/requests/financial_verification.py | 18 ++++++++++------ atst/routes/requests/requests_form.py | 21 ++++++++++++------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/atst/domain/requests/requests.py b/atst/domain/requests/requests.py index bd5fd380..1289082d 100644 --- a/atst/domain/requests/requests.py +++ b/atst/domain/requests/requests.py @@ -153,7 +153,9 @@ class Requests(object): @classmethod def is_pending_ccpo_action(cls, request): - return Requests.is_pending_ccpo_acceptance(request) or Requests.is_pending_ccpo_approval(request) + return Requests.is_pending_ccpo_acceptance( + request + ) or Requests.is_pending_ccpo_approval(request) @classmethod def is_approved(cls, request): diff --git a/atst/routes/requests/financial_verification.py b/atst/routes/requests/financial_verification.py index f469334a..a0fba28e 100644 --- a/atst/routes/requests/financial_verification.py +++ b/atst/routes/requests/financial_verification.py @@ -13,8 +13,14 @@ def task_order_data(task_order): return data -def financial_form(data): - if http_request.args.get("extended"): +def is_extended(request): + return http_request.args.get( + "extended" + ) or Requests.is_pending_financial_verification_changes(request) + + +def financial_form(request, data): + if is_extended(request): return ExtendedFinancialForm(data=data) else: return FinancialForm(data=data) @@ -27,12 +33,12 @@ def financial_verification(request_id=None): if request.task_order: form_data.update(task_order_data(request.task_order)) - form = financial_form(form_data) + form = financial_form(request, form_data) return render_template( "requests/financial_verification.html", f=form, request_id=request_id, - extended=http_request.args.get("extended"), + extended=is_extended(request), ) @@ -40,9 +46,9 @@ def financial_verification(request_id=None): def update_financial_verification(request_id): post_data = http_request.form existing_request = Requests.get(g.current_user, request_id) - form = financial_form(post_data) + form = financial_form(existing_request, post_data) rerender_args = dict( - request_id=request_id, f=form, extended=http_request.args.get("extended") + request_id=request_id, f=form, extended=is_extended(existing_request) ) if form.validate(): diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 2b6fd5cf..3e825f9e 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -127,18 +127,23 @@ def requests_submit(request_id=None): @requests_bp.route("/requests/details/", methods=["GET"]) def view_request_details(request_id=None): request = Requests.get(g.current_user, request_id) - financial_review=Requests.is_pending_ccpo_approval(request) or Requests.is_approved(request) + financial_review = ( + Requests.is_pending_ccpo_approval(request) + or Requests.is_approved(request) + or Requests.is_pending_financial_verification_changes(request) + ) data = request.body if financial_review and request.task_order: data["task_order"] = request.task_order.to_dictionary() return render_template( - "requests/view_pending.html", - data=data, - request_id=request.id, - status=request.status_displayname, - pending_review=Requests.is_pending_ccpo_action(request), - financial_verification=Requests.is_pending_financial_verification(request), - financial_review=financial_review, + "requests/view_pending.html", + data=data, + request_id=request.id, + status=request.status_displayname, + pending_review=Requests.is_pending_ccpo_action(request), + financial_verification=Requests.is_pending_financial_verification(request) + or Requests.is_pending_financial_verification_changes(request), + financial_review=financial_review, ) From 8e4430ffc57b23cf1103cf56e07b36dab222dacd Mon Sep 17 00:00:00 2001 From: dandds Date: Thu, 13 Sep 2018 11:20:40 -0400 Subject: [PATCH 4/5] clean up request review menu logic --- atst/routes/requests/requests_form.py | 2 +- templates/requests/{view_pending.html => details.html} | 4 +--- templates/requests/financial_verification.html | 4 +--- templates/requests/review_menu.html | 4 +--- 4 files changed, 4 insertions(+), 10 deletions(-) rename templates/requests/{view_pending.html => details.html} (88%) diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 3e825f9e..5eaa3f57 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -138,7 +138,7 @@ def view_request_details(request_id=None): data["task_order"] = request.task_order.to_dictionary() return render_template( - "requests/view_pending.html", + "requests/details.html", data=data, request_id=request.id, status=request.status_displayname, diff --git a/templates/requests/view_pending.html b/templates/requests/details.html similarity index 88% rename from templates/requests/view_pending.html rename to templates/requests/details.html index e4520cfb..07bd49a7 100644 --- a/templates/requests/view_pending.html +++ b/templates/requests/details.html @@ -6,9 +6,7 @@
{% if financial_verification %} - {% with complete=False %} - {% include 'requests/review_menu.html' %} - {% endwith %} + {% include 'requests/review_menu.html' %} {% endif %} {% if pending_review %} diff --git a/templates/requests/financial_verification.html b/templates/requests/financial_verification.html index 74b2ff72..f3950f00 100644 --- a/templates/requests/financial_verification.html +++ b/templates/requests/financial_verification.html @@ -6,9 +6,7 @@ {% block content %} -{% with complete=False %} - {% include 'requests/review_menu.html' %} -{% endwith %} +{% include 'requests/review_menu.html' %}
diff --git a/templates/requests/review_menu.html b/templates/requests/review_menu.html index e8cf6d85..b8546233 100644 --- a/templates/requests/review_menu.html +++ b/templates/requests/review_menu.html @@ -7,9 +7,7 @@ Request Information - {% if complete %} - {% set financial_status="complete" %} - {% elif g.matchesPath(financial_url) %} + {% if g.matchesPath(financial_url) %} {% set financial_status="active" %} {% else %} {% set financial_status="incomplete" %} From 2b144aa857322ae29845c281a43ca9b212694061 Mon Sep 17 00:00:00 2001 From: dandds Date: Thu, 13 Sep 2018 15:18:10 -0400 Subject: [PATCH 5/5] move request status query methods from domain to model --- atst/domain/requests/requests.py | 26 ------------------- atst/models/request.py | 24 +++++++++++++++++ atst/routes/requests/approval.py | 6 ++--- .../routes/requests/financial_verification.py | 7 ++--- atst/routes/requests/index.py | 12 ++++----- atst/routes/requests/requests_form.py | 12 ++++----- 6 files changed, 41 insertions(+), 46 deletions(-) diff --git a/atst/domain/requests/requests.py b/atst/domain/requests/requests.py index 1289082d..f830d604 100644 --- a/atst/domain/requests/requests.py +++ b/atst/domain/requests/requests.py @@ -135,32 +135,6 @@ class Requests(object): section in existing_request_sections for section in all_request_sections ) - @classmethod - def is_pending_financial_verification(cls, request): - return request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION - - @classmethod - def is_pending_financial_verification_changes(cls, request): - return request.status == RequestStatus.CHANGES_REQUESTED_TO_FINVER - - @classmethod - def is_pending_ccpo_acceptance(cls, request): - return request.status == RequestStatus.PENDING_CCPO_ACCEPTANCE - - @classmethod - def is_pending_ccpo_approval(cls, request): - return request.status == RequestStatus.PENDING_CCPO_APPROVAL - - @classmethod - def is_pending_ccpo_action(cls, request): - return Requests.is_pending_ccpo_acceptance( - request - ) or Requests.is_pending_ccpo_approval(request) - - @classmethod - def is_approved(cls, request): - return request.status == RequestStatus.APPROVED - @classmethod def status_count(cls, status, creator=None): return RequestsQuery.status_count(status, creator) diff --git a/atst/models/request.py b/atst/models/request.py index f0df0d6d..de374907 100644 --- a/atst/models/request.py +++ b/atst/models/request.py @@ -170,3 +170,27 @@ class Request(Base): @property def internal_comments_text(self): return self.internal_comments.text if self.internal_comments else "" + + @property + def is_pending_financial_verification(self): + return self.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION + + @property + def is_pending_financial_verification_changes(self): + return self.status == RequestStatus.CHANGES_REQUESTED_TO_FINVER + + @property + def is_pending_ccpo_acceptance(self): + return self.status == RequestStatus.PENDING_CCPO_ACCEPTANCE + + @property + def is_pending_ccpo_approval(self): + return self.status == RequestStatus.PENDING_CCPO_APPROVAL + + @property + def is_pending_ccpo_action(self): + return self.is_pending_ccpo_acceptance or self.is_pending_ccpo_approval + + @property + def is_approved(self): + return self.status == RequestStatus.APPROVED diff --git a/atst/routes/requests/approval.py b/atst/routes/requests/approval.py index e813f726..1843e127 100644 --- a/atst/routes/requests/approval.py +++ b/atst/routes/requests/approval.py @@ -21,10 +21,8 @@ def map_ccpo_authorizing(user): def render_approval(request, form=None): data = request.body - pending_final_approval = Requests.is_pending_ccpo_approval(request) - pending_review = ( - Requests.is_pending_ccpo_acceptance(request) or pending_final_approval - ) + pending_final_approval = request.is_pending_ccpo_approval + pending_review = request.is_pending_ccpo_acceptance or pending_final_approval if pending_final_approval and request.task_order: data["task_order"] = request.task_order.to_dictionary() diff --git a/atst/routes/requests/financial_verification.py b/atst/routes/requests/financial_verification.py index a0fba28e..728f7f39 100644 --- a/atst/routes/requests/financial_verification.py +++ b/atst/routes/requests/financial_verification.py @@ -14,9 +14,10 @@ def task_order_data(task_order): def is_extended(request): - return http_request.args.get( - "extended" - ) or Requests.is_pending_financial_verification_changes(request) + return ( + http_request.args.get("extended") + or request.is_pending_financial_verification_changes + ) def financial_form(request, data): diff --git a/atst/routes/requests/index.py b/atst/routes/requests/index.py index 360668c0..a59b1f45 100644 --- a/atst/routes/requests/index.py +++ b/atst/routes/requests/index.py @@ -44,10 +44,8 @@ class RequestsIndex(object): num_action_required = len( [r for r in mapped_requests if r.get("action_required")] ) - pending_fv = any( - Requests.is_pending_financial_verification(r) for r in requests - ) - pending_ccpo = any(Requests.is_pending_ccpo_acceptance(r) for r in requests) + pending_fv = any(r.is_pending_financial_verification for r in requests) + pending_ccpo = any(r.is_pending_ccpo_acceptance for r in requests) return { "requests": mapped_requests, @@ -60,13 +58,13 @@ class RequestsIndex(object): def _edit_link_for_request(self, viewing_role, request): if viewing_role == "ccpo": return url_for("requests.approval", request_id=request.id) - elif Requests.is_pending_financial_verification(request): + elif request.is_pending_financial_verification: return url_for("requests.financial_verification", request_id=request.id) - elif Requests.is_pending_financial_verification_changes(request): + elif request.is_pending_financial_verification_changes: return url_for( "requests.financial_verification", request_id=request.id, extended=True ) - elif Requests.is_pending_ccpo_action(request) or Requests.is_approved(request): + elif request.is_pending_ccpo_action or request.is_approved: return url_for("requests.view_request_details", request_id=request.id) else: return url_for( diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 5eaa3f57..80f76931 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -128,9 +128,9 @@ def requests_submit(request_id=None): def view_request_details(request_id=None): request = Requests.get(g.current_user, request_id) financial_review = ( - Requests.is_pending_ccpo_approval(request) - or Requests.is_approved(request) - or Requests.is_pending_financial_verification_changes(request) + request.is_pending_ccpo_approval + or request.is_approved + or request.is_pending_financial_verification_changes ) data = request.body @@ -142,8 +142,8 @@ def view_request_details(request_id=None): data=data, request_id=request.id, status=request.status_displayname, - pending_review=Requests.is_pending_ccpo_action(request), - financial_verification=Requests.is_pending_financial_verification(request) - or Requests.is_pending_financial_verification_changes(request), + pending_review=request.is_pending_ccpo_action, + financial_verification=request.is_pending_financial_verification + or request.is_pending_financial_verification_changes, financial_review=financial_review, )