Request status views #160109433
This commit is contained in:
dandds 2018-09-14 10:26:03 -04:00 committed by GitHub
commit e05ac758b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 129 additions and 73 deletions

View File

@ -135,22 +135,6 @@ class Requests(object):
section in existing_request_sections for section in all_request_sections 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 @classmethod
def status_count(cls, status, creator=None): def status_count(cls, status, creator=None):
return RequestsQuery.status_count(status, creator) return RequestsQuery.status_count(status, creator)

View File

@ -31,7 +31,7 @@ def readableInteger(value):
def getOptionLabel(value, options): def getOptionLabel(value, options):
if hasattr(value, "value"): if hasattr(value, "value"):
value = value.value value = value.name
try: try:
return next(tup[1] for tup in options if tup[0] == value) return next(tup[1] for tup in options if tup[0] == value)
except StopIteration: except StopIteration:

View File

@ -170,3 +170,27 @@ class Request(Base):
@property @property
def internal_comments_text(self): def internal_comments_text(self):
return self.internal_comments.text if self.internal_comments else "" 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

View File

@ -21,10 +21,8 @@ def map_ccpo_authorizing(user):
def render_approval(request, form=None): def render_approval(request, form=None):
data = request.body data = request.body
pending_final_approval = Requests.is_pending_ccpo_approval(request) pending_final_approval = request.is_pending_ccpo_approval
pending_review = ( pending_review = request.is_pending_ccpo_acceptance or pending_final_approval
Requests.is_pending_ccpo_acceptance(request) or pending_final_approval
)
if pending_final_approval and request.task_order: if pending_final_approval and request.task_order:
data["task_order"] = request.task_order.to_dictionary() data["task_order"] = request.task_order.to_dictionary()
@ -42,8 +40,7 @@ def render_approval(request, form=None):
current_status=request.status.value, current_status=request.status.value,
pending_review=pending_review, pending_review=pending_review,
financial_review=pending_final_approval, financial_review=pending_final_approval,
pdf_available=request.task_order and request.task_order.pdf, f=form or CCPOReviewForm(),
f=form,
internal_comment_form=internal_comment_form, internal_comment_form=internal_comment_form,
) )

View File

@ -13,8 +13,15 @@ def task_order_data(task_order):
return data return data
def financial_form(data): def is_extended(request):
if http_request.args.get("extended"): return (
http_request.args.get("extended")
or request.is_pending_financial_verification_changes
)
def financial_form(request, data):
if is_extended(request):
return ExtendedFinancialForm(data=data) return ExtendedFinancialForm(data=data)
else: else:
return FinancialForm(data=data) return FinancialForm(data=data)
@ -27,12 +34,12 @@ def financial_verification(request_id=None):
if request.task_order: if request.task_order:
form_data.update(task_order_data(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( return render_template(
"requests/financial_verification.html", "requests/financial_verification.html",
f=form, f=form,
request_id=request_id, request_id=request_id,
extended=http_request.args.get("extended"), extended=is_extended(request),
) )
@ -40,9 +47,9 @@ def financial_verification(request_id=None):
def update_financial_verification(request_id): def update_financial_verification(request_id):
post_data = http_request.form post_data = http_request.form
existing_request = Requests.get(g.current_user, request_id) existing_request = Requests.get(g.current_user, request_id)
form = financial_form(post_data) form = financial_form(existing_request, post_data)
rerender_args = dict( 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(): if form.validate():

View File

@ -44,10 +44,8 @@ class RequestsIndex(object):
num_action_required = len( num_action_required = len(
[r for r in mapped_requests if r.get("action_required")] [r for r in mapped_requests if r.get("action_required")]
) )
pending_fv = any( pending_fv = any(r.is_pending_financial_verification for r in requests)
Requests.is_pending_financial_verification(r) for r in requests pending_ccpo = any(r.is_pending_ccpo_acceptance for r in requests)
)
pending_ccpo = any(Requests.is_pending_ccpo_acceptance(r) for r in requests)
return { return {
"requests": mapped_requests, "requests": mapped_requests,
@ -60,16 +58,14 @@ class RequestsIndex(object):
def _edit_link_for_request(self, viewing_role, request): def _edit_link_for_request(self, viewing_role, request):
if viewing_role == "ccpo": if viewing_role == "ccpo":
return url_for("requests.approval", request_id=request.id) 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) 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( return url_for(
"requests.financial_verification", request_id=request.id, extended=True "requests.financial_verification", request_id=request.id, extended=True
) )
elif Requests.is_pending_ccpo_acceptance( elif request.is_pending_ccpo_action or request.is_approved:
request return url_for("requests.view_request_details", request_id=request.id)
) or Requests.is_pending_ccpo_approval(request):
return url_for("requests.view_pending_request", request_id=request.id)
else: else:
return url_for( return url_for(
"requests.requests_form_update", screen=1, request_id=request.id "requests.requests_form_update", screen=1, request_id=request.id

View File

@ -124,7 +124,26 @@ def requests_submit(request_id=None):
return redirect("/requests?modal=pendingCCPOApproval") return redirect("/requests?modal=pendingCCPOApproval")
@requests_bp.route("/requests/pending/<string:request_id>", methods=["GET"]) @requests_bp.route("/requests/details/<string:request_id>", methods=["GET"])
def view_pending_request(request_id=None): def view_request_details(request_id=None):
request = Requests.get(g.current_user, request_id) request = Requests.get(g.current_user, request_id)
return render_template("requests/view_pending.html", data=request.body) financial_review = (
request.is_pending_ccpo_approval
or request.is_approved
or request.is_pending_financial_verification_changes
)
data = request.body
if financial_review and request.task_order:
data["task_order"] = request.task_order.to_dictionary()
return render_template(
"requests/details.html",
data=data,
request_id=request.id,
status=request.status_displayname,
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,
)

View File

@ -139,13 +139,11 @@
Financial Verification Financial Verification
</h2> </h2>
{% if pdf_available %}
<div> <div>
<a href="{{ url_for("requests.task_order_pdf_download", request_id=request_id)}}" download> <a href="{{ url_for("requests.task_order_pdf_download", request_id=request_id)}}" download>
Download the Task Order PDF Download the Task Order PDF
</a> </a>
</div> </div>
{% endif %}
<dl> <dl>
{{ DefinitionReviewField("Task Order Information Source", "task_order", "source", filter="getOptionLabel", filter_args=[task_order_sources]) }} {{ DefinitionReviewField("Task Order Information Source", "task_order", "source", filter="getOptionLabel", filter_args=[task_order_sources]) }}

View File

@ -0,0 +1,32 @@
{% extends "base.html" %}
{% from "components/alert.html" import Alert %}
{% block content %}
<div class="col">
{% if financial_verification %}
{% include 'requests/review_menu.html' %}
{% endif %}
{% if pending_review %}
{{ Alert('Your request is being reviewed',
message="<p>You cannot edit your submitted request while it is under review. Your request will be reviewed within 3 business days.</p>",
level='warning'
) }}
{% endif %}
<div class="panel">
<div class="panel__heading">
<h1>Request Details</h1><br/>
<h2>#{{ request_id }} <span class="label label--info">{{ status }}</span></h2>
</div>
<div class="panel__content">
{% include "requests/_review.html" %}
</div>
</div>
</div>
{% endblock %}

View File

@ -6,6 +6,8 @@
{% block content %} {% block content %}
{% include 'requests/review_menu.html' %}
<financial inline-template v-bind:initial-data='{{ f.data|mixedContentToJson }}'> <financial inline-template v-bind:initial-data='{{ f.data|mixedContentToJson }}'>
<div class="col"> <div class="col">

View File

@ -0,0 +1,21 @@
{% 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) %}
<div class="progress-menu progress-menu--four">
<ul>
<li class="progress-menu__item progress-menu__item--complete">
<a href="{{ pending_url }}">
Request Information
</a>
</li>
{% if g.matchesPath(financial_url) %}
{% set financial_status="active" %}
{% else %}
{% set financial_status="incomplete" %}
{% endif %}
<li class="progress-menu__item progress-menu__item--{{ financial_status }}">
<a href="{{ financial_url }}">
Financial Verification Information
</a>
</li>
</ul>
</div>

View File

@ -1,24 +0,0 @@
{% extends "base.html" %}
{% from "components/alert.html" import Alert %}
{% block content %}
<div class="col">
{{ Alert('Your request is being reviewed',
message="<p>You cannot edit your submitted request while it is under review. Your request will be reviewed within 3 business days.</p>",
level='warning'
) }}
<div class="panel">
<div class="panel__heading">
<h1>View Pending Request</h1>
</div>
<div class="panel__content">
{% include "requests/_review.html" %}
</div>
</div>
</div>
{% endblock %}