Sort task orders by status and time_created

This commit is contained in:
richard-dds 2019-06-10 11:32:53 -04:00
parent e84e61bbad
commit 7f4f857424
4 changed files with 21 additions and 9 deletions

View File

@ -2,7 +2,7 @@ from flask import current_app as app
from atst.database import db
from atst.models.clin import CLIN
from atst.models.task_order import TaskOrder
from atst.models.task_order import TaskOrder, SORT_ORDERING
from . import BaseDomainClass
@ -98,3 +98,10 @@ class TaskOrders(BaseDomainClass):
if not app.config.get("CLASSIFIED"):
section_list["funding"] = TaskOrders.UNCLASSIFIED_FUNDING
return section_list
@classmethod
def sort(cls, task_orders: [TaskOrder]) -> [TaskOrder]:
# Sorts a list of task orders on two keys: status (primary) and time_created (secondary)
by_time_created = sorted(task_orders, key=lambda to: to.time_created)
by_status = sorted(by_time_created, key=lambda to: SORT_ORDERING.get(to.status))
return by_status

View File

@ -18,6 +18,14 @@ class Status(Enum):
UNSIGNED = "Unsigned"
SORT_ORDERING = {
status: order
for (order, status) in enumerate(
[Status.DRAFT, Status.ACTIVE, Status.UPCOMING, Status.EXPIRED, Status.UNSIGNED]
)
}
class TaskOrder(Base, mixins.TimestampsMixin):
__tablename__ = "task_orders"

View File

@ -1,5 +1,3 @@
from collections import defaultdict
from flask import g, render_template
from . import task_orders_bp
@ -7,7 +5,6 @@ from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.portfolios import Portfolios
from atst.domain.task_orders import TaskOrders
from atst.models import Permissions
from atst.models.task_order import Status as TaskOrderStatus
@task_orders_bp.route("/task_orders/<task_order_id>")
@ -34,7 +31,5 @@ def review_task_order(task_order_id):
@user_can(Permissions.VIEW_PORTFOLIO_FUNDING, message="view portfolio funding")
def portfolio_funding(portfolio_id):
portfolio = Portfolios.get(g.current_user, portfolio_id)
return render_template(
"portfolios/task_orders/index.html", task_orders=portfolio.task_orders
)
task_orders = TaskOrders.sort(portfolio.task_orders)
return render_template("portfolios/task_orders/index.html", task_orders=task_orders)

View File

@ -174,7 +174,9 @@ def add_task_orders_to_portfolio(portfolio):
clins = [
CLINFactory.build(task_order=unsigned_to, start_date=today, end_date=today),
CLINFactory.build(task_order=upcoming_to, start_date=future, end_date=future),
CLINFactory.build(task_order=expired_to, start_date=yesterday, end_date=yesterday),
CLINFactory.build(
task_order=expired_to, start_date=yesterday, end_date=yesterday
),
CLINFactory.build(task_order=active_to, start_date=yesterday, end_date=future),
]