This commit is contained in:
David Kennedy 2024-10-29 14:18:47 -04:00
parent 8586bbf13f
commit c05a4237cf
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
3 changed files with 38 additions and 26 deletions

View file

@ -239,6 +239,7 @@ function deleteMember(member_delete_url, pageToDisplay) {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRFToken': csrfToken, 'X-CSRFToken': csrfToken,
}, },
body: formData body: formData
@ -1200,7 +1201,7 @@ function initializeTooltips() {
* *
*/ */
function initializeModals() { function initializeModals() {
window.modal.on(); window.modal.on();
} }
/** /**
@ -3030,7 +3031,7 @@ document.addEventListener("DOMContentLoaded", () => {
}); });
console.log("AFTER LISTENER") console.log("AFTER LISTENER")
addModal(member_email, member_id, num_domains, member_delete_url, wrapperDeleteAction); addModal(member_email, unique_id, num_domains, member_delete_url, wrapperDeleteAction);
initializeModals(); initializeModals();
@ -3041,15 +3042,11 @@ document.addEventListener("DOMContentLoaded", () => {
const submitButton = modal.querySelector('.usa-modal__submit'); const submitButton = modal.querySelector('.usa-modal__submit');
const closeButton = modal.querySelector('.usa-modal__close'); const closeButton = modal.querySelector('.usa-modal__close');
submitButton.addEventListener('click', () => { submitButton.addEventListener('click', () => {
let pk = submitButton.getAttribute('data-pk');
closeButton.click(); closeButton.click();
// If we're deleting the last item on a page that is not page 1, we'll need to refresh the display to the previous page let delete_member_form = document.getElementById("member-delete-form");
let pageToDisplay = data.page; if (delete_member_form) {
if (data.total == 1 && data.unfiltered_total > 1) { delete_member_form.submit();
pageToDisplay--;
} }
deleteMember(pk, pageToDisplay);
}); });
}); });
} }

View file

@ -60,6 +60,7 @@
{% endif %} {% endif %}
</div> </div>
<form method="post" id="member-delete-form" action="{{ request.path }}/delete"> {% csrf_token %} </form>
<address> <address>
<strong class="text-primary-dark">Last active:</strong> <strong class="text-primary-dark">Last active:</strong>
{% if member and member.last_login %} {% if member and member.last_login %}

View file

@ -2,6 +2,7 @@ import logging
from django.http import HttpResponse, Http404, JsonResponse from django.http import HttpResponse, Http404, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse from django.urls import reverse
from django.utils.safestring import mark_safe
from django.contrib import messages from django.contrib import messages
from registrar.forms.portfolio import ( from registrar.forms.portfolio import (
@ -114,29 +115,42 @@ class PortfolioMemberDeleteView(PortfolioMemberPermission, View):
support_url = "https://get.gov/contact/" support_url = "https://get.gov/contact/"
# If they have any in progress requests error_message = ''
if active_requests_count > 0: if active_requests_count > 0:
return JsonResponse( # If they have any in progress requests
{ error_message = mark_safe(
"error": f"This member has an active domain request and can't be removed from the organization. " f"This member has an active domain request and can't be removed from the organization. "
f"<a href='{support_url}' target='_blank'>Contact the .gov team</a> to remove them." f"<a href='{support_url}' target='_blank'>Contact the .gov team</a> to remove them."
}, )
status=400, elif member.is_only_admin_of_portfolio(portfolio_member_permission.portfolio):
# If they are the last manager of a domain
error_message = (
"There must be at least one admin in your organization. Give another member admin "
"permissions, make sure they log into the registrar, and then remove this member."
) )
# If they are the last manager of a domain if error_message:
if member.is_only_admin_of_portfolio(portfolio_member_permission.portfolio): if request.headers.get("X-Requested-With") == "XMLHttpRequest":
return JsonResponse( return JsonResponse(
{ {
"error": "There must be at least one admin in your organization. Give another member admin \n" "error": error_message
"persmissions, make sure they log into the registrar, and then remove this member." },
}, status=400,
status=400, )
) else:
messages.error(request, error_message)
return redirect(reverse('member', kwargs={'pk': pk}))
# passed all error conditions
portfolio_member_permission.delete() portfolio_member_permission.delete()
return JsonResponse({"success": f"You've removed {member.email} from the organization."}, status=200) success_message = f"You've removed {member.email} from the organization."
if request.headers.get("X-Requested-With") == "XMLHttpRequest":
return JsonResponse({"success": success_message}, status=200)
else:
messages.success(request, success_message)
return redirect(reverse('members'))
class PortfolioMemberEditView(PortfolioMemberEditPermissionView, View): class PortfolioMemberEditView(PortfolioMemberEditPermissionView, View):