mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-20 08:24:05 +02:00
auto retrieve portfolio invitations on create
This commit is contained in:
parent
c2d17442f8
commit
3d237ba0f5
4 changed files with 38 additions and 6 deletions
|
@ -1467,11 +1467,14 @@ class DomainInvitationAdmin(ListHeaderAdmin):
|
||||||
and not member_of_this_org
|
and not member_of_this_org
|
||||||
):
|
):
|
||||||
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=domain_org)
|
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=domain_org)
|
||||||
PortfolioInvitation.objects.get_or_create(
|
portfolio_invitation, _ = PortfolioInvitation.objects.get_or_create(
|
||||||
email=requested_email,
|
email=requested_email,
|
||||||
portfolio=domain_org,
|
portfolio=domain_org,
|
||||||
roles=[UserPortfolioRoleChoices.ORGANIZATION_MEMBER],
|
roles=[UserPortfolioRoleChoices.ORGANIZATION_MEMBER],
|
||||||
)
|
)
|
||||||
|
if requested_user is not None:
|
||||||
|
portfolio_invitation.retrieve()
|
||||||
|
portfolio_invitation.save()
|
||||||
messages.success(request, f"{requested_email} has been invited to the organization: {domain_org}")
|
messages.success(request, f"{requested_email} has been invited to the organization: {domain_org}")
|
||||||
|
|
||||||
send_domain_invitation_email(
|
send_domain_invitation_email(
|
||||||
|
@ -1548,7 +1551,16 @@ class DomainInvitationAdmin(ListHeaderAdmin):
|
||||||
change=False,
|
change=False,
|
||||||
obj=obj,
|
obj=obj,
|
||||||
)
|
)
|
||||||
return super().response_add(request, obj, post_url_continue)
|
# Preserve all success messages
|
||||||
|
all_messages = [message for message in get_messages(request)]
|
||||||
|
|
||||||
|
response = super().response_add(request, obj, post_url_continue)
|
||||||
|
|
||||||
|
# Re-add all messages to the storage after `super().response_add` to preserve them
|
||||||
|
for message in all_messages:
|
||||||
|
messages.add_message(request, message.level, message.message)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
class PortfolioInvitationAdmin(ListHeaderAdmin):
|
class PortfolioInvitationAdmin(ListHeaderAdmin):
|
||||||
|
@ -1612,6 +1624,8 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
|
||||||
portfolio = obj.portfolio
|
portfolio = obj.portfolio
|
||||||
requested_email = obj.email
|
requested_email = obj.email
|
||||||
requestor = request.user
|
requestor = request.user
|
||||||
|
# Look up a user with that 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
|
||||||
|
@ -1620,6 +1634,8 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
|
||||||
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
|
||||||
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio)
|
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio)
|
||||||
|
if requested_user is not None:
|
||||||
|
obj.retrieve()
|
||||||
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.")
|
||||||
|
@ -1685,7 +1701,16 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
|
||||||
change=False,
|
change=False,
|
||||||
obj=obj,
|
obj=obj,
|
||||||
)
|
)
|
||||||
return super().response_add(request, obj, post_url_continue)
|
# Preserve all success messages
|
||||||
|
all_messages = [message for message in get_messages(request)]
|
||||||
|
|
||||||
|
response = super().response_add(request, obj, post_url_continue)
|
||||||
|
|
||||||
|
# Re-add all messages to the storage after `super().response_add` to preserve them
|
||||||
|
for message in all_messages:
|
||||||
|
messages.add_message(request, message.level, message.message)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
class DomainInformationResource(resources.ModelResource):
|
class DomainInformationResource(resources.ModelResource):
|
||||||
|
|
|
@ -153,7 +153,9 @@ def validate_user_portfolio_permission(user_portfolio_permission):
|
||||||
"Based on current waffle flag settings, users cannot be assigned to multiple portfolios."
|
"Based on current waffle flag settings, users cannot be assigned to multiple portfolios."
|
||||||
)
|
)
|
||||||
|
|
||||||
existing_invitations = PortfolioInvitation.objects.filter(email=user_portfolio_permission.user.email)
|
existing_invitations = PortfolioInvitation.objects.exclude(
|
||||||
|
portfolio=user_portfolio_permission.portfolio
|
||||||
|
).filter(email=user_portfolio_permission.user.email)
|
||||||
if existing_invitations.exists():
|
if existing_invitations.exists():
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
"This user is already assigned to a portfolio invitation. "
|
"This user is already assigned to a portfolio invitation. "
|
||||||
|
|
|
@ -1182,9 +1182,12 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
and not member_of_this_org
|
and not member_of_this_org
|
||||||
):
|
):
|
||||||
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=domain_org)
|
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=domain_org)
|
||||||
PortfolioInvitation.objects.get_or_create(
|
portfolio_invitation, _ = PortfolioInvitation.objects.get_or_create(
|
||||||
email=requested_email, portfolio=domain_org, roles=[UserPortfolioRoleChoices.ORGANIZATION_MEMBER]
|
email=requested_email, portfolio=domain_org, roles=[UserPortfolioRoleChoices.ORGANIZATION_MEMBER]
|
||||||
)
|
)
|
||||||
|
if requested_user is not None:
|
||||||
|
portfolio_invitation.retrieve()
|
||||||
|
portfolio_invitation.save()
|
||||||
messages.success(self.request, f"{requested_email} has been invited to the organization: {domain_org}")
|
messages.success(self.request, f"{requested_email} has been invited to the organization: {domain_org}")
|
||||||
|
|
||||||
if requested_user is None:
|
if requested_user is None:
|
||||||
|
|
|
@ -754,7 +754,9 @@ class PortfolioAddMemberView(PortfolioMembersPermissionView, FormMixin):
|
||||||
try:
|
try:
|
||||||
if not requested_user or not permission_exists:
|
if not requested_user or not permission_exists:
|
||||||
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio)
|
send_portfolio_invitation_email(email=requested_email, requestor=requestor, portfolio=portfolio)
|
||||||
form.save()
|
portfolio_invitation = form.save()
|
||||||
|
portfolio_invitation.retrieve()
|
||||||
|
portfolio_invitation.save()
|
||||||
messages.success(self.request, f"{requested_email} has been invited.")
|
messages.success(self.request, f"{requested_email} has been invited.")
|
||||||
else:
|
else:
|
||||||
if permission_exists:
|
if permission_exists:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue