invitations for task order officers
This commit is contained in:
parent
4f1ca550d5
commit
55bfbc4696
@ -11,6 +11,7 @@ from . import task_orders_bp
|
|||||||
from atst.domain.task_orders import TaskOrders
|
from atst.domain.task_orders import TaskOrders
|
||||||
from atst.domain.workspaces import Workspaces
|
from atst.domain.workspaces import Workspaces
|
||||||
import atst.forms.task_order as task_order_form
|
import atst.forms.task_order as task_order_form
|
||||||
|
from atst.services.invitation import Invitation as InvitationService
|
||||||
|
|
||||||
|
|
||||||
TASK_ORDER_SECTIONS = [
|
TASK_ORDER_SECTIONS = [
|
||||||
@ -114,7 +115,7 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow):
|
|||||||
def validate(self):
|
def validate(self):
|
||||||
return self.form.validate()
|
return self.form.validate()
|
||||||
|
|
||||||
def update(self):
|
def _update_task_order(self):
|
||||||
if self.task_order:
|
if self.task_order:
|
||||||
TaskOrders.update(self.task_order, **self.form.data)
|
TaskOrders.update(self.task_order, **self.form.data)
|
||||||
else:
|
else:
|
||||||
@ -124,6 +125,51 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow):
|
|||||||
self._task_order = TaskOrders.create(workspace=ws, creator=self.user)
|
self._task_order = TaskOrders.create(workspace=ws, creator=self.user)
|
||||||
TaskOrders.update(self.task_order, **to_data)
|
TaskOrders.update(self.task_order, **to_data)
|
||||||
|
|
||||||
|
OFFICER_INVITATIONS = [
|
||||||
|
{
|
||||||
|
"field": "ko_invite",
|
||||||
|
"prefix": "ko",
|
||||||
|
"role": "contracting_officer",
|
||||||
|
"subject": "Review a task order",
|
||||||
|
"template": "emails/invitation.txt",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "cor_invite",
|
||||||
|
"prefix": "cor",
|
||||||
|
"role": "contracting_officer_representative",
|
||||||
|
"subject": "Help with a task order",
|
||||||
|
"template": "emails/invitation.txt",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "so_invite",
|
||||||
|
"prefix": "so",
|
||||||
|
"role": "security_officer",
|
||||||
|
"subject": "Review security for a task order",
|
||||||
|
"template": "emails/invitation.txt",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
def _update_invitations(self):
|
||||||
|
for officer_type in self.OFFICER_INVITATIONS:
|
||||||
|
field = officer_type["field"]
|
||||||
|
if hasattr(self.form, field) and self.form[field].data:
|
||||||
|
prefix = officer_type["prefix"]
|
||||||
|
officer_data = {
|
||||||
|
field: getattr(self.task_order, prefix + "_" + field)
|
||||||
|
for field in ["first_name", "last_name", "email", "dod_id"]
|
||||||
|
}
|
||||||
|
invite_service = InvitationService(
|
||||||
|
self.user,
|
||||||
|
self.task_order.workspace,
|
||||||
|
{**officer_data, "workspace_role": officer_type["role"]},
|
||||||
|
subject=officer_type["subject"],
|
||||||
|
email_template=officer_type["template"],
|
||||||
|
)
|
||||||
|
invite_service.invite()
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
self._update_task_order()
|
||||||
|
self._update_invitations()
|
||||||
return self.task_order
|
return self.task_order
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,3 @@
|
|||||||
# send invite to KO
|
|
||||||
# create KO user (Workspaces.create_member)
|
|
||||||
# needs workspace role name
|
|
||||||
# new_member = Workspaces.create_member(user, workspace, ws_role_name)
|
|
||||||
# invite = Invitations.create(user, new_member, form.data["email"])
|
|
||||||
# send_invite_email(g.current_user.full_name, invite.token, invite.email)
|
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
|
|
||||||
from atst.domain.workspaces import Workspaces
|
from atst.domain.workspaces import Workspaces
|
||||||
@ -41,5 +35,7 @@ class Invitation:
|
|||||||
return Invitations.create(self.inviter, member, email)
|
return Invitations.create(self.inviter, member, email)
|
||||||
|
|
||||||
def _send_invite_email(self, token, email):
|
def _send_invite_email(self, token, email):
|
||||||
body = render_template(self.email_template, owner=self.inviter, token=token)
|
body = render_template(
|
||||||
|
self.email_template, owner=self.inviter.full_name, token=token
|
||||||
|
)
|
||||||
queue.send_mail([email], self.subject.format(self.inviter), body)
|
queue.send_mail([email], self.subject.format(self.inviter), body)
|
||||||
|
@ -4,7 +4,7 @@ from flask import url_for
|
|||||||
from atst.domain.task_orders import TaskOrders
|
from atst.domain.task_orders import TaskOrders
|
||||||
from atst.routes.task_orders.new import ShowTaskOrderWorkflow, UpdateTaskOrderWorkflow
|
from atst.routes.task_orders.new import ShowTaskOrderWorkflow, UpdateTaskOrderWorkflow
|
||||||
|
|
||||||
from tests.factories import UserFactory, TaskOrderFactory
|
from tests.factories import UserFactory, TaskOrderFactory, WorkspaceFactory
|
||||||
|
|
||||||
|
|
||||||
def test_new_task_order(client, user_session):
|
def test_new_task_order(client, user_session):
|
||||||
@ -129,3 +129,26 @@ def test_update_task_order_with_existing_task_order():
|
|||||||
assert workflow.task_order.start_date != to_data["start_date"]
|
assert workflow.task_order.start_date != to_data["start_date"]
|
||||||
workflow.update()
|
workflow.update()
|
||||||
assert workflow.task_order.start_date.strftime("%m/%d/%Y") == to_data["start_date"]
|
assert workflow.task_order.start_date.strftime("%m/%d/%Y") == to_data["start_date"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_invite_officers_to_task_order(queue):
|
||||||
|
user = UserFactory.create()
|
||||||
|
workspace = WorkspaceFactory.create(owner=user)
|
||||||
|
task_order = TaskOrderFactory.create(creator=user, workspace=workspace)
|
||||||
|
to_data = {
|
||||||
|
**TaskOrderFactory.dictionary(),
|
||||||
|
"ko_invite": True,
|
||||||
|
"cor_invite": True,
|
||||||
|
"so_invite": True,
|
||||||
|
}
|
||||||
|
workflow = UpdateTaskOrderWorkflow(
|
||||||
|
to_data, user, screen=3, task_order_id=task_order.id
|
||||||
|
)
|
||||||
|
workflow.update()
|
||||||
|
workspace = task_order.workspace
|
||||||
|
assert len(workspace.members) == 4
|
||||||
|
roles = [member.role.name for member in workspace.members]
|
||||||
|
assert "contracting_officer" in roles
|
||||||
|
assert "contracting_officer_representative" in roles
|
||||||
|
assert "security_officer" in roles
|
||||||
|
assert len(queue.get_queue()) == 3
|
||||||
|
Loading…
x
Reference in New Issue
Block a user