diff --git a/atst/domain/authz.py b/atst/domain/authz.py index ce422736..8dff0258 100644 --- a/atst/domain/authz.py +++ b/atst/domain/authz.py @@ -30,3 +30,7 @@ class Authorization(object): @classmethod def can_view_audit_log(cls, user): return Authorization.has_atat_permission(user, Permissions.VIEW_AUDIT_LOG) + + @classmethod + def is_ccpo(cls, user): + return user.atat_role.name == "ccpo" diff --git a/atst/routes/requests/index.py b/atst/routes/requests/index.py index b479c848..99e3ad5c 100644 --- a/atst/routes/requests/index.py +++ b/atst/routes/requests/index.py @@ -55,25 +55,6 @@ class RequestsIndex(object): "extended_view": False, } - def _edit_link_for_request(self, viewing_role, request): - if request.creator == g.current_user: - if request.is_pending_financial_verification: - return url_for("requests.financial_verification", request_id=request.id) - elif request.is_pending_financial_verification_changes: - return url_for( - "requests.financial_verification", - request_id=request.id, - extended=True, - ) - elif request.is_approved: - 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 - ) - elif viewing_role == "ccpo": - return url_for("requests.approval", request_id=request.id) - def _map_request(self, request, viewing_role): time_created = pendulum.instance(request.time_created) is_new = time_created.add(days=1) > pendulum.now() @@ -92,7 +73,7 @@ class RequestsIndex(object): "last_edited_timestamp": request.latest_revision.time_updated, "full_name": request.creator.full_name, "annual_usage": annual_usage, - "edit_link": self._edit_link_for_request(viewing_role, request), + "edit_link": url_for("requests.edit", request_id=request.id), "action_required": request.action_required_by == viewing_role, "dod_component": request.latest_revision.dod_component, } diff --git a/atst/routes/requests/requests_form.py b/atst/routes/requests/requests_form.py index 1d7a4019..c88c1c38 100644 --- a/atst/routes/requests/requests_form.py +++ b/atst/routes/requests/requests_form.py @@ -2,6 +2,7 @@ from flask import g, redirect, render_template, url_for, request as http_request from . import requests_bp from atst.domain.requests import Requests +from atst.domain.authz import Authorization from atst.routes.requests.jedi_request_flow import JEDIRequestFlow from atst.models.request_status_event import RequestStatus from atst.forms.data import ( @@ -144,3 +145,34 @@ def view_request_details(request_id=None): jedi_request=request, requires_fv_action=requires_fv_action, ) + + +@requests_bp.route("/requests/edit/") +def edit(request_id): + user = g.current_user + request = Requests.get(user, request_id) + is_ccpo = Authorization.is_ccpo(user) + + redirect_url = "" + + if request.creator == user: + if request.is_pending_financial_verification: + redirect_url = url_for( + "requests.financial_verification", request_id=request.id + ) + elif request.is_pending_financial_verification_changes: + redirect_url = url_for( + "requests.financial_verification", request_id=request.id, extended=True + ) + elif request.is_approved: + redirect_url = url_for( + "requests.view_request_details", request_id=request.id + ) + else: + redirect_url = url_for( + "requests.requests_form_update", screen=1, request_id=request.id + ) + elif is_ccpo: + redirect_url = url_for("requests.approval", request_id=request.id) + + return redirect(redirect_url) diff --git a/tests/routes/test_requests_index.py b/tests/routes/test_requests_index.py index 29300b65..6de9bf5e 100644 --- a/tests/routes/test_requests_index.py +++ b/tests/routes/test_requests_index.py @@ -23,18 +23,3 @@ def test_action_required_ccpo(): context = RequestsIndex(ccpo).execute() assert context["num_action_required"] == 1 - - -def test_ccpo_sees_approval_screen(): - ccpo = UserFactory.from_atat_role("ccpo") - request = RequestFactory.create() - Requests.submit(request) - ccpo_context = RequestsIndex(ccpo).execute() - assert ccpo_context["requests"][0]["edit_link"] == url_for( - "requests.approval", request_id=request.id - ) - - mo_context = RequestsIndex(request.creator).execute() - assert mo_context["requests"][0]["edit_link"] != url_for( - "requests.approval", request_id=request.id - )