Add status labels to portfolio managers table.

Update PortfolioRole.display_status() to return same type of data as
ApplicationRole.display_status().
This commit is contained in:
leigh-mil 2020-01-06 16:54:24 -05:00
parent a6fcd0c76f
commit da398bf1ff
6 changed files with 25 additions and 26 deletions

View File

@ -12,17 +12,6 @@ from atst.utils import first_or_none
from atst.models.mixins.auditable import record_permission_sets_updates from atst.models.mixins.auditable import record_permission_sets_updates
MEMBER_STATUSES = {
"active": "Active",
"revoked": "Invite revoked",
"expired": "Invite expired",
"error": "Error on invite",
"pending": "Pending",
"unknown": "Unknown errors",
"disabled": "Disabled",
}
class Status(Enum): class Status(Enum):
ACTIVE = "active" ACTIVE = "active"
DISABLED = "disabled" DISABLED = "disabled"
@ -90,23 +79,23 @@ class PortfolioRole(
@property @property
def display_status(self): def display_status(self):
if self.status == Status.ACTIVE: if self.status == Status.ACTIVE:
return MEMBER_STATUSES["active"] return "active"
elif self.status == Status.DISABLED: elif self.status == Status.DISABLED:
return MEMBER_STATUSES["disabled"] return "disabled"
elif self.latest_invitation: elif self.latest_invitation:
if self.latest_invitation.is_revoked: if self.latest_invitation.is_revoked:
return MEMBER_STATUSES["revoked"] return "invite_revoked"
elif self.latest_invitation.is_rejected_wrong_user: elif self.latest_invitation.is_rejected_wrong_user:
return MEMBER_STATUSES["error"] return "invite_error"
elif ( elif (
self.latest_invitation.is_rejected_expired self.latest_invitation.is_rejected_expired
or self.latest_invitation.is_expired or self.latest_invitation.is_expired
): ):
return MEMBER_STATUSES["expired"] return "invite_expired"
else: else:
return MEMBER_STATUSES["pending"] return "invite_pending"
else: else:
return MEMBER_STATUSES["unknown"] return "unknown"
def has_permission_set(self, perm_set_name): def has_permission_set(self, perm_set_name):
return first_or_none( return first_or_none(

View File

@ -46,6 +46,7 @@ def filter_members_data(members_list):
"role_id": member.id, "role_id": member.id,
"user_name": member.user_name, "user_name": member.user_name,
"permission_sets": filter_perm_sets_data(member), "permission_sets": filter_perm_sets_data(member),
"status": member.display_status,
# add in stuff here for forms # add in stuff here for forms
} }
) )

View File

@ -9,11 +9,15 @@
"text": "changes pending", "text": "changes pending",
"color": "default", "color": "default",
}, },
"ppoc": {"text": "primary point of contact"}
} %} } %}
{% if type -%} {% if type in label_info.keys() -%}
<span class='label label--{{ label_info[type]["color"] }} {{ classes }}'> <span class='label label--{{ label_info[type]["color"] }} {{ classes }}'>
{{ Icon(label_info[type]["icon"]) }} {{ label_info[type]["text"] }} {% if label_info[type]["icon"] %}
{{ Icon(label_info[type]["icon"]) }}
{% endif %}
{{ label_info[type]["text"] }}
</span> </span>
{%- endif %} {%- endif %}
{%- endmacro %} {%- endmacro %}

View File

@ -1,5 +1,6 @@
{% extends "portfolios/base.html" %} {% extends "portfolios/base.html" %}
{% from "components/label.html" import Label %}
{% from "components/pagination.html" import Pagination %} {% from "components/pagination.html" import Pagination %}
{% from 'components/save_button.html' import SaveButton %} {% from 'components/save_button.html' import SaveButton %}
{% from 'components/sticky_cta.html' import StickyCTA %} {% from 'components/sticky_cta.html' import StickyCTA %}

View File

@ -21,6 +21,8 @@
<tr> <tr>
<td> <td>
<strong>{{ ppoc.user_name }}{% if ppoc.role_id == current_member_id %} (You){% endif %}</strong> <strong>{{ ppoc.user_name }}{% if ppoc.role_id == current_member_id %} (You){% endif %}</strong>
<br>
{{ Label(type="ppoc", classes='label--below label--purple')}}
</td> </td>
<td> <td>
{% for perm, value in ppoc.permission_sets.items() -%} {% for perm, value in ppoc.permission_sets.items() -%}
@ -34,6 +36,8 @@
<tr> <tr>
<td> <td>
<strong>{{ member.user_name }}{% if member.role_id == current_member_id %} (You){% endif %}</strong> <strong>{{ member.user_name }}{% if member.role_id == current_member_id %} (You){% endif %}</strong>
<br>
{{ Label(type=member.status, classes='label--below')}}
</td> </td>
<td> <td>
{% for perm, value in member.permission_sets.items() -%} {% for perm, value in member.permission_sets.items() -%}

View File

@ -151,12 +151,12 @@ def test_event_details():
def test_status_when_member_is_active(): def test_status_when_member_is_active():
portfolio_role = PortfolioRoleFactory.create(status=PortfolioRoleStatus.ACTIVE) portfolio_role = PortfolioRoleFactory.create(status=PortfolioRoleStatus.ACTIVE)
assert portfolio_role.display_status == "Active" assert portfolio_role.display_status == "active"
def test_status_when_member_is_disabled(): def test_status_when_member_is_disabled():
portfolio_role = PortfolioRoleFactory.create(status=PortfolioRoleStatus.DISABLED) portfolio_role = PortfolioRoleFactory.create(status=PortfolioRoleStatus.DISABLED)
assert portfolio_role.display_status == "Disabled" assert portfolio_role.display_status == "disabled"
def test_status_when_invitation_has_been_rejected_for_expirations(): def test_status_when_invitation_has_been_rejected_for_expirations():
@ -168,7 +168,7 @@ def test_status_when_invitation_has_been_rejected_for_expirations():
PortfolioInvitationFactory.create( PortfolioInvitationFactory.create(
role=portfolio_role, status=InvitationStatus.REJECTED_EXPIRED role=portfolio_role, status=InvitationStatus.REJECTED_EXPIRED
) )
assert portfolio_role.display_status == "Invite expired" assert portfolio_role.display_status == "invite_expired"
def test_status_when_invitation_has_been_rejected_for_wrong_user(): def test_status_when_invitation_has_been_rejected_for_wrong_user():
@ -180,7 +180,7 @@ def test_status_when_invitation_has_been_rejected_for_wrong_user():
PortfolioInvitationFactory.create( PortfolioInvitationFactory.create(
role=portfolio_role, status=InvitationStatus.REJECTED_WRONG_USER role=portfolio_role, status=InvitationStatus.REJECTED_WRONG_USER
) )
assert portfolio_role.display_status == "Error on invite" assert portfolio_role.display_status == "invite_error"
def test_status_when_invitation_has_been_revoked(): def test_status_when_invitation_has_been_revoked():
@ -192,7 +192,7 @@ def test_status_when_invitation_has_been_revoked():
PortfolioInvitationFactory.create( PortfolioInvitationFactory.create(
role=portfolio_role, status=InvitationStatus.REVOKED role=portfolio_role, status=InvitationStatus.REVOKED
) )
assert portfolio_role.display_status == "Invite revoked" assert portfolio_role.display_status == "invite_revoked"
def test_status_when_invitation_is_expired(): def test_status_when_invitation_is_expired():
@ -206,7 +206,7 @@ def test_status_when_invitation_is_expired():
status=InvitationStatus.PENDING, status=InvitationStatus.PENDING,
expiration_time=datetime.datetime.now() - datetime.timedelta(seconds=1), expiration_time=datetime.datetime.now() - datetime.timedelta(seconds=1),
) )
assert portfolio_role.display_status == "Invite expired" assert portfolio_role.display_status == "invite_expired"
def test_can_not_resend_invitation_if_active(): def test_can_not_resend_invitation_if_active():