Skip to content

Commit

Permalink
Merge pull request #283 from bcgov/activity2
Browse files Browse the repository at this point in the history
More activity logs added
  • Loading branch information
jadmsaadaot authored Feb 6, 2025
2 parents 2eb5bec + 8b263b6 commit e757515
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 15 deletions.
6 changes: 3 additions & 3 deletions submit-api/src/submit_api/enums/activity_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class ActivityTypeEnum(enum.Enum):
class ActorTypeEnum(enum.Enum):
"""Enum for activity type statuses."""

USER = 'USER'
ENTITY = 'ENTITY'
STAFF = "STAFF"


Expand All @@ -33,10 +33,10 @@ class ActivityActionType(enum.Enum):

ORIGINAL_SUBMISSION = "Original Submission"
START_CONSULTATION_CHECK = "Start Consultation Check"
UPDATED_SUBMISSION_UPDATE_REQUESTED = "Updated Submission (Update Requested)"
UPDATE_REQUESTED = "Update Requested"
PASSED_CONSULTATION_CHECK = "Passed Consultation Check"
FAILED_CONSULTATION_CHECK = "Failed Consultation Check"
START_MP_REVIEW = "Start MP Review"
MP_APPROVED = "MP Accepted/Approved/Satisfied"
MP_REVIEW_REJECTED = "MP Review Rejected"
UPDATED_SUBMISSION_REVISION_REQUIRED = "Updated Submission (Revision Required)"
REVISION_REQUIRED = "Revision Required"
5 changes: 3 additions & 2 deletions submit-api/src/submit_api/services/activity_log_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from submit_api.enums.activity_type import ActivityTypeEnum, VisibilityTypeEnum, ActorTypeEnum
from submit_api.models.activity_log import ActivityLog
from submit_api.models.db import session_scope
from submit_api.utils.token_info import TokenInfo


class ActivityLogService:
Expand All @@ -20,7 +21,7 @@ class ActivityLogService:
def log_activity( # pylint: disable=too-many-arguments
entity_id: int,
action: str,
actor_id: int,
actor_id: int = TokenInfo.get_id(),
actor_type: str = ActorTypeEnum.STAFF.value,
entity_type=ActivityTypeEnum.SUBMISSION.value,
entity_version: int = 1,
Expand Down Expand Up @@ -62,7 +63,7 @@ def get_activity_logs(entity_type: str, entity_id: int, for_staff: bool = True)
query = ActivityLog.query.filter_by(entity_type=entity_type, entity_id=entity_id)

if not for_staff:
query = query.filter(ActivityLog.visibility == "public")
query = query.filter(ActivityLog.visibility == VisibilityTypeEnum.PUBLIC.value)

logs = query.order_by(ActivityLog.activity_at.desc()).all()
return logs
Expand Down
55 changes: 45 additions & 10 deletions submit-api/src/submit_api/services/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from flask import current_app

from submit_api.enums.activity_type import ActorTypeEnum, ActivityActionType, VisibilityTypeEnum
from submit_api.enums.activity_type import ActorTypeEnum, ActivityActionType
from submit_api.enums.item_status import ItemStatus
from submit_api.exceptions import BadRequestError, ResourceNotFoundError
from submit_api.models import Item as ItemModel, User
Expand Down Expand Up @@ -312,18 +312,21 @@ def submit_package(cls, package_id):
else:
submitted_package: PackageModel = cls._submit_package(package, session)

ActivityLogService.log_activity(
entity_id=package.id,
action=ActivityActionType.ORIGINAL_SUBMISSION.value,
actor_id=TokenInfo.get_id(),
actor_type=ActorTypeEnum.USER.value,
entity_version=submitted_package.version_id,
visibility=VisibilityTypeEnum.PUBLIC.value,
session=session
)
cls._log_activity_submission(package, submitted_package, session)

return submitted_package

@staticmethod
def _log_activity_submission(package, submitted_package, session):
"""Log activity for package submission."""
ActivityLogService.log_activity(
entity_id=package.id,
action=ActivityActionType.ORIGINAL_SUBMISSION.value,
actor_type=ActorTypeEnum.ENTITY.value,
entity_version=submitted_package.version_id,
session=session
)

@classmethod
def _submit_package(cls, package, session):
"""Submit the package by updating its status and items."""
Expand Down Expand Up @@ -386,6 +389,17 @@ def start_mp_review_process(cls, package, package_id, session):
PackageMetadataFields.REVIEW_START_DATE.value: item_data.get('review_start_date')
}
cls._update_package_metadata(session, package_id, new_metadata)
cls._log_activity_start_mp_review(package, session)

@staticmethod
def _log_activity_start_mp_review(package, session):
"""Log activity for starting management plan review."""
ActivityLogService.log_activity(
entity_id=package.id,
action=ActivityActionType.START_MP_REVIEW.value,
entity_version=package.version_id,
session=session
)

@classmethod
def start_cr_check(cls, package_id):
Expand All @@ -403,10 +417,21 @@ def start_cr_check(cls, package_id):
PackageMetadataFields.CONSULTATION_CHECK_START_DATE.value: item_data.get('review_start_date')
}
cls._update_package_metadata(session, package_id, new_metadata)
cls._log_activity_start_consultation_check(package, session)
session.flush()
session.commit()
return package

@staticmethod
def _log_activity_start_consultation_check(package, session):
"""Log activity for starting consultation check."""
ActivityLogService.log_activity(
entity_id=package.id,
action=ActivityActionType.START_CONSULTATION_CHECK.value,
entity_version=package.version_id,
session=session
)

@staticmethod
def _unsupported_status(*args, **kwargs):
"""Handle unsupported status."""
Expand Down Expand Up @@ -447,6 +472,7 @@ def create_update_request(cls, package_id, request_data):
"""Create an update request for the package."""
package = cls._get_and_validate_package_for_update_request(package_id)
cls._create_update_request(package, request_data)
cls._log_activity_update_request(package)
cls._update_request_creation_email_queue(package.id)
return package

Expand All @@ -471,6 +497,15 @@ def _update_request_creation_email_queue(cls, package_id):
)
email_queue.save()

@staticmethod
def _log_activity_update_request(package):
"""Log activity for update request creation."""
ActivityLogService.log_activity(
entity_id=package.id,
action=ActivityActionType.UPDATE_REQUESTED.value,
entity_version=package.version_id,
)

@classmethod
def _get_and_validate_package_for_update_request(cls, package_id):
"""Validate package status for update request."""
Expand Down
37 changes: 37 additions & 0 deletions submit-api/src/submit_api/services/submission_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from flask import current_app

from submit_api.enums.activity_type import ActivityActionType
from submit_api.enums.item_status import ItemStatus
from submit_api.exceptions import UnprocessableEntityError, ResourceNotFoundError
from submit_api.models import Item as ItemModel, PackageVersion, UpdateRequest
Expand All @@ -18,6 +19,7 @@
from submit_api.models.submission_review_entry import SubmissionReviewEntryType
from submit_api.models.update_request import UpdateRequestType
from submit_api.schemas.submission import CreateSubmissionRequestSchema
from submit_api.services.activity_log_service import ActivityLogService
from submit_api.services.package import PackageService
from submit_api.services.submission import SubmissionService
from submit_api.utils.token_info import TokenInfo
Expand Down Expand Up @@ -169,6 +171,7 @@ def approve_submission(cls, item_id, session):
approval_processor(item, session)
cls._update_package_status(item.package_id, session)
cls._update_item_submissions_status(SubmissionStatus.APPROVED, session, item=item)

current_app.logger.info(f"Submission item {item.id} approved.")
return item

Expand All @@ -188,6 +191,7 @@ def approve_consultation_record(cls, item, session):
}
session.add(item)
session.add(package_metadata)
cls._log_activity_consultation_check(item, session, success=True)
current_app.logger.info(f"Consultation record approved for item {item.id}.")

current_app.logger.info(f"Starting MP review for package {item.package_id}.")
Expand All @@ -196,6 +200,38 @@ def approve_consultation_record(cls, item, session):

return item

@staticmethod
def _log_activity_consultation_check(item, session, success=True):
"""Log activity for passing or failing the consultation check."""
action_type = (
ActivityActionType.PASSED_CONSULTATION_CHECK.value
if success else
ActivityActionType.FAILED_CONSULTATION_CHECK.value
)

ActivityLogService.log_activity(
entity_id=item.id,
action=action_type,
entity_version=item.package.version_id,
session=session
)

@staticmethod
def _log_activity_mp_review(item, session, approved=True):
"""Log activity for approving or rejecting the Management Plan review."""
action_type = (
ActivityActionType.MP_APPROVED.value
if approved else
ActivityActionType.MP_REVIEW_REJECTED.value
)

ActivityLogService.log_activity(
entity_id=item.id,
action=action_type,
entity_version=item.package.version_id,
session=session
)

@classmethod
def reject_submission(cls, item_id, session):
"""Reject submission item."""
Expand Down Expand Up @@ -227,6 +263,7 @@ def reject_consultation_record(cls, item, session):
cls._update_submissions_status(item, SubmissionStatus.REJECTED, session)
update_request_data = cls._prepare_update_request_data(item)
cls._create_update_request(update_request_data, session)
cls._log_activity_consultation_check(item, session, success=False)
session.flush()
return item

Expand Down

0 comments on commit e757515

Please sign in to comment.