This commit is contained in:
CocoByte 2024-09-24 19:13:43 -06:00
parent 8673bc83f7
commit 1ad805ba30
No known key found for this signature in database
GPG key ID: BBFAA2526384C97F
6 changed files with 40 additions and 36 deletions

View file

@ -76,7 +76,6 @@ urlpatterns = [
views.PortfolioNoDomainsView.as_view(), views.PortfolioNoDomainsView.as_view(),
name="no-portfolio-domains", name="no-portfolio-domains",
), ),
path( path(
"members/", "members/",
views.PortfolioMembersView.as_view(), views.PortfolioMembersView.as_view(),

View file

@ -257,11 +257,9 @@ class Command(BaseCommand):
message = f"Added portfolio '{portfolio}' to {len(domain_infos)} domains" message = f"Added portfolio '{portfolio}' to {len(domain_infos)} domains"
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, message) TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, message)
def handle_portfolio_members(self, portfolio: Portfolio, federal_agency: FederalAgency): def handle_portfolio_members(self, portfolio: Portfolio, federal_agency: FederalAgency):
""" """
Associate portfolio with members for a federal agency. Associate portfolio with members for a federal agency.
Updates all relevant member records. Updates all relevant member records.
""" """
# TODO: future ticket? # TODO: future ticket?

View file

@ -6,10 +6,11 @@ from django.contrib.auth.decorators import login_required
from django.urls import reverse from django.urls import reverse
from django.db.models import Q from django.db.models import Q
#---Logger # ---Logger
import logging import logging
from venv import logger from venv import logger
from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -54,7 +55,7 @@ def get_domain_ids_from_request(request):
""" """
portfolio = request.GET.get("portfolio") portfolio = request.GET.get("portfolio")
# TODO: delete me # TODO: delete me
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, f'domain portfolio = {portfolio}') TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, f"domain portfolio = {portfolio}")
if portfolio: if portfolio:
current_user: User = request.user current_user: User = request.user
if current_user.is_org_user(request) and current_user.has_view_all_domains_portfolio_permission(portfolio): if current_user.is_org_user(request) and current_user.has_view_all_domains_portfolio_permission(portfolio):

View file

@ -1,4 +1,3 @@
from django.http import JsonResponse from django.http import JsonResponse
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -10,11 +9,12 @@ from registrar.models.portfolio_invitation import PortfolioInvitation
from registrar.models.user import User from registrar.models.user import User
from registrar.models.user_portfolio_permission import UserPortfolioPermission from registrar.models.user_portfolio_permission import UserPortfolioPermission
#---Logger # ---Logger
import logging import logging
from venv import logger from venv import logger
from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper
from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -24,7 +24,7 @@ def get_portfolio_members_json(request):
get all members that are associated with the given portfolio""" get all members that are associated with the given portfolio"""
objects = get_member_objects_from_request(request) objects = get_member_objects_from_request(request)
if(objects is not None): if objects is not None:
member_ids = objects.values_list("id", flat=True) member_ids = objects.values_list("id", flat=True)
portfolio = request.session.get("portfolio") portfolio = request.session.get("portfolio")
@ -34,8 +34,9 @@ def get_portfolio_members_json(request):
UserPortfolioRoleChoices.ORGANIZATION_ADMIN, UserPortfolioRoleChoices.ORGANIZATION_ADMIN,
], ],
).values_list("user__id", flat=True) ).values_list("user__id", flat=True)
portfolio_invitation_emails = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list("email", flat=True) portfolio_invitation_emails = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list(
"email", flat=True
)
unfiltered_total = member_ids.count() unfiltered_total = member_ids.count()
@ -47,7 +48,8 @@ def get_portfolio_members_json(request):
page_number = request.GET.get("page", 1) page_number = request.GET.get("page", 1)
page_obj = paginator.get_page(page_number) page_obj = paginator.get_page(page_number)
members = [ members = [
serialize_members(request, member, request.user, admin_ids, portfolio_invitation_emails) for member in page_obj.object_list serialize_members(request, member, request.user, admin_ids, portfolio_invitation_emails)
for member in page_obj.object_list
] ]
# DEVELOPER'S NOTE (9-24-24): # DEVELOPER'S NOTE (9-24-24):
@ -107,14 +109,16 @@ def get_member_objects_from_request(request):
# else: # else:
# filter_condition = Q(portfolio=portfolio, creator=request.user) # filter_condition = Q(portfolio=portfolio, creator=request.user)
permissions = UserPortfolioPermission.objects.filter( permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio)
portfolio=portfolio
portfolio_invitation_emails = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list(
"email", flat=True
) )
portfolio_invitation_emails = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list("email", flat=True) members = User.objects.filter(
Q(portfolio_permissions__in=permissions) | Q(email__in=portfolio_invitation_emails)
members = User.objects.filter(Q(portfolio_permissions__in=permissions) | Q(email__in=portfolio_invitation_emails)) )
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKCYAN, f'members {members}') # TODO: delete me TerminalHelper.colorful_logger(logger.info, TerminalColors.OKCYAN, f"members {members}") # TODO: delete me
return members return members
@ -176,7 +180,7 @@ def serialize_members(request, member, user, admin_ids, portfolio_invitation_ema
"email": member.email, "email": member.email,
"is_admin": is_admin, "is_admin": is_admin,
"last_active": last_active, "last_active": last_active,
"action_url": '#', #reverse("members", kwargs={"pk": member.id}), # TODO: Future ticket? "action_url": "#", # reverse("members", kwargs={"pk": member.id}), # TODO: Future ticket?
"action_label": ("View" if view_only else "Manage"), "action_label": ("View" if view_only else "Manage"),
"svg_icon": ("visibility" if view_only else "settings"), "svg_icon": ("visibility" if view_only else "settings"),
} }

View file

@ -21,12 +21,14 @@ from django.views.generic.edit import FormMixin
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
#---Logger # ---Logger
import logging import logging
from venv import logger from venv import logger
from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class PortfolioDomainsView(PortfolioDomainsPermissionView, View): class PortfolioDomainsView(PortfolioDomainsPermissionView, View):
template_name = "portfolio_domains.html" template_name = "portfolio_domains.html"
@ -61,7 +63,9 @@ class PortfolioMembersView(PortfolioMembersPermissionView, View):
# We can override the base class. This view only needs this item. # We can override the base class. This view only needs this item.
context = {} context = {}
portfolio = self.request.session.get("portfolio") portfolio = self.request.session.get("portfolio")
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, f'PortfolioMembersView portfolio = {portfolio}') TerminalHelper.colorful_logger(
logger.info, TerminalColors.OKGREEN, f"PortfolioMembersView portfolio = {portfolio}"
)
if portfolio: if portfolio:
# # ------ Gets admin members # # ------ Gets admin members
@ -72,7 +76,6 @@ class PortfolioMembersView(PortfolioMembersPermissionView, View):
# ], # ],
# ).values_list("user__id", flat=True) # ).values_list("user__id", flat=True)
# # ------ Gets non-admin members # # ------ Gets non-admin members
# # Filter UserPortfolioPermission objects related to the portfolio that do NOT have the "Admin" role # # Filter UserPortfolioPermission objects related to the portfolio that do NOT have the "Admin" role
# non_admin_permissions = UserPortfolioPermission.objects.filter(portfolio=obj).exclude( # non_admin_permissions = UserPortfolioPermission.objects.filter(portfolio=obj).exclude(
@ -81,17 +84,15 @@ class PortfolioMembersView(PortfolioMembersPermissionView, View):
# # Get the user objects associated with these permissions # # Get the user objects associated with these permissions
# non_admin_users = User.objects.filter(portfolio_permissions__in=non_admin_permissions) # non_admin_users = User.objects.filter(portfolio_permissions__in=non_admin_permissions)
# ------- Gets all members # ------- Gets all members
member_ids = UserPortfolioPermission.objects.filter( member_ids = UserPortfolioPermission.objects.filter(portfolio=portfolio).values_list("user__id", flat=True)
portfolio=portfolio
).values_list("user__id", flat=True)
all_members = User.objects.filter(id__in=member_ids) all_members = User.objects.filter(id__in=member_ids)
context["portfolio_members"] = all_members context["portfolio_members"] = all_members
context["portfolio_members_count"] = all_members.count() context["portfolio_members_count"] = all_members.count()
return render(request, "portfolio_members.html", context) return render(request, "portfolio_members.html", context)
class PortfolioNoDomainsView(NoPortfolioDomainsPermissionView, View): class PortfolioNoDomainsView(NoPortfolioDomainsPermissionView, View):
"""Some users have access to the underlying portfolio, but not any domains. """Some users have access to the underlying portfolio, but not any domains.
This is a custom view which explains that to the user - and denotes who to contact. This is a custom view which explains that to the user - and denotes who to contact.

View file

@ -19,6 +19,7 @@ logger = logging.getLogger(__name__)
import logging import logging
from venv import logger from venv import logger
from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)