Final approval #158633809
This commit is contained in:
dandds
2018-09-11 16:24:10 -04:00
committed by GitHub
7 changed files with 82 additions and 22 deletions

View File

@@ -58,17 +58,31 @@ class Requests(object):
return False
@classmethod
def get(cls, user, request_id):
def _get(cls, user, request_id):
try:
request = db.session.query(Request).filter_by(id=request_id).one()
except (NoResultFound, exc.DataError):
raise NotFoundError("request")
return request
@classmethod
def get(cls, user, request_id):
request = Requests._get(user, request_id)
if not Authorization.can_view_request(user, request):
raise UnauthorizedError(user, "get request")
return request
@classmethod
def get_for_approval(cls, user, request_id):
request = Requests._get(user, request_id)
Authorization.check_can_approve_request(user)
return request
@classmethod
def get_many(cls, creator=None):
filters = []
@@ -281,13 +295,19 @@ WHERE requests_with_status.status = :status
return request
@classmethod
def accept_for_financial_verification(cls, user, request, review_data):
Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION)
def advance(cls, user, request, review_data):
if request.status == RequestStatus.PENDING_CCPO_ACCEPTANCE:
Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION)
elif request.status == RequestStatus.PENDING_CCPO_APPROVAL:
Requests.approve_and_create_workspace(request)
return Requests._add_review(user, request, review_data)
@classmethod
def request_changes(cls, user, request, review_data):
Requests.set_status(request, RequestStatus.CHANGES_REQUESTED)
if request.status == RequestStatus.PENDING_CCPO_ACCEPTANCE:
Requests.set_status(request, RequestStatus.CHANGES_REQUESTED)
elif request.status == RequestStatus.PENDING_CCPO_APPROVAL:
Requests.set_status(request, RequestStatus.CHANGES_REQUESTED_TO_FINVER)
return Requests._add_review(user, request, review_data)

View File

@@ -16,9 +16,10 @@ class RequestStatus(Enum):
PENDING_CCPO_ACCEPTANCE = "Pending CCPO Acceptance"
PENDING_CCPO_APPROVAL = "Pending CCPO Approval"
CHANGES_REQUESTED = "Changes Requested"
CHANGES_REQUESTED_TO_FINVER = "Change Requested to Financial Verification"
APPROVED = "Approved"
EXPIRED = "Expired"
CANCELED = "Canceled"
DELETED = "Deleted"
class RequestStatusEvent(Base):

View File

@@ -11,7 +11,6 @@ from flask import current_app as app
from . import requests_bp
from atst.domain.requests import Requests
from atst.domain.exceptions import NotFoundError
from atst.domain.authz import Authorization
from atst.forms.ccpo_review import CCPOReviewForm
@@ -47,23 +46,19 @@ def render_approval(request, form=None):
@requests_bp.route("/requests/approval/<string:request_id>", methods=["GET"])
def approval(request_id):
request = Requests.get(g.current_user, request_id)
Authorization.check_can_approve_request(g.current_user)
request = Requests.get_for_approval(g.current_user, request_id)
return render_approval(request)
@requests_bp.route("/requests/submit_approval/<string:request_id>", methods=["POST"])
def submit_approval(request_id):
request = Requests.get(g.current_user, request_id)
Authorization.check_can_approve_request(g.current_user)
request = Requests.get_for_approval(g.current_user, request_id)
form = CCPOReviewForm(http_request.form)
if form.validate():
if http_request.form.get("approved"):
Requests.accept_for_financial_verification(
g.current_user, request, form.data
)
Requests.advance(g.current_user, request, form.data)
else:
Requests.request_changes(g.current_user, request, form.data)