Requests.status_count can be scoped to creator
This commit is contained in:
@@ -158,19 +158,25 @@ class Requests(object):
|
|||||||
return request.status == RequestStatus.PENDING_CCPO_APPROVAL
|
return request.status == RequestStatus.PENDING_CCPO_APPROVAL
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def status_count(cls, status):
|
def status_count(cls, status, creator=None):
|
||||||
raw = text("""
|
if isinstance(status, Enum):
|
||||||
|
status = status.name
|
||||||
|
bindings = {"status": status}
|
||||||
|
raw = """
|
||||||
SELECT count(requests_with_status.id)
|
SELECT count(requests_with_status.id)
|
||||||
FROM (
|
FROM (
|
||||||
SELECT DISTINCT ON (rse.request_id) r.*, rse.new_status as status
|
SELECT DISTINCT ON (rse.request_id) r.*, rse.new_status as status
|
||||||
FROM request_status_events rse JOIN requests r ON r.id = rse.request_id
|
FROM request_status_events rse JOIN requests r ON r.id = rse.request_id
|
||||||
ORDER BY rse.request_id, rse.sequence DESC
|
ORDER BY rse.request_id, rse.sequence DESC
|
||||||
) as requests_with_status
|
) as requests_with_status
|
||||||
WHERE requests_with_status.status = :status;
|
WHERE requests_with_status.status = :status
|
||||||
""")
|
"""
|
||||||
if isinstance(status, Enum):
|
|
||||||
status = status.name
|
if creator:
|
||||||
results = db.session.execute(raw, {"status": status}).fetchone()
|
raw += " AND requests_with_status.user_id = :user_id"
|
||||||
|
bindings["user_id"] = creator.id
|
||||||
|
|
||||||
|
results = db.session.execute(text(raw), bindings).fetchone()
|
||||||
(count,) = results
|
(count,) = results
|
||||||
return count
|
return count
|
||||||
|
|
||||||
|
@@ -77,3 +77,14 @@ def test_status_count(session):
|
|||||||
assert Requests.status_count(RequestStatus.PENDING_FINANCIAL_VERIFICATION) == 1
|
assert Requests.status_count(RequestStatus.PENDING_FINANCIAL_VERIFICATION) == 1
|
||||||
assert Requests.status_count(RequestStatus.STARTED) == 1
|
assert Requests.status_count(RequestStatus.STARTED) == 1
|
||||||
assert Requests.in_progress_count() == 2
|
assert Requests.in_progress_count() == 2
|
||||||
|
|
||||||
|
def test_status_count_scoped_to_creator(session):
|
||||||
|
# make sure table is empty
|
||||||
|
session.query(Request).delete()
|
||||||
|
|
||||||
|
user = UserFactory.create()
|
||||||
|
request1 = RequestFactory.create()
|
||||||
|
request2 = RequestFactory.create(creator=user)
|
||||||
|
|
||||||
|
assert Requests.status_count(RequestStatus.STARTED) == 2
|
||||||
|
assert Requests.status_count(RequestStatus.STARTED, creator=user) == 1
|
||||||
|
Reference in New Issue
Block a user