display status as pending for officer invites awaiting TO completion
This commit is contained in:
parent
a85487a2d1
commit
44cf360687
@ -1,7 +1,7 @@
|
|||||||
"""record invitation status
|
"""record invitation status
|
||||||
|
|
||||||
Revision ID: c98adf9bb431
|
Revision ID: c98adf9bb431
|
||||||
Revises: da9d1c911a52
|
Revises: 1f690989e38e
|
||||||
Create Date: 2019-02-06 09:02:28.617202
|
Create Date: 2019-02-06 09:02:28.617202
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -11,7 +11,7 @@ import sqlalchemy as sa
|
|||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = 'c98adf9bb431'
|
revision = 'c98adf9bb431'
|
||||||
down_revision = 'da9d1c911a52'
|
down_revision = '1f690989e38e'
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
||||||
|
|
||||||
|
@ -159,6 +159,44 @@ class TaskOrder(Base, mixins.TimestampsMixin):
|
|||||||
def is_pending(self):
|
def is_pending(self):
|
||||||
return self.status == Status.PENDING
|
return self.status == Status.PENDING
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ko_invitable(self):
|
||||||
|
"""
|
||||||
|
The MO has indicated that the KO should be invited but we have not sent
|
||||||
|
an invite and attached the KO user
|
||||||
|
"""
|
||||||
|
return self.ko_invite and not self.contracting_officer
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cor_invitable(self):
|
||||||
|
"""
|
||||||
|
The MO has indicated that the COR should be invited but we have not sent
|
||||||
|
an invite and attached the COR user
|
||||||
|
"""
|
||||||
|
return self.cor_invite and not self.contracting_officer_representative
|
||||||
|
|
||||||
|
@property
|
||||||
|
def so_invitable(self):
|
||||||
|
"""
|
||||||
|
The MO has indicated that the SO should be invited but we have not sent
|
||||||
|
an invite and attached the SO user
|
||||||
|
"""
|
||||||
|
return self.so_invite and not self.security_officer
|
||||||
|
|
||||||
|
_OFFICER_PREFIXES = {
|
||||||
|
"contracting_officer": "ko",
|
||||||
|
"contracting_officer_representative": "cor",
|
||||||
|
"security_officer": "so",
|
||||||
|
}
|
||||||
|
_OFFICER_PROPERTIES = ["first_name", "last_name", "phone_number", "email", "dod_id"]
|
||||||
|
|
||||||
|
def officer_dictionary(self, officer_type):
|
||||||
|
prefix = self._OFFICER_PREFIXES[officer_type]
|
||||||
|
return {
|
||||||
|
field: getattr(self, "{}_{}".format(prefix, field))
|
||||||
|
for field in self._OFFICER_PROPERTIES
|
||||||
|
}
|
||||||
|
|
||||||
def to_dictionary(self):
|
def to_dictionary(self):
|
||||||
return {
|
return {
|
||||||
"portfolio_name": self.portfolio_name,
|
"portfolio_name": self.portfolio_name,
|
||||||
|
@ -70,4 +70,8 @@
|
|||||||
&.icon--medium {
|
&.icon--medium {
|
||||||
@include icon-size(12);
|
@include icon-size(12);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.icon--gold {
|
||||||
|
@include icon-color($color-gold-dark);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -230,14 +230,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.task-order-invite-message {
|
.task-order-invite-message {
|
||||||
|
font-weight: $font-bold;
|
||||||
|
|
||||||
&.not-sent {
|
&.not-sent {
|
||||||
color: $color-red;
|
color: $color-red;
|
||||||
font-weight: $font-bold;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.sent {
|
&.sent {
|
||||||
color: $color-green;
|
color: $color-green;
|
||||||
font-weight: $font-bold;
|
}
|
||||||
|
|
||||||
|
&.pending {
|
||||||
|
color: $color-gold-dark;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
{% macro ReviewOfficerInfo(heading, first_name, last_name, email, phone_number, dod_id, officer) %}
|
{% macro ReviewOfficerInfo(heading, officer_data, has_officer, invite_pending) %}
|
||||||
<div class="col col--grow">
|
<div class="col col--grow">
|
||||||
<h4 class='task-order-form__heading'>{{ heading | translate }}</h4>
|
<h4 class='task-order-form__heading'>{{ heading | translate }}</h4>
|
||||||
{{ first_name }} {{ last_name }}<br>
|
{{ officer_data.first_name }} {{ officer_data.last_name }}<br>
|
||||||
{{ email }}<br>
|
{{ officer_data.email }}<br>
|
||||||
{% if phone_number %}
|
{% if officer_data.phone_number %}
|
||||||
{{ phone_number | usPhone }}
|
{{ officer_data.phone_number | usPhone }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br>
|
<br>
|
||||||
{{ "task_orders.new.review.dod_id" | translate }} {{ dod_id}}<br>
|
{{ "task_orders.new.review.dod_id" | translate }} {{ officer_data.dod_id}}<br>
|
||||||
{% if officer %}
|
{% if has_officer %}
|
||||||
{{ Icon('ok', classes='icon--green') }} <span class="task-order-invite-message sent">{{ "task_orders.new.review.invited"| translate }}</<span>
|
{{ Icon('ok', classes='icon--green') }} <span class="task-order-invite-message sent">{{ "task_orders.new.review.invited"| translate }}</<span>
|
||||||
|
{% elif invite_pending %}
|
||||||
|
{{ Icon('alert', classes='icon--gold') }} <span class="task-order-invite-message pending">{{ "task_orders.new.review.pending_to"| translate }}</<span>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ Icon('alert', classes='icon--red') }} <span class="task-order-invite-message not-sent">{{ "task_orders.new.review.not_invited"| translate }}</span>
|
{{ Icon('alert', classes='icon--red') }} <span class="task-order-invite-message not-sent">{{ "task_orders.new.review.not_invited"| translate }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -17,9 +19,24 @@
|
|||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{{ ReviewOfficerInfo("task_orders.new.review.ko", task_order.ko_first_name, task_order.ko_last_name, task_order.ko_email, task_order.ko_phone_number, task_order.ko_dod_id, task_order.contracting_officer) }}
|
{{ ReviewOfficerInfo(
|
||||||
{{ ReviewOfficerInfo("task_orders.new.review.cor", task_order.cor_first_name, task_order.cor_last_name, task_order.cor_email, task_order.cor_phone_number, task_order.cor_dod_id, task_order.contracting_officer_representative) }}
|
"task_orders.new.review.ko",
|
||||||
|
task_order.officer_dictionary("contracting_officer"),
|
||||||
|
task_order.contracting_officer,
|
||||||
|
task_order.ko_invitable
|
||||||
|
) }}
|
||||||
|
{{ ReviewOfficerInfo(
|
||||||
|
"task_orders.new.review.cor",
|
||||||
|
task_order.officer_dictionary("contracting_officer_representative"),
|
||||||
|
task_order.contracting_officer_representative,
|
||||||
|
task_order.cor_invitable
|
||||||
|
) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{{ ReviewOfficerInfo("task_orders.new.review.so", task_order.so_first_name, task_order.so_last_name, task_order.so_email, task_order.so_phone_number, task_order.so_dod_id, task_order.security_officer) }}
|
{{ ReviewOfficerInfo(
|
||||||
|
"task_orders.new.review.so",
|
||||||
|
task_order.officer_dictionary("security_officer"),
|
||||||
|
task_order.security_officer,
|
||||||
|
task_order.so_invitable
|
||||||
|
) }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -458,6 +458,7 @@ task_orders:
|
|||||||
invited: Invited
|
invited: Invited
|
||||||
not_invited: Not Yet Invited
|
not_invited: Not Yet Invited
|
||||||
not_uploaded: Not Uploaded
|
not_uploaded: Not Uploaded
|
||||||
|
pending_to: Pending TO Completion
|
||||||
invitations:
|
invitations:
|
||||||
dod_id_label: DoD ID
|
dod_id_label: DoD ID
|
||||||
contracting_officer:
|
contracting_officer:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user