mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-26 04:28:39 +02:00
Fix merge conflict + enum
This commit is contained in:
parent
e91526e602
commit
62f0205b4c
4 changed files with 76 additions and 71 deletions
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -158,14 +158,14 @@ class BaseExport(ABC):
|
||||||
Get a list of fields from related tables.
|
Get a list of fields from related tables.
|
||||||
"""
|
"""
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_queryset(cls, queryset, **kwargs):
|
def update_queryset(cls, queryset, **kwargs):
|
||||||
"""
|
"""
|
||||||
Returns an updated queryset. Override in subclass to update queryset.
|
Returns an updated queryset. Override in subclass to update queryset.
|
||||||
"""
|
"""
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def write_csv_before(cls, csv_writer, **kwargs):
|
def write_csv_before(cls, csv_writer, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -335,7 +335,7 @@ class MemberExport(BaseExport):
|
||||||
def get_model_annotation_dict(cls, request=None, **kwargs):
|
def get_model_annotation_dict(cls, request=None, **kwargs):
|
||||||
"""Combines the permissions and invitation model annotations for
|
"""Combines the permissions and invitation model annotations for
|
||||||
the final returned csv export which combines both of these contexts.
|
the final returned csv export which combines both of these contexts.
|
||||||
Returns a dictionary of a union between:
|
Returns a dictionary of a union between:
|
||||||
- UserPortfolioPermissionModelAnnotation.get_annotated_queryset(portfolio, csv_report=True)
|
- UserPortfolioPermissionModelAnnotation.get_annotated_queryset(portfolio, csv_report=True)
|
||||||
- PortfolioInvitationModelAnnotation.get_annotated_queryset(portfolio, csv_report=True)
|
- PortfolioInvitationModelAnnotation.get_annotated_queryset(portfolio, csv_report=True)
|
||||||
"""
|
"""
|
||||||
|
@ -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(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue