From 4f345b462fe84b202541f1f768b7d896d632d46d Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Tue, 7 Jan 2020 16:54:50 -0500 Subject: [PATCH] Add resend invite form/modal, update routes and tests as necessary. --- atst/routes/portfolios/admin.py | 39 +++++++++++------ atst/routes/portfolios/invitations.py | 25 ++++++++--- atst/utils/flash.py | 5 +++ .../fragments/portfolio_members.html | 33 +++++++++++++- tests/routes/portfolios/test_invitations.py | 43 ++++--------------- 5 files changed, 90 insertions(+), 55 deletions(-) diff --git a/atst/routes/portfolios/admin.py b/atst/routes/portfolios/admin.py index 921cd54a..c98bd024 100644 --- a/atst/routes/portfolios/admin.py +++ b/atst/routes/portfolios/admin.py @@ -38,20 +38,35 @@ def filter_perm_sets_data(member): return perm_sets_data -def filter_members_data(members_list, portfolio): +def filter_members_data(members_list): members_data = [] for member in members_list: permission_sets = filter_perm_sets_data(member) - members_data.append( - { - "role_id": member.id, - "user_name": member.user_name, - "permission_sets": filter_perm_sets_data(member), - "status": member.display_status, - "ppoc": PermissionSets.PORTFOLIO_POC in member.permission_sets, - "form": member_forms.PermissionsForm(permission_sets), - } - ) + ppoc = PermissionSets.PORTFOLIO_POC in member.permission_sets + member_data = { + "role_id": member.id, + "user_name": member.user_name, + "permission_sets": filter_perm_sets_data(member), + "status": member.display_status, + "ppoc": ppoc, + "form": member_forms.PermissionsForm(permission_sets), + } + + if not ppoc: + update_invite_form = ( + member_forms.NewForm(user_data=member.latest_invitation) + if member.latest_invitation and member.latest_invitation.can_resend + else member_forms.NewForm() + ) + invite_token = ( + member.latest_invitation.token + if member.latest_invitation and member.latest_invitation.can_resend + else None + ) + member_data["update_invite_form"] = update_invite_form + member_data["invite_token"] = invite_token + + members_data.append(member_data) return sorted(members_data, key=lambda member: member["user_name"]) @@ -76,7 +91,7 @@ def render_admin_page(portfolio, form=None): "portfolios/admin.html", form=form, portfolio_form=portfolio_form, - members=filter_members_data(member_list, portfolio), + members=filter_members_data(member_list), new_manager_form=member_forms.NewForm(), assign_ppoc_form=assign_ppoc_form, portfolio=portfolio, diff --git a/atst/routes/portfolios/invitations.py b/atst/routes/portfolios/invitations.py index 09a22d1f..54938380 100644 --- a/atst/routes/portfolios/invitations.py +++ b/atst/routes/portfolios/invitations.py @@ -54,13 +54,24 @@ def revoke_invitation(portfolio_id, portfolio_token): ) @user_can(Permissions.EDIT_PORTFOLIO_USERS, message="resend invitation") def resend_invitation(portfolio_id, portfolio_token): - invite = PortfolioInvitations.resend(g.current_user, portfolio_token) - send_portfolio_invitation( - invitee_email=invite.email, - inviter_name=g.current_user.full_name, - token=invite.token, - ) - flash("resend_portfolio_invitation", user_name=invite.user_name) + form = member_forms.NewForm(http_request.form) + + if form.validate(): + invite = PortfolioInvitations.resend( + g.current_user, portfolio_token, form.data["user_data"] + ) + send_portfolio_invitation( + invitee_email=invite.email, + inviter_name=g.current_user.full_name, + token=invite.token, + ) + flash("resend_portfolio_invitation", user_name=invite.user_name) + else: + user_name = "{} {}".format( + form["user_data"]["first_name"].data, form["user_data"]["last_name"].data + ) + flash("resend_portfolio_invitation_error", user_name=user_name) + return redirect( url_for( "portfolios.admin", diff --git a/atst/utils/flash.py b/atst/utils/flash.py index 3c9eacc1..000ff629 100644 --- a/atst/utils/flash.py +++ b/atst/utils/flash.py @@ -128,6 +128,11 @@ MESSAGES = { "message": "flash.portfolio_invite.resent.message", "category": "success", }, + "resend_portfolio_invitation_error": { + "title_template": "Portfolio invitation error", + "message_template": "There was an error processing the invitation for {{ user_name }}.", + "category": "error", + }, "revoked_portfolio_access": { "title": "flash.portfolio_member.revoked.title", "message": "flash.portfolio_member.revoked.message", diff --git a/templates/portfolios/fragments/portfolio_members.html b/templates/portfolios/fragments/portfolio_members.html index 59bd5d8a..9ea7794f 100644 --- a/templates/portfolios/fragments/portfolio_members.html +++ b/templates/portfolios/fragments/portfolio_members.html @@ -9,6 +9,9 @@ {% if user_can(permissions.EDIT_PORTFOLIO_USERS) -%} {% for member in members -%} + {% set invite_pending = member.status == 'invite_pending' %} + {% set invite_expired = member.status == 'invite_expired' %} + {% set modal_name = "edit_member-{}".format(loop.index) %} {% call Modal(modal_name, classes="form-content--app-mem") %}