diff --git a/Access/accessrequest_helper.py b/Access/accessrequest_helper.py index 25f94d34..724a2de7 100644 --- a/Access/accessrequest_helper.py +++ b/Access/accessrequest_helper.py @@ -729,6 +729,41 @@ def run_accept_request_task( return json_response +def decline_group_membership(request, access_type, request_id, reason): + """ Decline group membership """ + json_response = {} + membership = MembershipV2.get_membership(request_id) + + if not membership: + json_response["error"] = INVALID_REQUEST_ERROR_MSG + return json_response + + if not is_request_valid(request_id, membership): + json_response["error"] = USER_REQUEST_IN_PROCESS_ERR_MSG.format( + request_id=request_id, + ) + return json_response + + membership.decline(reason, request.user.user) + + notifications.send_mail_for_request_decline( + request, "Membership Creation", request_id, reason, access_type + ) + + logger.debug( + USER_REQUEST_DECLINE_MSG.format( + request_id=request_id, + decline_reason=reason, + ) + ) + json_response = {} + json_response["msg"] = USER_REQUEST_DECLINE_MSG.format( + request_id=request_id, + decline_reason=reason, + ) + return json_response + + def decline_individual_access(request, access_type, request_id, reason): """ Decline individual access """ json_response = {} @@ -737,6 +772,8 @@ def decline_individual_access(request, access_type, request_id, reason): if access_type == "declineNewGroup": access_mapping = GroupV2.get_pending_group(request_id) decline_new_group = True + elif access_type == "declineMember": + return decline_group_membership(request, access_type, request_id, reason) else: access_mapping = UserAccessMapping.get_access_request(request_id) access_type = access_mapping.access.access_tag diff --git a/Access/models.py b/Access/models.py index 4422a694..cf67345a 100644 --- a/Access/models.py +++ b/Access/models.py @@ -435,6 +435,15 @@ def approve_membership(membership_id, approver): membership = MembershipV2.objects.get(membership_id=membership_id) membership.approve(approver=approver) + def decline(self, reason, decliner): + self.status = "Declined" + self.decline_reason = reason + self.approver = decliner + self.save() + + def is_already_processed(self): + return self.status in ["Declined", "Approved", "Processing", "Revoked"] + def revoke_membership(self): self.status = "Revoked" self.save() diff --git a/Access/views.py b/Access/views.py index 034e76c3..387b6ef3 100644 --- a/Access/views.py +++ b/Access/views.py @@ -424,6 +424,7 @@ def _get_request_ids_for_bulk_processing(posted_request_ids, selector): @login_required +@user_any_approver def decline_access(request, access_type, request_id): """Decline an access request.