mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-27 13:06:30 +02:00
handle changes to PortfolioInvitation in DJA
This commit is contained in:
parent
5996c4df12
commit
041df217b5
1 changed files with 30 additions and 12 deletions
|
@ -28,7 +28,7 @@ from django.shortcuts import redirect
|
||||||
from django_fsm import get_available_FIELD_transitions, FSMField
|
from django_fsm import get_available_FIELD_transitions, FSMField
|
||||||
from registrar.models import DomainInformation, Portfolio, UserPortfolioPermission, DomainInvitation
|
from registrar.models import DomainInformation, Portfolio, UserPortfolioPermission, DomainInvitation
|
||||||
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices
|
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices
|
||||||
from registrar.utility.email_invitations import send_domain_invitation_email, send_portfolio_invitation_email
|
from registrar.utility.email_invitations import send_domain_invitation_email, send_portfolio_admin_addition_emails, send_portfolio_invitation_email
|
||||||
from registrar.views.utility.invitation_helper import (
|
from registrar.views.utility.invitation_helper import (
|
||||||
get_org_membership,
|
get_org_membership,
|
||||||
get_requested_user,
|
get_requested_user,
|
||||||
|
@ -1636,18 +1636,18 @@ class PortfolioInvitationAdmin(BaseInvitationAdmin):
|
||||||
Emails sent to requested user / email.
|
Emails sent to requested user / email.
|
||||||
When exceptions are raised, return without saving model.
|
When exceptions are raised, return without saving model.
|
||||||
"""
|
"""
|
||||||
if not change: # Only send email if this is a new PortfolioInvitation (creation)
|
try:
|
||||||
portfolio = obj.portfolio
|
portfolio = obj.portfolio
|
||||||
requested_email = obj.email
|
requested_email = obj.email
|
||||||
requestor = request.user
|
requestor = request.user
|
||||||
is_admin_invitation = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in obj.roles
|
is_admin_invitation = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in obj.roles
|
||||||
|
if not change: # Only send email if this is a new PortfolioInvitation (creation)
|
||||||
# Look up a user with that email
|
# Look up a user with that email
|
||||||
requested_user = get_requested_user(requested_email)
|
requested_user = get_requested_user(requested_email)
|
||||||
|
|
||||||
permission_exists = UserPortfolioPermission.objects.filter(
|
permission_exists = UserPortfolioPermission.objects.filter(
|
||||||
user__email=requested_email, portfolio=portfolio, user__email__isnull=False
|
user__email=requested_email, portfolio=portfolio, user__email__isnull=False
|
||||||
).exists()
|
).exists()
|
||||||
try:
|
|
||||||
if not permission_exists:
|
if not permission_exists:
|
||||||
# if permission does not exist for a user with requested_email, send email
|
# if permission does not exist for a user with requested_email, send email
|
||||||
if not send_portfolio_invitation_email(
|
if not send_portfolio_invitation_email(
|
||||||
|
@ -1665,6 +1665,24 @@ class PortfolioInvitationAdmin(BaseInvitationAdmin):
|
||||||
messages.success(request, f"{requested_email} has been invited.")
|
messages.success(request, f"{requested_email} has been invited.")
|
||||||
else:
|
else:
|
||||||
messages.warning(request, "User is already a member of this portfolio.")
|
messages.warning(request, "User is already a member of this portfolio.")
|
||||||
|
else: # Handle the case when updating an existing PortfolioInvitation
|
||||||
|
# Retrieve the existing object from the database
|
||||||
|
existing_obj = PortfolioInvitation.objects.get(pk=obj.pk)
|
||||||
|
|
||||||
|
# Check if the previous roles did NOT include ORGANIZATION_ADMIN
|
||||||
|
# and the new roles DO include ORGANIZATION_ADMIN
|
||||||
|
was_not_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN not in existing_obj.roles
|
||||||
|
# Check also if status is INVITED, ignore role changes for other statuses
|
||||||
|
is_invited = obj.status == PortfolioInvitation.PortfolioInvitationStatus.INVITED
|
||||||
|
|
||||||
|
if was_not_admin and is_admin_invitation and is_invited:
|
||||||
|
# send email to existing portfolio admins if new admin
|
||||||
|
if not send_portfolio_admin_addition_emails(
|
||||||
|
email=requested_email,
|
||||||
|
requestor=requestor,
|
||||||
|
portfolio=portfolio,
|
||||||
|
):
|
||||||
|
messages.warning(request, "Could not send email notification to existing organization admins.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# when exception is raised, handle and do not save the model
|
# when exception is raised, handle and do not save the model
|
||||||
handle_invitation_exceptions(request, e, requested_email)
|
handle_invitation_exceptions(request, e, requested_email)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue