Merge pull request #412 from dod-ccpo/status-change-emails
Notify PSO or MO of request status change
This commit is contained in:
@@ -29,3 +29,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"
|
||||
|
||||
@@ -6,9 +6,11 @@ from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||
from atst.models.request_review import RequestReview
|
||||
from atst.models.request_internal_comment import RequestInternalComment
|
||||
from atst.utils import deep_merge
|
||||
from atst.queue import queue
|
||||
|
||||
from .query import RequestsQuery
|
||||
from .authorization import RequestsAuthorization
|
||||
from .status_event_handler import RequestStatusEventHandler
|
||||
|
||||
|
||||
def create_revision_from_request_body(body):
|
||||
@@ -95,11 +97,17 @@ class Requests(object):
|
||||
|
||||
@classmethod
|
||||
def set_status(cls, request, status: RequestStatus):
|
||||
old_status = request.status
|
||||
status_event = RequestStatusEvent(
|
||||
new_status=status, revision=request.latest_revision
|
||||
)
|
||||
request.status_events.append(status_event)
|
||||
return request
|
||||
updated_request = RequestsQuery.add_and_commit(request)
|
||||
RequestStatusEventHandler(queue).handle_status_change(
|
||||
updated_request, old_status, status
|
||||
)
|
||||
|
||||
return updated_request
|
||||
|
||||
@classmethod
|
||||
def should_auto_approve(cls, request):
|
||||
|
||||
35
atst/domain/requests/status_event_handler.py
Normal file
35
atst/domain/requests/status_event_handler.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from flask import render_template
|
||||
|
||||
from atst.models.request_status_event import RequestStatus
|
||||
|
||||
|
||||
class RequestStatusEventHandler(object):
|
||||
STATUS_TRANSITIONS = set(
|
||||
[
|
||||
(
|
||||
RequestStatus.PENDING_CCPO_ACCEPTANCE,
|
||||
RequestStatus.PENDING_FINANCIAL_VERIFICATION,
|
||||
),
|
||||
(RequestStatus.PENDING_CCPO_ACCEPTANCE, RequestStatus.CHANGES_REQUESTED),
|
||||
(
|
||||
RequestStatus.PENDING_CCPO_APPROVAL,
|
||||
RequestStatus.CHANGES_REQUESTED_TO_FINVER,
|
||||
),
|
||||
(RequestStatus.PENDING_CCPO_APPROVAL, RequestStatus.APPROVED),
|
||||
]
|
||||
)
|
||||
|
||||
def __init__(self, queue):
|
||||
self.queue = queue
|
||||
|
||||
def handle_status_change(self, request, old_status, new_status):
|
||||
if (old_status, new_status) in self.STATUS_TRANSITIONS:
|
||||
self._send_email(request)
|
||||
|
||||
def _send_email(self, request):
|
||||
email_body = render_template(
|
||||
"emails/request_status_change.txt", request=request
|
||||
)
|
||||
self.queue.send_mail(
|
||||
[request.creator.email], "Your JEDI request status has changed", email_body
|
||||
)
|
||||
Reference in New Issue
Block a user