67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
from sqlalchemy import or_
|
|
from atat.database import db
|
|
from atat.domain.common import Query
|
|
from atat.models.portfolio import Portfolio
|
|
from atat.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
|
from atat.models.application_role import (
|
|
ApplicationRole,
|
|
Status as ApplicationRoleStatus,
|
|
)
|
|
from atat.models.application import Application
|
|
from atat.models.portfolio_state_machine import PortfolioStateMachine
|
|
|
|
# from atat.models.application import Application
|
|
|
|
|
|
class PortfolioStateMachinesQuery(Query):
|
|
model = PortfolioStateMachine
|
|
|
|
|
|
class PortfoliosQuery(Query):
|
|
model = Portfolio
|
|
|
|
@classmethod
|
|
def get_for_user(cls, user):
|
|
return (
|
|
db.session.query(Portfolio)
|
|
.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
|
|
)
|
|
.filter(ApplicationRole.deleted == False)
|
|
.subquery()
|
|
)
|
|
)
|
|
),
|
|
Portfolio.id.in_(
|
|
db.session.query(Portfolio.id)
|
|
.join(PortfolioRole)
|
|
.filter(PortfolioRole.user == user)
|
|
.filter(PortfolioRole.status == PortfolioRoleStatus.ACTIVE)
|
|
.subquery()
|
|
),
|
|
)
|
|
)
|
|
.filter(Portfolio.deleted == False)
|
|
.order_by(Portfolio.name.asc())
|
|
.all()
|
|
)
|
|
|
|
@classmethod
|
|
def create_portfolio_role(cls, user, portfolio, **kwargs):
|
|
return PortfolioRole(user=user, portfolio=portfolio, **kwargs)
|