diff --git a/atst/routes/portfolios/task_orders.py b/atst/routes/portfolios/task_orders.py index 7b5b7999..afadd3ae 100644 --- a/atst/routes/portfolios/task_orders.py +++ b/atst/routes/portfolios/task_orders.py @@ -1,14 +1,25 @@ +from collections import defaultdict + from flask import g, render_template from . import portfolios_bp from atst.domain.task_orders import TaskOrders from atst.domain.portfolios import Portfolios +from atst.models.task_order import Status as TaskOrderStatus @portfolios_bp.route("/portfolios//task_orders") def portfolio_task_orders(portfolio_id): portfolio = Portfolios.get(g.current_user, portfolio_id) - return render_template("portfolios/task_orders/index.html", portfolio=portfolio) + task_orders_by_status = defaultdict(list) + for task_order in portfolio.task_orders: + task_orders_by_status[task_order.status].append(task_order) + + return render_template( + "portfolios/task_orders/index.html", + portfolio=portfolio, + pending_task_orders=task_orders_by_status.get(TaskOrderStatus.PENDING, []), + ) @portfolios_bp.route("/portfolios//task_order/") diff --git a/styles/components/_portfolio_layout.scss b/styles/components/_portfolio_layout.scss index 62938d35..6a6db378 100644 --- a/styles/components/_portfolio_layout.scss +++ b/styles/components/_portfolio_layout.scss @@ -29,3 +29,37 @@ } } } + +.portfolio-funding { + .pending-task-order { + background-color: $color-gold-lightest; + + align-items: center; + margin: 0; + padding: 2 * $gap; + + dt { + font-weight: bold; + } + + dd { + margin-left: 0; + } + + .label { + margin-right: 2 * $gap; + } + + .pending-task-order__started { + flex-grow: 1; + } + + .pending-task-order__value { + text-align: right; + } + } + + .view-task-order-link { + margin-left: $gap * 2; + } +} diff --git a/templates/portfolios/task_orders/index.html b/templates/portfolios/task_orders/index.html index 91326fb1..36620b88 100644 --- a/templates/portfolios/task_orders/index.html +++ b/templates/portfolios/task_orders/index.html @@ -1,30 +1,64 @@ {% from "components/empty_state.html" import EmptyState %} +{% from "components/icon.html" import Icon %} {% extends "portfolios/base.html" %} {% block portfolio_content %} -{% if not portfolio.task_orders %} +{% macro ViewLink(task_order) %} - {{ EmptyState( - 'This portfolio doesn’t have any task orders yet.', - action_label='Add a New Task Order', - action_href=url_for('task_orders.new', screen=1, portfolio_id=portfolio.id), - icon='cloud', - ) }} + + View + {{ Icon("caret_right") }} + +{% endmacro %} -{% else %} +
+ {% for task_order in pending_task_orders %} +
+
+ Pending +
+
Started
+
+ + +
+
+
+
Value
+
{{ task_order.budget | dollars }}
+
+ {{ ViewLink(task_order) }} +
+
+ {% endfor %} - -{% endif %} + {% if not portfolio.task_orders %} + + {{ EmptyState( + 'This portfolio doesn’t have any task orders yet.', + action_label='Add a New Task Order', + action_href=url_for('task_orders.new', screen=1, portfolio_id=portfolio.id), + icon='cloud', + ) }} + + {% else %} + + + + {% endif %} +
{% endblock %}