From 84659a05783125e633b0b2fcaee5c58b31c9e15c Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Wed, 9 Jan 2019 11:37:21 -0500 Subject: [PATCH 01/11] Show task order heading on view task order page --- styles/atat.scss | 1 + styles/sections/_task_order.scss | 41 ++++++++++++++++++++++ templates/workspaces/task_orders/show.html | 24 ++++++++++++- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 styles/sections/_task_order.scss diff --git a/styles/atat.scss b/styles/atat.scss index c128610e..37389c5e 100644 --- a/styles/atat.scss +++ b/styles/atat.scss @@ -46,3 +46,4 @@ @import 'sections/project_edit'; @import 'sections/member_edit'; @import 'sections/reports'; +@import 'sections/task_order'; diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss new file mode 100644 index 00000000..a7485bcc --- /dev/null +++ b/styles/sections/_task_order.scss @@ -0,0 +1,41 @@ +.task-order-summary { + + @include media($medium-screen) { + @include grid-row; + flex-wrap: wrap; + } + + .panel { + padding: 0 $gap * 2; + width: 100%; + + @include ie-only { + max-width: 100%; + } + } + + .task-order-heading { + align-items: center; + justify-content: space-between; + + .task-order-heading__name { + align-items: center; + padding: $gap; + + label { + padding: $gap; + } + } + + .task-order-heading__value { + margin: 0 ($gap * 2); + text-align: right; + + dt { + font-weight: bold; + } + dd { + } + } + } +} diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index d65f9ec0..658d3669 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -2,6 +2,28 @@ {% block workspace_content %} -You're looking at TO {{ task_order.id }} +
+
+
+

New Task Order

+ Pending +
+
+
+
Started
+
+ + +
+
+
+
Task Order Value
+
{{ task_order.budget | dollars }}
+
+
+
+
{% endblock %} From 175d0df2347a49bad16217b467979fb10015351e Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 12:11:33 -0500 Subject: [PATCH 02/11] Flesh out rest of task order view page --- styles/sections/_task_order.scss | 84 +++++++++++++ templates/workspaces/task_orders/show.html | 132 ++++++++++++++++++++- 2 files changed, 211 insertions(+), 5 deletions(-) diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss index a7485bcc..6ac86027 100644 --- a/styles/sections/_task_order.scss +++ b/styles/sections/_task_order.scss @@ -38,4 +38,88 @@ } } } + + .task-order-details { + flex-grow: 1; + } + + .task-order-next-steps { + flex-grow: 1; + padding-right: $gap; + + .task-order-next-steps__step { + .task-order-next-steps__icon { + padding: $gap $gap 0 0; + justify-content: center; + .complete { + @include icon-color($color-green); + } + .incomplete { + @include icon-color($color-gray-light); + } + } + + .task-order-next-steps__heading { + h4 { + margin: $gap $gap 0 0; + } + } + .task-order-next-steps__description { + font-style: italic; + } + } + } + + .task-order-sidebar { + flex-basis: 25%; + min-width: 30rem; + + hr { + margin: 2rem 0; + } + } + + .task-order-document-link { + &.disabled { + color: $color-shadow; + .task-order-document-link__icon { + span { + @include icon-color($color-cool-blue-lighter); + } + } + + .icon-link.disabled { + color: $color-cool-blue-lighter; + } + } + + .task-order-document-link__icon { + padding-top: 0.5rem; + span { + @include icon-color($color-blue); + } + } + + .task-order-document-details { + .task-order-document-details__description { + font-style: italic; + } + } + } + + .task-order-invitation-status { + .invited { + color: $color-green; + @include icon-color($color-green); + } + .uninvited { + color: $color-gray-light; + @include icon-color($color-gray-light); + } + + .task-order-invitation-status__icon { + padding: 0 0.5rem; + } + } + } diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index 658d3669..f2c18427 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -1,10 +1,65 @@ {% extends "workspaces/base.html" %} +{% from "components/icon.html" import Icon %} + {% block workspace_content %} -
-
-
+{% macro Step(title="", description="", link_text=None, link_url=None, complete=True) %} +
+
+ {{ Icon("ok", classes="complete" if complete else "incomplete") }} +
+
+
+

