Merge pull request #836 from dod-ccpo/sidebar
Applications users were invited to were not showing in the portfolios sidebar
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
from sqlalchemy import or_
|
||||
from atst.database import db
|
||||
from atst.domain.common import Query
|
||||
from atst.models.portfolio import Portfolio
|
||||
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atst.models.application_role import (
|
||||
ApplicationRole,
|
||||
Status as ApplicationRoleStatus,
|
||||
)
|
||||
from atst.models.application import Application
|
||||
|
||||
|
||||
class PortfoliosQuery(Query):
|
||||
@@ -11,9 +17,38 @@ class PortfoliosQuery(Query):
|
||||
def get_for_user(cls, user):
|
||||
return (
|
||||
db.session.query(Portfolio)
|
||||
.join(PortfolioRole)
|
||||
.filter(PortfolioRole.user == user)
|
||||
.filter(PortfolioRole.status == PortfolioRoleStatus.ACTIVE)
|
||||
.filter(
|
||||
or_(
|
||||
Portfolio.id.in_(
|
||||
db.session.query(Portfolio.id)
|
||||
.join(Application)
|
||||
.filter(Portfolio.id == Application.portfolio_id)
|
||||
.filter(
|
||||
Application.id.in_(
|
||||
db.session.query(Application.id)
|
||||
.join(ApplicationRole)
|
||||
.filter(
|
||||
ApplicationRole.application_id == Application.id
|
||||
)
|
||||
.filter(ApplicationRole.user_id == user.id)
|
||||
.filter(
|
||||
ApplicationRole.status
|
||||
== ApplicationRoleStatus.ACTIVE
|
||||
)
|
||||
.subquery()
|
||||
)
|
||||
)
|
||||
),
|
||||
Portfolio.id.in_(
|
||||
db.session.query(Portfolio.id)
|
||||
.join(PortfolioRole)
|
||||
.filter(PortfolioRole.user == user)
|
||||
.filter(PortfolioRole.status == PortfolioRoleStatus.ACTIVE)
|
||||
.subquery()
|
||||
),
|
||||
)
|
||||
)
|
||||
.order_by(Portfolio.name.asc())
|
||||
.all()
|
||||
)
|
||||
|
||||
|
@@ -15,6 +15,7 @@ def has_portfolio_applications(_user, portfolio=None, **_kwargs):
|
||||
return True
|
||||
|
||||
|
||||
@applications_bp.route("/portfolios/<portfolio_id>")
|
||||
@applications_bp.route("/portfolios/<portfolio_id>/applications")
|
||||
@user_can(
|
||||
Permissions.VIEW_APPLICATION,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
from datetime import date, timedelta
|
||||
|
||||
from flask import render_template, request as http_request, g, redirect, url_for
|
||||
from flask import render_template, request as http_request, g
|
||||
|
||||
from . import portfolios_bp
|
||||
from atst.domain.reports import Reports
|
||||
@@ -19,14 +19,6 @@ def portfolios():
|
||||
return render_template("portfolios/blank_slate.html")
|
||||
|
||||
|
||||
@portfolios_bp.route("/portfolios/<portfolio_id>")
|
||||
@user_can(Permissions.VIEW_PORTFOLIO, message="view portfolio")
|
||||
def show_portfolio(portfolio_id):
|
||||
return redirect(
|
||||
url_for("applications.portfolio_applications", portfolio_id=portfolio_id)
|
||||
)
|
||||
|
||||
|
||||
@portfolios_bp.route("/portfolios/<portfolio_id>/reports")
|
||||
@user_can(Permissions.VIEW_PORTFOLIO_REPORTS, message="view portfolio reports")
|
||||
def reports(portfolio_id):
|
||||
|
@@ -30,7 +30,7 @@ def accept_invitation(portfolio_token):
|
||||
)
|
||||
|
||||
return redirect(
|
||||
url_for("portfolios.show_portfolio", portfolio_id=invite.portfolio.id)
|
||||
url_for("applications.portfolio_applications", portfolio_id=invite.portfolio.id)
|
||||
)
|
||||
|
||||
|
||||
|
@@ -145,7 +145,7 @@ MESSAGES = {
|
||||
"actions": """
|
||||
{% from "components/icon.html" import Icon %}
|
||||
<div class='alert__actions'>
|
||||
<a href='{{ url_for("portfolios.show_portfolio", portfolio_id=portfolio.id) }}' class='icon-link'>
|
||||
<a href='{{ url_for("applications.portfolio_applications", portfolio_id=portfolio.id) }}' class='icon-link'>
|
||||
{{ Icon('shield') }}
|
||||
<span>{{ "flash.portfolio_home" | translate }}</span>
|
||||
</a>
|
||||
|
Reference in New Issue
Block a user