Fix merge conflict + enum

This commit is contained in:
zandercymatics 2024-11-26 10:41:53 -07:00
parent e91526e602
commit 62f0205b4c
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
4 changed files with 76 additions and 71 deletions

View file

@ -1,4 +1,4 @@
from enum import Enum from registrar.utility import StrEnum
from django.db import models from django.db import models
@ -43,20 +43,20 @@ class UserPortfolioPermissionChoices(models.TextChoices):
return {key: value.value for key, value in cls.__members__.items()} return {key: value.value for key, value in cls.__members__.items()}
class DomainRequestPermissionDisplay(Enum): class DomainRequestPermissionDisplay(StrEnum):
"""Stores display values for domain request permission combinations. """Stores display values for domain request permission combinations.
Overview of values: Overview of values:
- VIEWER_REQUESTER: "Viewer Requester" - VIEWER_REQUESTER: "Viewer Requester"
- VIEWER: "VIEWER" - VIEWER: "Viewer"
- NONE: "None" - NONE: "None"
""" """
VIEWER_REQUESTER = "Viewer Requester" VIEWER_REQUESTER = "Viewer Requester"
VIEWER = "VIEWER" VIEWER = "Viewer"
NONE = "None" NONE = "None"
class MemberPermissionDisplay(Enum): class MemberPermissionDisplay(StrEnum):
"""Stores display values for member permission combinations. """Stores display values for member permission combinations.
Overview of values: Overview of values:

View file

@ -862,7 +862,7 @@ class MemberExportTest(MockDbForIndividualTests, MockEppLib):
# Create a request and add the user to the request # Create a request and add the user to the request
request = self.factory.get("/") request = self.factory.get("/")
request.user = self.user request.user = self.user
self.maxDiff = None
# Add portfolio to session # Add portfolio to session
request = GenericTestHelper._mock_user_request_for_factory(request) request = GenericTestHelper._mock_user_request_for_factory(request)
request.session["portfolio"] = self.portfolio_1 request.session["portfolio"] = self.portfolio_1

View file