{{ title }}

+ {% if link_url %} + + {{ Icon("edit") }} + {{ link_text }} + + {% endif %} +
+
+ {{ description }} +
+
+
+{% endmacro %} + +{% macro DocumentLink(title="", link_url="", description="") %} + {% set disabled = not link_url %} + +{% endmacro %} + +{% macro InvitationStatus(title, officer) %} + {% set class = "invited" if officer else "uninvited" %} +
+
+ {{ Icon("ok", classes=class) }} +
+
+ {{ title }} +
+
+{% endmacro %} + +
+
+

New Task Order

Pending
@@ -13,8 +68,8 @@
Started
+ timestamp="{{ task_order.start_date }}" + format="M/D/YYYY">
@@ -24,6 +79,73 @@
+ +
+
+
+

What's next?

+ {{ Step( + title="Submit draft Task Order", + description="Complete initial task order request form.", + link_text="edit", + link_url=url_for("task_orders.new", screen=1, task_order_id=task_order.id), + complete=True) }} + {{ Step( + title="Complete a Security Requirements Document", + description="The IA Security Official you specified received an email invitation to complete and sign a DD-254: Security Requirements document that's been customized for the JEDI program here.", + complete=False) }} + {{ Step( + title="Prepare the Task Order Documents for your organization's contracting system", + description="You'll file your task order in your organization's contracting system. Change the formatting based on your office prefers.", + complete=False) }} + {{ Step( + title="Get a funding document", + description="User your organization's normal process to get a funding document, typically from your financial manager. Your Contracting Officer's Representative (COR) or Contracting Officer (KO) can help with this, too.", + complete=False) }} + {{ Step( + title="Have your KO submit your final task order", + description="Your KO will submit the final task order into your organization's contracting system and receive an official task order number. Your KO should enter your task order number in this system, along with a copy of the submitted task order.", + complete=False) }} +

Once your required information is submitted in this system, you're funded and ready to start using JEDI cloud services!

+
+
+
+
+

Download documents

+ {% set description -%} + last updated on + + {%- endset %} + {{ DocumentLink( + title="Task Order Draft", + link_url="he", + description=description) }} +
+ {{ DocumentLink( + title="Cloud Services Estimate", + link_url="sa") }} + {{ DocumentLink( + title="Market Research", + link_url="as") }} + {{ DocumentLink( + title="DD 254", + link_url="") }} +
+
+

Invitations

+ {{ InvitationStatus('Contracting Officer', task_order.contracting_officer) }} + {{ InvitationStatus('Contracting Officer Representative', task_order.contracting_officer_representative) }} + {{ InvitationStatus('IA Security Officer', officer=task_order.security_officer) }} + + + {{ Icon("edit") }} + manage invitations + +
+
+
{% endblock %} From 43757d5d3bca677121845548fc1ce22bdc6b339d Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 12:14:07 -0500 Subject: [PATCH 03/11] Pass in current user when fetching task order --- atst/routes/task_orders/invite.py | 4 ++-- atst/routes/workspaces/task_orders.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/atst/routes/task_orders/invite.py b/atst/routes/task_orders/invite.py index c43f14b5..ea55ef9b 100644 --- a/atst/routes/task_orders/invite.py +++ b/atst/routes/task_orders/invite.py @@ -1,4 +1,4 @@ -from flask import redirect, url_for +from flask import g, redirect, url_for from . import task_orders_bp from atst.domain.task_orders import TaskOrders @@ -8,7 +8,7 @@ from atst.utils.flash import formatted_flash as flash # TODO: add a real implementation for this @task_orders_bp.route("/task_orders/invite/", methods=["POST"]) def invite(task_order_id): - task_order = TaskOrders.get(task_order_id) + task_order = TaskOrders.get(g.current_user, task_order_id) flash("task_order_submitted", task_order=task_order) return redirect( url_for("workspaces.workspace_members", workspace_id=task_order.workspace.id) diff --git a/atst/routes/workspaces/task_orders.py b/atst/routes/workspaces/task_orders.py index 7fdcbc9a..d99d6c3b 100644 --- a/atst/routes/workspaces/task_orders.py +++ b/atst/routes/workspaces/task_orders.py @@ -14,7 +14,7 @@ def workspace_task_orders(workspace_id): @workspaces_bp.route("/workspaces//task_order/") def view_task_order(workspace_id, task_order_id): workspace = Workspaces.get(g.current_user, workspace_id) - task_order = TaskOrders.get(task_order_id) + task_order = TaskOrders.get(g.current_user, task_order_id) return render_template( "workspaces/task_orders/show.html", workspace=workspace, task_order=task_order ) From 440329249a37c7e1933ac8848073460b9e966b21 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 13:23:42 -0500 Subject: [PATCH 04/11] Fix disabled download links --- styles/sections/_task_order.scss | 14 ++++++++++---- templates/workspaces/task_orders/show.html | 12 +++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss index 6ac86027..9055ed97 100644 --- a/styles/sections/_task_order.scss +++ b/styles/sections/_task_order.scss @@ -87,10 +87,6 @@ @include icon-color($color-cool-blue-lighter); } } - - .icon-link.disabled { - color: $color-cool-blue-lighter; - } } .task-order-document-link__icon { @@ -104,6 +100,16 @@ .task-order-document-details__description { font-style: italic; } + + .task-order-document-details__disabled_link { + @include icon-link; + cursor: unset; + &:hover { + background-color: unset; + color: $color-cool-blue-lighter; + } + color: $color-cool-blue-lighter; + } } } diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index f2c18427..c1fcab65 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -33,9 +33,15 @@ {{ Icon("download") }}
- - {{ title }} - + {% if disabled %} + + {% else %} + + {{ title }} + + {% endif %} {% if description %}
{{ description }} From b6b5304520a8f436ccfe1012f3e588f3ef2ba072 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 13:42:34 -0500 Subject: [PATCH 05/11] Fix document download links The links to cloud estimate and market research aren't available yet, so are just empty links. --- templates/workspaces/task_orders/show.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index c1fcab65..0e39321b 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -126,15 +126,15 @@ {%- endset %} {{ DocumentLink( title="Task Order Draft", - link_url="he", + link_url=url_for('task_orders.download_summary', task_order_id=task_order.id), description=description) }}
{{ DocumentLink( title="Cloud Services Estimate", - link_url="sa") }} + link_url="#") }} {{ DocumentLink( title="Market Research", - link_url="as") }} + link_url="#") }} {{ DocumentLink( title="DD 254", link_url="") }} From 27eb15fc2d97d2f56250d7c09d07448238a06f66 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 13:52:22 -0500 Subject: [PATCH 06/11] Show missing invitations as red alerts --- styles/sections/_task_order.scss | 4 ++-- templates/workspaces/task_orders/show.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss index 9055ed97..ce8f2d7a 100644 --- a/styles/sections/_task_order.scss +++ b/styles/sections/_task_order.scss @@ -119,8 +119,8 @@ @include icon-color($color-green); } .uninvited { - color: $color-gray-light; - @include icon-color($color-gray-light); + color: $color-red; + @include icon-color($color-red); } .task-order-invitation-status__icon { diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index 0e39321b..228ffdc7 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -55,7 +55,7 @@ {% set class = "invited" if officer else "uninvited" %}
- {{ Icon("ok", classes=class) }} + {{ Icon("ok" if officer else "alert", classes=class) }}
{{ title }} From dda6db8562b5bef3fd7131e5ce0dc7b7fe1cba25 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Thu, 10 Jan 2019 14:02:08 -0500 Subject: [PATCH 07/11] Add status to task order table --- ...46b5c8f19_add_status_enum_to_task_order.py | 31 +++++++++++++++++++ atst/models/task_order.py | 14 ++++++++- templates/workspaces/task_orders/show.html | 2 +- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 alembic/versions/3d346b5c8f19_add_status_enum_to_task_order.py diff --git a/alembic/versions/3d346b5c8f19_add_status_enum_to_task_order.py b/alembic/versions/3d346b5c8f19_add_status_enum_to_task_order.py new file mode 100644 index 00000000..61ffe84b --- /dev/null +++ b/alembic/versions/3d346b5c8f19_add_status_enum_to_task_order.py @@ -0,0 +1,31 @@ +"""Add status enum to task_order + +Revision ID: 3d346b5c8f19 +Revises: 71cbe76c3b87 +Create Date: 2019-01-10 13:55:58.934890 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '3d346b5c8f19' +down_revision = '71cbe76c3b87' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('task_orders', sa.Column('status', sa.Enum('PENDING', name='status', native_enum=False), nullable=True)) + # ### end Alembic commands ### + + conn = op.get_bind() + conn.execute("UPDATE task_orders set status = 'PENDING'") + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('task_orders', 'status') + # ### end Alembic commands ### diff --git a/atst/models/task_order.py b/atst/models/task_order.py index 27b6cc06..1d006022 100644 --- a/atst/models/task_order.py +++ b/atst/models/task_order.py @@ -1,10 +1,16 @@ -from sqlalchemy import Column, Numeric, String, ForeignKey, Date +from enum import Enum + +from sqlalchemy import Column, Enum as SQLAEnum, Numeric, String, ForeignKey, Date from sqlalchemy.types import ARRAY from sqlalchemy.orm import relationship from atst.models import Base, types, mixins +class Status(Enum): + PENDING = "pending" + + class TaskOrder(Base, mixins.TimestampsMixin): __tablename__ = "task_orders" @@ -27,6 +33,8 @@ class TaskOrder(Base, mixins.TimestampsMixin): so_id = Column(ForeignKey("users.id")) security_officer = relationship("User", foreign_keys="TaskOrder.so_id") + status = Column(SQLAEnum(Status, native_enum=False, default=Status.PENDING)) + scope = Column(String) # Cloud Project Scope defense_component = Column(String) # Department of Defense Component app_migration = Column(String) # App Migration @@ -67,6 +75,10 @@ class TaskOrder(Base, mixins.TimestampsMixin): def portfolio_name(self): return self.workspace.name + @property + def is_pending(self): + return self.status == Status.PENDING + def to_dictionary(self): return { "portfolio_name": self.portfolio_name, diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index 228ffdc7..760a57e5 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -67,7 +67,7 @@

New Task Order

- Pending + {{ task_order.status.value }}
From 2b6162140261d6bbe3809623f0f0298d5b437163 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Fri, 11 Jan 2019 10:28:39 -0500 Subject: [PATCH 08/11] Fix setting default status on task orders --- atst/models/task_order.py | 7 ++++++- tests/models/test_legacy_task_order.py | 20 ++++++++++++++++++++ tests/models/test_task_order.py | 23 ++++++----------------- 3 files changed, 32 insertions(+), 18 deletions(-) create mode 100644 tests/models/test_legacy_task_order.py diff --git a/atst/models/task_order.py b/atst/models/task_order.py index 1d006022..09e275b9 100644 --- a/atst/models/task_order.py +++ b/atst/models/task_order.py @@ -33,7 +33,7 @@ class TaskOrder(Base, mixins.TimestampsMixin): so_id = Column(ForeignKey("users.id")) security_officer = relationship("User", foreign_keys="TaskOrder.so_id") - status = Column(SQLAEnum(Status, native_enum=False, default=Status.PENDING)) + status = Column(SQLAEnum(Status, native_enum=False)) scope = Column(String) # Cloud Project Scope defense_component = Column(String) # Department of Defense Component @@ -65,6 +65,11 @@ class TaskOrder(Base, mixins.TimestampsMixin): number = Column(String, unique=True) # Task Order Number loa = Column(ARRAY(String)) # Line of Accounting (LOA) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if "status" not in kwargs: + self.status = Status.PENDING + @property def budget(self): return sum( diff --git a/tests/models/test_legacy_task_order.py b/tests/models/test_legacy_task_order.py new file mode 100644 index 00000000..80e02b05 --- /dev/null +++ b/tests/models/test_legacy_task_order.py @@ -0,0 +1,20 @@ +from tests.factories import LegacyTaskOrderFactory +from tests.assert_util import dict_contains + + +def test_as_dictionary(): + data = LegacyTaskOrderFactory.dictionary() + real_task_order = LegacyTaskOrderFactory.create(**data) + assert dict_contains(real_task_order.to_dictionary(), data) + + +def test_budget(): + legacy_task_order = LegacyTaskOrderFactory.create( + clin_0001=500, + clin_0003=200, + clin_1001=None, + clin_1003=None, + clin_2001=None, + clin_2003=None, + ) + assert legacy_task_order.budget == 700 diff --git a/tests/models/test_task_order.py b/tests/models/test_task_order.py index 80e02b05..afd9611d 100644 --- a/tests/models/test_task_order.py +++ b/tests/models/test_task_order.py @@ -1,20 +1,9 @@ -from tests.factories import LegacyTaskOrderFactory -from tests.assert_util import dict_contains +from atst.models.task_order import TaskOrder, Status -def test_as_dictionary(): - data = LegacyTaskOrderFactory.dictionary() - real_task_order = LegacyTaskOrderFactory.create(**data) - assert dict_contains(real_task_order.to_dictionary(), data) +def test_default_status(): + to = TaskOrder() + assert to.status == Status.PENDING - -def test_budget(): - legacy_task_order = LegacyTaskOrderFactory.create( - clin_0001=500, - clin_0003=200, - clin_1001=None, - clin_1003=None, - clin_2001=None, - clin_2003=None, - ) - assert legacy_task_order.budget == 700 + with_args = TaskOrder(number="42") + assert to.status == Status.PENDING From f7a87308c76d46608c31afe3f1fbe90122cc7bfe Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Fri, 11 Jan 2019 10:49:30 -0500 Subject: [PATCH 09/11] Use .panel__content on task order view page --- styles/sections/_task_order.scss | 5 +- templates/workspaces/task_orders/show.html | 70 ++++++++++++---------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss index ce8f2d7a..2e595ed0 100644 --- a/styles/sections/_task_order.scss +++ b/styles/sections/_task_order.scss @@ -6,7 +6,6 @@ } .panel { - padding: 0 $gap * 2; width: 100%; @include ie-only { @@ -20,7 +19,6 @@ .task-order-heading__name { align-items: center; - padding: $gap; label { padding: $gap; @@ -71,8 +69,7 @@ } .task-order-sidebar { - flex-basis: 25%; - min-width: 30rem; + min-width: 35rem; hr { margin: 2rem 0; diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index 760a57e5..40a78237 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -5,7 +5,7 @@ {% block workspace_content %} {% macro Step(title="", description="", link_text=None, link_url=None, complete=True) %} -
+
{{ Icon("ok", classes="complete" if complete else "incomplete") }}
@@ -65,7 +65,7 @@
-
+

New Task Order

{{ task_order.status.value }}
@@ -89,7 +89,7 @@
-

What's next?

+

What's next?

{{ Step( title="Submit draft Task Order", description="Complete initial task order request form.", @@ -112,43 +112,49 @@ title="Have your KO submit your final task order", description="Your KO will submit the final task order into your organization's contracting system and receive an official task order number. Your KO should enter your task order number in this system, along with a copy of the submitted task order.", complete=False) }} -

Once your required information is submitted in this system, you're funded and ready to start using JEDI cloud services!

+

Once your required information is submitted in this system, you're funded and ready to start using JEDI cloud services!

-

Download documents

- {% set description -%} - last updated on - - {%- endset %} - {{ DocumentLink( - title="Task Order Draft", - link_url=url_for('task_orders.download_summary', task_order_id=task_order.id), - description=description) }} +
+

Download documents

+ {% set description -%} + last updated on + + {%- endset %} + {{ DocumentLink( + title="Task Order Draft", + link_url=url_for('task_orders.download_summary', task_order_id=task_order.id), + description=description) }} +

- {{ DocumentLink( - title="Cloud Services Estimate", - link_url="#") }} - {{ DocumentLink( - title="Market Research", - link_url="#") }} - {{ DocumentLink( - title="DD 254", - link_url="") }} +
+ {{ DocumentLink( + title="Cloud Services Estimate", + link_url="#") }} + {{ DocumentLink( + title="Market Research", + link_url="#") }} + {{ DocumentLink( + title="DD 254", + link_url="") }} +
-

Invitations

- {{ InvitationStatus('Contracting Officer', task_order.contracting_officer) }} - {{ InvitationStatus('Contracting Officer Representative', task_order.contracting_officer_representative) }} - {{ InvitationStatus('IA Security Officer', officer=task_order.security_officer) }} +
+

Invitations

+ {{ InvitationStatus('Contracting Officer', task_order.contracting_officer) }} + {{ InvitationStatus('Contracting Officer Representative', task_order.contracting_officer_representative) }} + {{ InvitationStatus('IA Security Officer', officer=task_order.security_officer) }} - - {{ Icon("edit") }} - manage invitations - + + {{ Icon("edit") }} + manage invitations + +
From b807d2c932ee1138c00b3864d184ffe696c398da Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Fri, 11 Jan 2019 11:01:57 -0500 Subject: [PATCH 10/11] Clean up document links on task order view page --- styles/elements/_icon_link.scss | 5 ++++ styles/sections/_task_order.scss | 29 +++------------------ templates/workspaces/task_orders/show.html | 30 ++++++++++------------ 3 files changed, 21 insertions(+), 43 deletions(-) diff --git a/styles/elements/_icon_link.scss b/styles/elements/_icon_link.scss index c4543b38..88e340ff 100644 --- a/styles/elements/_icon_link.scss +++ b/styles/elements/_icon_link.scss @@ -63,4 +63,9 @@ &.icon-link--default { @include icon-link-color($color-black-light, $color-gray-lightest); } + + &.icon-link--disabled { + opacity: 0.3; + pointer-events: none; + } } diff --git a/styles/sections/_task_order.scss b/styles/sections/_task_order.scss index 2e595ed0..3845edac 100644 --- a/styles/sections/_task_order.scss +++ b/styles/sections/_task_order.scss @@ -77,36 +77,13 @@ } .task-order-document-link { - &.disabled { - color: $color-shadow; - .task-order-document-link__icon { - span { - @include icon-color($color-cool-blue-lighter); - } - } - } - .task-order-document-link__icon { padding-top: 0.5rem; - span { - @include icon-color($color-blue); - } } - .task-order-document-details { - .task-order-document-details__description { - font-style: italic; - } - - .task-order-document-details__disabled_link { - @include icon-link; - cursor: unset; - &:hover { - background-color: unset; - color: $color-cool-blue-lighter; - } - color: $color-cool-blue-lighter; - } + .task-order-document-description { + padding-left: 3rem; + font-style: italic; } } diff --git a/templates/workspaces/task_orders/show.html b/templates/workspaces/task_orders/show.html index 40a78237..1ea2d3a7 100644 --- a/templates/workspaces/task_orders/show.html +++ b/templates/workspaces/task_orders/show.html @@ -28,26 +28,22 @@ {% macro DocumentLink(title="", link_url="", description="") %} {% set disabled = not link_url %} -