implement real KPI counts

This commit is contained in:
dandds 2018-08-14 16:57:27 -04:00
parent 4c587864ef
commit e97fdbf140
5 changed files with 55 additions and 19 deletions

View File

@ -158,7 +158,7 @@ class Requests(object):
return request.status == RequestStatus.PENDING_CCPO_APPROVAL
@classmethod
def count_status(self, status):
def status_count(cls, status):
raw = text("""
SELECT count(requests_with_status.id)
FROM (
@ -174,3 +174,19 @@ WHERE requests_with_status.status = :status;
(count,) = results
return count
@classmethod
def in_progress_count(cls):
return sum([
Requests.status_count(RequestStatus.STARTED),
Requests.status_count(RequestStatus.PENDING_FINANCIAL_VERIFICATION),
Requests.status_count(RequestStatus.CHANGES_REQUESTED),
])
@classmethod
def pending_ccpo_count(cls):
return Requests.status_count(RequestStatus.PENDING_CCPO_APPROVAL)
@classmethod
def completed_count(cls):
return Requests.status_count(RequestStatus.APPROVED)

View File

@ -12,6 +12,7 @@ class RequestStatus(Enum):
STARTED = "Started"
PENDING_FINANCIAL_VERIFICATION = "Pending Financial Verification"
PENDING_CCPO_APPROVAL = "Pending CCPO Approval"
CHANGES_REQUESTED = "Changes Requested"
APPROVED = "Approved"
EXPIRED = "Expired"
DELETED = "Deleted"

View File

@ -32,22 +32,40 @@ def map_request(request):
@requests_bp.route("/requests", methods=["GET"])
def requests_index():
requests = []
is_ccpo = Permissions.REVIEW_AND_APPROVE_JEDI_WORKSPACE_REQUEST in g.current_user.atat_permissions
if is_ccpo:
requests = Requests.get_many()
else:
requests = Requests.get_many(creator=g.current_user)
if Permissions.REVIEW_AND_APPROVE_JEDI_WORKSPACE_REQUEST in g.current_user.atat_permissions:
return _ccpo_view()
else:
return _non_ccpo_view()
def _ccpo_view():
requests = Requests.get_many()
mapped_requests = [map_request(r) for r in requests]
pending_fv = not is_ccpo and any(Requests.is_pending_financial_verification(r) for r in requests)
pending_ccpo = not is_ccpo and any(Requests.is_pending_ccpo_approval(r) for r in requests)
return render_template(
"requests.html",
requests=mapped_requests,
pending_financial_verification=False,
pending_ccpo_approval=False,
extended_view=True,
kpi_inprogress=Requests.in_progress_count(),
kpi_pending=Requests.pending_ccpo_count(),
kpi_completed=Requests.completed_count(),
)
def _non_ccpo_view():
requests = Requests.get_many(creator=g.current_user)
mapped_requests = [map_request(r) for r in requests]
pending_fv = any(Requests.is_pending_financial_verification(r) for r in requests)
pending_ccpo = any(Requests.is_pending_ccpo_approval(r) for r in requests)
return render_template(
"requests.html",
requests=mapped_requests,
pending_financial_verification=pending_fv,
pending_ccpo_approval=pending_ccpo,
extended_view=is_ccpo
extended_view=False,
)

View File

@ -51,16 +51,16 @@
{% if extended_view %}
<div class="row kpi">
<div class="kpi__item col col--grow">
<div class="kpi__item__value">3</div>
<div class="kpi__item__description">Pending Requests</div>
<div class="kpi__item__value">{{ kpi_inprogress }}</div>
<div class="kpi__item__description">In Progress</div>
</div>
<div class="kpi__item col col--grow">
<div class="kpi__item__value">2,456</div>
<div class="kpi__item__description">Completed Requests This Year</div>
<div class="kpi__item__value">{{ kpi_pending }}</div>
<div class="kpi__item__description">Pending CCPO Action</div>
</div>
<div class="kpi__item col col--grow">
<div class="kpi__item__value">234</div>
<div class="kpi__item__description">Denied Requests</div>
<div class="kpi__item__value">{{ kpi_completed }}</div>
<div class="kpi__item__description">Completed (Overall)</div>
</div>
</div>
{% endif %}

View File

@ -66,7 +66,7 @@ def test_exists(session):
assert not Requests.exists(request.id, user_denied)
def test_count_status(session):
def test_status_count(session):
# make sure table is empty
session.query(Request).delete()
@ -74,5 +74,6 @@ def test_count_status(session):
request2 = RequestFactory.create()
RequestStatusEventFactory.create(sequence=2, request_id=request2.id, new_status=RequestStatus.PENDING_FINANCIAL_VERIFICATION)
assert Requests.count_status(RequestStatus.PENDING_FINANCIAL_VERIFICATION) == 1
assert Requests.count_status(RequestStatus.STARTED) == 1
assert Requests.status_count(RequestStatus.PENDING_FINANCIAL_VERIFICATION) == 1
assert Requests.status_count(RequestStatus.STARTED) == 1
assert Requests.in_progress_count() == 2