@ -361,71 +361,77 @@ class MemberExport(BaseExport):
] ]
# Permissions # Permissions
permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio).select_related("user").annotate( permissions = (
first_name=F("user__first_name"), UserPortfolioPermission.objects.filter(portfolio=portfolio)
last_name=F("user__last_name"), .select_related("user")
email_display=F("user__email"), .annotate(
last_active=Coalesce( first_name=F("user__first_name"),
Func( last_name=F("user__last_name"),
F("user__last_login"), Value("YYYY-MM-DD"), function="to_char", output_field=TextField() email_display=F("user__email"),
last_active=Coalesce(
Func(F("user__last_login"), Value("YYYY-MM-DD"), function="to_char", output_field=TextField()),
Value("Invalid date"),
output_field=CharField(),
), ),
Value("Invalid date"), additional_permissions_display=F("additional_permissions"),
output_field=CharField(), member_display=Case(
), # If email is present and not blank, use email
additional_permissions_display=F("additional_permissions"), When(Q(user__email__isnull=False) & ~Q(user__email=""), then=F("user__email")),
member_display=Case( # If first name or last name is present, use concatenation of first_name + " " + last_name
# If email is present and not blank, use email When(
When(Q(user__email__isnull=False) & ~Q(user__email=""), then=F("user__email")), Q(user__first_name__isnull=False) | Q(user__last_name__isnull=False),
# If first name or last name is present, use concatenation of first_name + " " + last_name then=Concat(
When( Coalesce(F("user__first_name"), Value("")),
Q(user__first_name__isnull=False) | Q(user__last_name__isnull=False), Value(" "),
then=Concat( Coalesce(F("user__last_name"), Value("")),
Coalesce(F("user__first_name"), Value("")), ),
Value(" "),
Coalesce(F("user__last_name"), Value("")),
), ),
# If neither, use an empty string
default=Value(""),
output_field=CharField(),
), ),
# If neither, use an empty string domain_info=ArrayAgg(
default=Value(""), F("user__permissions__domain__name"),
output_field=CharField(), distinct=True,
), # only include domains in portfolio
domain_info=ArrayAgg( filter=Q(user__permissions__domain__isnull=False)
F("user__permissions__domain__name"), & Q(user__permissions__domain__domain_info__portfolio=portfolio),
distinct=True, ),
# only include domains in portfolio type=Value("member", output_field=CharField()),
filter=Q(user__permissions__domain__isnull=False) joined_date=Func(F("created_at"), Value("YYYY-MM-DD"), function="to_char", output_field=CharField()),
& Q(user__permissions__domain__domain_info__portfolio=portfolio), invited_by=cls.get_invited_by_query(object_id_query=cls.get_portfolio_invitation_id_query()),
), )
type=Value("member", output_field=CharField()), .values(*shared_columns)
joined_date=Func(F("created_at"), Value("YYYY-MM-DD"), function="to_char", output_field=CharField()), )
invited_by=cls.get_invited_by_query(
object_id_query=cls.get_portfolio_invitation_id_query()
),
).values(*shared_columns)
# Invitations # Invitations
domain_invitations = DomainInvitation.objects.filter( domain_invitations = DomainInvitation.objects.filter(
email=OuterRef("email"), # Check if email matches the OuterRef("email") email=OuterRef("email"), # Check if email matches the OuterRef("email")
domain__domain_info__portfolio=portfolio, # Check if the domain's portfolio matches the given portfolio domain__domain_info__portfolio=portfolio, # Check if the domain's portfolio matches the given portfolio
).annotate(domain_info=Concat(F("domain__id"), Value(":"), F("domain__name"), output_field=CharField())) ).annotate(domain_info=F("domain__name"))
invitations = PortfolioInvitation.objects.filter(portfolio=portfolio).annotate( invitations = (
first_name=Value(None, output_field=CharField()), PortfolioInvitation.objects.exclude(status=PortfolioInvitation.PortfolioInvitationStatus.RETRIEVED)
last_name=Value(None, output_field=CharField()), .filter(portfolio=portfolio)
email_display=F("email"), .annotate(
last_active=Value("Invited", output_field=CharField()), first_name=Value(None, output_field=CharField()),
additional_permissions_display=F("additional_permissions"), last_name=Value(None, output_field=CharField()),
member_display=F("email"), email_display=F("email"),
# Use ArrayRemove to return an empty list when no domain invitations are found last_active=Value("Invited", output_field=CharField()),
domain_info=ArrayRemoveNull( additional_permissions_display=F("additional_permissions"),
ArrayAgg( member_display=F("email"),
Subquery(domain_invitations.values("domain_info")), # Use ArrayRemove to return an empty list when no domain invitations are found
distinct=True, domain_info=ArrayRemoveNull(
) ArrayAgg(
), Subquery(domain_invitations.values("domain_info")),
type=Value("invitedmember", output_field=CharField()), distinct=True,
joined_date=Value(DefaultUserValues.UNRETRIEVED, output_field=CharField()), )
invited_by=cls.get_invited_by_query(object_id_query=Cast(OuterRef("id"), output_field=CharField())), ),
).values(*shared_columns) type=Value("invitedmember", output_field=CharField()),
joined_date=Value("Unretrieved", output_field=CharField()),
invited_by=cls.get_invited_by_query(object_id_query=Cast(OuterRef("id"), output_field=CharField())),
)
.values(*shared_columns)
)
return convert_queryset_to_dict(permissions.union(invitations), is_model=False) return convert_queryset_to_dict(permissions.union(invitations), is_model=False)
@ -450,7 +456,7 @@ class MemberExport(BaseExport):
user=OuterRef("user"), user=OuterRef("user"),
) )
), ),
then=Value(DefaultEmail.HELP_EMAIL), then=Value(DefaultEmail.HELP_EMAIL.value),
), ),
default=F("user__email"), default=F("user__email"),
output_field=CharField(), output_field=CharField(),
@ -459,7 +465,7 @@ class MemberExport(BaseExport):
.order_by("action_time") .order_by("action_time")
.values("display_email")[:1] .values("display_email")[:1]
), ),
Value(DefaultUserValues.SYSTEM), Value(DefaultUserValues.SYSTEM.value),
output_field=CharField(), output_field=CharField(),
) )

View file

@ -29,7 +29,7 @@ class LogCode(Enum):
DEFAULT = 5 DEFAULT = 5
class DefaultEmail(Enum): class DefaultEmail(StrEnum):
"""Stores the string values of default emails """Stores the string values of default emails
Overview of emails: Overview of emails:
@ -43,7 +43,7 @@ class DefaultEmail(Enum):
HELP_EMAIL = "help@get.gov" HELP_EMAIL = "help@get.gov"
class DefaultUserValues(Enum): class DefaultUserValues(StrEnum):
"""Stores default values for a default user. """Stores default values for a default user.
Overview of defaults: Overview of defaults:
@ -55,7 +55,6 @@ class DefaultUserValues(Enum):
UNRETRIEVED = "Unretrieved" UNRETRIEVED = "Unretrieved"
class Step(StrEnum): class Step(StrEnum):
""" """
Names for each page of the domain request wizard. Names for each page of the domain request wizard.