mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-25 12:08:40 +02:00
Added admin tag, added user invites logic
This commit is contained in:
parent
64e623ea97
commit
5e2a1ced38
3 changed files with 72 additions and 23 deletions
|
@ -1926,9 +1926,13 @@ class MembersTable extends LoadTableBase {
|
|||
|
||||
const row = document.createElement('tr');
|
||||
|
||||
let admin_tagHTML = ``;
|
||||
if (member.is_admin)
|
||||
admin_tagHTML = `<span class="usa-tag margin-left-1">Admin</span>`
|
||||
|
||||
row.innerHTML = `
|
||||
<th scope="row" role="rowheader" data-label="member email">
|
||||
${member_email}
|
||||
${member_email} ${admin_tagHTML}
|
||||
</th>
|
||||
<td data-sort-value="${last_active}" data-label="last_active">
|
||||
${last_active}
|
||||
|
|
|
@ -28,3 +28,7 @@
|
|||
#extended-logo .usa-tooltip__body {
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
|
||||
.usa-tags {
|
||||
background-color: #005288;
|
||||
}
|
|
@ -6,6 +6,7 @@ from django.urls import reverse
|
|||
from django.utils import timezone
|
||||
from django.db.models import Q
|
||||
|
||||
from registrar.models.portfolio_invitation import PortfolioInvitation
|
||||
from registrar.models.user import User
|
||||
from registrar.models.user_portfolio_permission import UserPortfolioPermission
|
||||
|
||||
|
@ -13,6 +14,7 @@ from registrar.models.user_portfolio_permission import UserPortfolioPermission
|
|||
import logging
|
||||
from venv import logger
|
||||
from registrar.management.commands.utility.terminal_helper import TerminalColors, TerminalHelper
|
||||
from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -24,6 +26,17 @@ def get_portfolio_members_json(request):
|
|||
objects = get_member_objects_from_request(request)
|
||||
if(objects is not None):
|
||||
member_ids = objects.values_list("id", flat=True)
|
||||
|
||||
portfolio = request.session.get("portfolio")
|
||||
admin_ids = UserPortfolioPermission.objects.filter(
|
||||
portfolio=portfolio,
|
||||
roles__overlap=[
|
||||
UserPortfolioRoleChoices.ORGANIZATION_ADMIN,
|
||||
],
|
||||
).values_list("user__id", flat=True)
|
||||
portfolio_invitation_emails = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list("email", flat=True)
|
||||
|
||||
|
||||
unfiltered_total = member_ids.count()
|
||||
|
||||
objects = apply_search(objects, request)
|
||||
|
@ -34,7 +47,7 @@ def get_portfolio_members_json(request):
|
|||
page_number = request.GET.get("page", 1)
|
||||
page_obj = paginator.get_page(page_number)
|
||||
members = [
|
||||
serialize_members(request, member, request.user) 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-20-24):
|
||||
|
@ -93,13 +106,13 @@ def get_member_objects_from_request(request):
|
|||
# else:
|
||||
# filter_condition = Q(portfolio=portfolio, creator=request.user)
|
||||
|
||||
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, "getting permissions") # TODO: delete me
|
||||
permissions = UserPortfolioPermission.objects.filter(
|
||||
portfolio=portfolio
|
||||
)
|
||||
|
||||
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, f'permissions {permissions}') # TODO: delete me
|
||||
members = User.objects.filter(portfolio_permissions__in=permissions)
|
||||
|
||||
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))
|
||||
TerminalHelper.colorful_logger(logger.info, TerminalColors.OKCYAN, f'members {members}') # TODO: delete me
|
||||
return members
|
||||
|
||||
|
@ -141,7 +154,35 @@ def apply_search(queryset, request):
|
|||
# return queryset.order_by(sort_by)
|
||||
|
||||
|
||||
def serialize_members(request, member, user):
|
||||
|
||||
|
||||
# TODO: delete these...(failed experiment)
|
||||
# def get_admin_members(request):
|
||||
# portfolio = request.GET.get("portfolio")
|
||||
# # Filter UserPortfolioPermission objects related to the portfolio
|
||||
# admin_permissions = UserPortfolioPermission.objects.filter(
|
||||
# portfolio=portfolio, roles__contains=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
|
||||
# )
|
||||
|
||||
# # Get the user objects associated with these permissions
|
||||
# admin_users = User.objects.filter(portfolio_permissions__in=admin_permissions)
|
||||
|
||||
# return admin_users
|
||||
|
||||
# def get_non_admin_members(request):
|
||||
# portfolio = request.GET.get("portfolio")
|
||||
# # Filter UserPortfolioPermission objects related to the portfolio that do NOT have the "Admin" role
|
||||
# non_admin_permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio).exclude(
|
||||
# roles__contains=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
|
||||
# )
|
||||
|
||||
# # Get the user objects associated with these permissions
|
||||
# non_admin_users = User.objects.filter(portfolio_permissions__in=non_admin_permissions)
|
||||
|
||||
# return non_admin_users
|
||||
|
||||
|
||||
def serialize_members(request, member, user, admin_ids, portfolio_invitation_emails):
|
||||
|
||||
# ------- DELETABLE
|
||||
# deletable_statuses = [
|
||||
|
@ -165,32 +206,32 @@ def serialize_members(request, member, user):
|
|||
# If the user has view user permissions only, show the "View" link (no gear icon).
|
||||
view_only = not user.has_edit_members_portfolio_permission
|
||||
|
||||
# ------- ACTIVITY
|
||||
is_invited = member.verification_type == User.VerificationTypeChoices.INVITED
|
||||
last_active = "invited" if is_invited else "unknown"
|
||||
# ------- USER STATUS
|
||||
is_invited = member.email in portfolio_invitation_emails
|
||||
last_active = "Invited" if is_invited else "Unknown"
|
||||
if member.last_login:
|
||||
last_active = member.last_login.strftime("%b. %d, %Y")
|
||||
|
||||
|
||||
# portfolio = request.session.get("portfolio")
|
||||
# roles = member.portfolio_role_summary(portfolio)
|
||||
# TerminalHelper.colorful_logger(logger.info, TerminalColors.OKGREEN, f'roles {roles}') # TODO: delete me
|
||||
# is_admin = 'Admin' in roles # TODO: use enums? Is there a better way to grab this?
|
||||
|
||||
# is_admin = member.has_edit_suborganization_portfolio_permission(portfolio)
|
||||
# is_admin = member._has_portfolio_permission(portfolio, UserPortfolioRoleChoices.ORGANIZATION_ADMIN)
|
||||
|
||||
is_admin = member.id in admin_ids
|
||||
|
||||
|
||||
# ------- SERIALIZE
|
||||
return {
|
||||
"id": member.id,
|
||||
"name": member.get_formatted_name(),
|
||||
"email": member.email,
|
||||
"is_admin": is_admin,
|
||||
"last_active": last_active,
|
||||
"action_url": '#', #reverse("members", kwargs={"pk": member.id}), #TODO: Future ticket?
|
||||
"action_label": ("View" if view_only else "Manage"),
|
||||
"svg_icon": ("visibility" if view_only else "settings"),
|
||||
}
|
||||
|
||||
# return {
|
||||
# "id": domain.id,
|
||||
# "name": domain.name,
|
||||
# "expiration_date": domain.expiration_date,
|
||||
# "state": domain.state,
|
||||
# "state_display": domain.state_display(),
|
||||
# "get_state_help_text": domain.get_state_help_text(),
|
||||
# "action_url": reverse("domain", kwargs={"pk": domain.id}),
|
||||
# "action_label": ("View" if view_only else "Manage"),
|
||||
# "svg_icon": ("visibility" if view_only else "settings"),
|
||||
# "domain_info__sub_organization": suborganization_name,
|
||||
# }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue