Merge pull request #829 from dod-ccpo/portfolio-role-display
Use portfolio_role entity to display and update portfolio member info.
This commit is contained in:
@@ -9,8 +9,8 @@ from atst.utils.localization import translate
|
||||
|
||||
|
||||
class PermissionsForm(BaseForm):
|
||||
member = StringField()
|
||||
user_id = HiddenField()
|
||||
member_name = StringField()
|
||||
member_id = HiddenField()
|
||||
perms_app_mgmt = SelectField(
|
||||
translate("forms.new_member.app_mgmt"),
|
||||
choices=[
|
||||
|
@@ -26,14 +26,18 @@ class Portfolio(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
||||
task_orders = relationship("TaskOrder")
|
||||
|
||||
@property
|
||||
def owner(self):
|
||||
def owner_role(self):
|
||||
def _is_portfolio_owner(portfolio_role):
|
||||
return PermissionSets.PORTFOLIO_POC in [
|
||||
perms_set.name for perms_set in portfolio_role.permission_sets
|
||||
]
|
||||
|
||||
owner = first_or_none(_is_portfolio_owner, self.roles)
|
||||
return owner.user if owner else None
|
||||
return first_or_none(_is_portfolio_owner, self.roles)
|
||||
|
||||
@property
|
||||
def owner(self):
|
||||
owner_role = self.owner_role
|
||||
return owner_role.user if owner_role else None
|
||||
|
||||
@property
|
||||
def users(self):
|
||||
|
@@ -160,6 +160,10 @@ class PortfolioRole(
|
||||
self.latest_invitation and self.latest_invitation.is_inactive
|
||||
)
|
||||
|
||||
@property
|
||||
def full_name(self):
|
||||
return self.user.full_name
|
||||
|
||||
|
||||
Index(
|
||||
"portfolio_role_user_portfolio",
|
||||
|
@@ -12,6 +12,7 @@ from atst.forms.portfolio import PortfolioForm
|
||||
import atst.forms.portfolio_member as member_forms
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.utils import first_or_none
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.domain.exceptions import UnauthorizedError
|
||||
|
||||
@@ -25,8 +26,8 @@ def permission_str(member, edit_perm_set, view_perm_set):
|
||||
|
||||
def serialize_member_form_data(member):
|
||||
return {
|
||||
"member": member.user.full_name,
|
||||
"user_id": member.user_id,
|
||||
"member_name": member.full_name,
|
||||
"member_id": member.id,
|
||||
"perms_app_mgmt": permission_str(
|
||||
member,
|
||||
PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT,
|
||||
@@ -53,7 +54,7 @@ def serialize_member_form_data(member):
|
||||
def get_members_data(portfolio):
|
||||
members = [serialize_member_form_data(member) for member in portfolio.members]
|
||||
for member in members:
|
||||
if member["user_id"] == portfolio.owner.id:
|
||||
if member["member_id"] == portfolio.owner_role.id:
|
||||
ppoc = member
|
||||
members.remove(member)
|
||||
members.insert(0, ppoc)
|
||||
@@ -76,6 +77,11 @@ def render_admin_page(portfolio, form=None):
|
||||
(pf_role.user.id, pf_role.user.full_name)
|
||||
]
|
||||
|
||||
current_member = first_or_none(
|
||||
lambda m: m.user_id == g.current_user.id, portfolio.members
|
||||
)
|
||||
current_member_id = current_member.id if current_member else None
|
||||
|
||||
return render_template(
|
||||
"portfolios/admin.html",
|
||||
form=form,
|
||||
@@ -86,7 +92,8 @@ def render_admin_page(portfolio, form=None):
|
||||
portfolio=portfolio,
|
||||
audit_events=audit_events,
|
||||
user=g.current_user,
|
||||
members_data=members_data,
|
||||
ppoc_id=members_data[0].get("member_id"),
|
||||
current_member_id=current_member_id,
|
||||
)
|
||||
|
||||
|
||||
@@ -105,12 +112,11 @@ def edit_members(portfolio_id):
|
||||
|
||||
if member_perms_form.validate():
|
||||
for subform in member_perms_form.members_permissions:
|
||||
user_id = subform.user_id.data
|
||||
member = Users.get(user_id=user_id)
|
||||
if member is not portfolio.owner:
|
||||
member_id = subform.member_id.data
|
||||
member = PortfolioRoles.get_by_id(member_id)
|
||||
if member is not portfolio.owner_role:
|
||||
new_perm_set = subform.data["permission_sets"]
|
||||
portfolio_role = PortfolioRoles.get(portfolio.id, user_id)
|
||||
PortfolioRoles.update(portfolio_role, new_perm_set)
|
||||
PortfolioRoles.update(member, new_perm_set)
|
||||
|
||||
flash("update_portfolio_members", portfolio=portfolio)
|
||||
|
||||
|
Reference in New Issue
Block a user