CC view requests users to submission emails

This commit is contained in:
Erin Song 2025-01-14 12:57:38 -08:00
parent bff19e3a28
commit 51e3fc8c3d
No known key found for this signature in database
3 changed files with 21 additions and 1 deletions

View file

@ -9,6 +9,7 @@ from django.utils import timezone
from registrar.models.domain import Domain from registrar.models.domain import Domain
from registrar.models.federal_agency import FederalAgency from registrar.models.federal_agency import FederalAgency
from registrar.models.utility.generic_helper import CreateOrUpdateOrganizationTypeHelper from registrar.models.utility.generic_helper import CreateOrUpdateOrganizationTypeHelper
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices
from registrar.utility.errors import FSMDomainRequestError, FSMErrorCodes from registrar.utility.errors import FSMDomainRequestError, FSMErrorCodes
from registrar.utility.constants import BranchChoices from registrar.utility.constants import BranchChoices
from auditlog.models import LogEntry from auditlog.models import LogEntry
@ -903,6 +904,7 @@ class DomainRequest(TimeStampedModel):
email_template, email_template,
email_template_subject, email_template_subject,
bcc_address="", bcc_address="",
cc_addresses: list[str] = [],
context=None, context=None,
send_email=True, send_email=True,
wrap_email=False, wrap_email=False,
@ -961,6 +963,7 @@ class DomainRequest(TimeStampedModel):
recipient.email, recipient.email,
context=context, context=context,
bcc_address=bcc_address, bcc_address=bcc_address,
cc_addresses=cc_addresses,
wrap_email=wrap_email, wrap_email=wrap_email,
) )
logger.info(f"The {new_status} email sent to: {recipient.email}") logger.info(f"The {new_status} email sent to: {recipient.email}")
@ -1015,6 +1018,13 @@ class DomainRequest(TimeStampedModel):
if settings.IS_PRODUCTION: if settings.IS_PRODUCTION:
bcc_address = settings.DEFAULT_FROM_EMAIL bcc_address = settings.DEFAULT_FROM_EMAIL
cc_addresses: list[str] = []
if self.requesting_entity_is_portfolio:
portfolio_view_requests_users = self.portfolio.portfolio_users_with_permissions(permissions=[UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS])
cc_users = self.portfolio.portfolio_admin_users | portfolio_view_requests_users
cc_addresses = list(cc_users.values_list("email", flat=True))
print("cc addresses: ", cc_addresses)
if self.status in limited_statuses: if self.status in limited_statuses:
self._send_status_update_email( self._send_status_update_email(
"submission confirmation", "submission confirmation",
@ -1022,6 +1032,7 @@ class DomainRequest(TimeStampedModel):
"emails/submission_confirmation_subject.txt", "emails/submission_confirmation_subject.txt",
send_email=True, send_email=True,
bcc_address=bcc_address, bcc_address=bcc_address,
cc_addresses=cc_addresses
) )
@transition( @transition(

View file

@ -144,6 +144,15 @@ class Portfolio(TimeStampedModel):
).values_list("user__id", flat=True) ).values_list("user__id", flat=True)
return User.objects.filter(id__in=admin_ids) return User.objects.filter(id__in=admin_ids)
def portfolio_users_with_permissions(self, permissions=[]):
"""Gets all users with specified additional permissions for this particular portfolio.
Returns a queryset of User."""
portfolio_users = self.portfolio_users
if permissions:
portfolio_users = portfolio_users.filter(additional_permissions__overlap=permissions)
user_ids = portfolio_users.values_list("user__id", flat=True)
return User.objects.filter(id__in=user_ids)
# == Getters for domains == # # == Getters for domains == #
def get_domains(self, order_by=None): def get_domains(self, order_by=None):
"""Returns all DomainInformations associated with this portfolio""" """Returns all DomainInformations associated with this portfolio"""

View file

@ -36,7 +36,7 @@ def send_templated_email( # noqa
to_address and bcc_address currently only support single addresses. to_address and bcc_address currently only support single addresses.
cc_address is a list and can contain many addresses. Emails not in the cc_addresses is a list and can contain many addresses. Emails not in the
whitelist (if applicable) will be filtered out before sending. whitelist (if applicable) will be filtered out before sending.
template_name and subject_template_name are relative to the same template template_name and subject_template_name are relative to the same template