Portfolio archiving
This commit is contained in:
@@ -1 +1,5 @@
|
||||
from .portfolios import Portfolios, PortfolioError
|
||||
from .portfolios import (
|
||||
Portfolios,
|
||||
PortfolioError,
|
||||
PortfolioDeletionApplicationsExistError,
|
||||
)
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from atst.database import db
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.domain.authz import Authorization
|
||||
from atst.domain.portfolio_roles import PortfolioRoles
|
||||
@@ -13,6 +14,10 @@ class PortfolioError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class PortfolioDeletionApplicationsExistError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class Portfolios(object):
|
||||
@classmethod
|
||||
def create(cls, user, portfolio_attrs):
|
||||
@@ -32,6 +37,21 @@ class Portfolios(object):
|
||||
portfolio = PortfoliosQuery.get(portfolio_id)
|
||||
return ScopedPortfolio(user, portfolio)
|
||||
|
||||
@classmethod
|
||||
def delete(cls, portfolio):
|
||||
if len(portfolio.applications) != 0:
|
||||
raise PortfolioDeletionApplicationsExistError()
|
||||
|
||||
for portfolio_role in portfolio.roles:
|
||||
PortfolioRoles.disable(portfolio_role)
|
||||
|
||||
portfolio.deleted = True
|
||||
|
||||
db.session.add(portfolio)
|
||||
db.session.commit()
|
||||
|
||||
return portfolio
|
||||
|
||||
@classmethod
|
||||
def get_for_update(cls, portfolio_id):
|
||||
portfolio = PortfoliosQuery.get(portfolio_id)
|
||||
|
@@ -10,7 +10,9 @@ from atst.utils import first_or_none
|
||||
from atst.database import db
|
||||
|
||||
|
||||
class Portfolio(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
||||
class Portfolio(
|
||||
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.DeletableMixin
|
||||
):
|
||||
__tablename__ = "portfolios"
|
||||
|
||||
id = types.Id()
|
||||
|
@@ -90,6 +90,7 @@ def render_admin_page(portfolio, form=None):
|
||||
user=g.current_user,
|
||||
ppoc_id=members_data[0].get("member_id"),
|
||||
current_member_id=current_member_id,
|
||||
applications_count=len(portfolio.applications),
|
||||
)
|
||||
|
||||
|
||||
|
@@ -74,3 +74,11 @@ def reports(portfolio_id):
|
||||
expiration_date=expiration_date,
|
||||
remaining_days=remaining_days,
|
||||
)
|
||||
|
||||
|
||||
@portfolios_bp.route("/portfolios/<portfolio_id>/destroy", methods=["POST"])
|
||||
@user_can(Permissions.ARCHIVE_PORTFOLIO, message="archive portfolio")
|
||||
def delete_portfolio(portfolio_id):
|
||||
Portfolios.delete(portfolio=g.portfolio)
|
||||
|
||||
return redirect(url_for("atst.home"))
|
||||
|
Reference in New Issue
Block a user