Allow creating a task order for an existing portfolio
This commit is contained in:
parent
a010487f34
commit
1cc4c23588
@ -100,11 +100,14 @@ class ShowTaskOrderWorkflow:
|
|||||||
|
|
||||||
|
|
||||||
class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow):
|
class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow):
|
||||||
def __init__(self, user, form_data, screen=1, task_order_id=None):
|
def __init__(
|
||||||
|
self, user, form_data, screen=1, task_order_id=None, portfolio_id=None
|
||||||
|
):
|
||||||
self.user = user
|
self.user = user
|
||||||
self.form_data = form_data
|
self.form_data = form_data
|
||||||
self.screen = screen
|
self.screen = screen
|
||||||
self.task_order_id = task_order_id
|
self.task_order_id = task_order_id
|
||||||
|
self.portfolio_id = portfolio_id
|
||||||
self._task_order = None
|
self._task_order = None
|
||||||
self._section = TASK_ORDER_SECTIONS[screen - 1]
|
self._section = TASK_ORDER_SECTIONS[screen - 1]
|
||||||
self._form = self._section["form"](self.form_data)
|
self._form = self._section["form"](self.form_data)
|
||||||
@ -144,7 +147,10 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow):
|
|||||||
Portfolios.update(self.task_order.portfolio, {"name": new_name})
|
Portfolios.update(self.task_order.portfolio, {"name": new_name})
|
||||||
TaskOrders.update(self.user, self.task_order, **self.task_order_form_data)
|
TaskOrders.update(self.user, self.task_order, **self.task_order_form_data)
|
||||||
else:
|
else:
|
||||||
pf = Portfolios.create(self.user, self.form.portfolio_name.data)
|
if self.portfolio_id:
|
||||||
|
pf = Portfolios.get(self.user, self.portfolio_id)
|
||||||
|
else:
|
||||||
|
pf = Portfolios.create(self.user, self.form.portfolio_name.data)
|
||||||
self._task_order = TaskOrders.create(portfolio=pf, creator=self.user)
|
self._task_order = TaskOrders.create(portfolio=pf, creator=self.user)
|
||||||
TaskOrders.update(self.user, self.task_order, **self.task_order_form_data)
|
TaskOrders.update(self.user, self.task_order, **self.task_order_form_data)
|
||||||
|
|
||||||
@ -217,13 +223,15 @@ def get_started():
|
|||||||
|
|
||||||
@task_orders_bp.route("/task_orders/new/<int:screen>")
|
@task_orders_bp.route("/task_orders/new/<int:screen>")
|
||||||
@task_orders_bp.route("/task_orders/new/<int:screen>/<task_order_id>")
|
@task_orders_bp.route("/task_orders/new/<int:screen>/<task_order_id>")
|
||||||
def new(screen, task_order_id=None):
|
@task_orders_bp.route("/portfolios/<portfolio_id>/task_orders/new/<int:screen>")
|
||||||
|
def new(screen, task_order_id=None, portfolio_id=None):
|
||||||
workflow = ShowTaskOrderWorkflow(g.current_user, screen, task_order_id)
|
workflow = ShowTaskOrderWorkflow(g.current_user, screen, task_order_id)
|
||||||
return render_template(
|
return render_template(
|
||||||
workflow.template,
|
workflow.template,
|
||||||
current=screen,
|
current=screen,
|
||||||
task_order_id=task_order_id,
|
task_order_id=task_order_id,
|
||||||
task_order=workflow.task_order,
|
task_order=workflow.task_order,
|
||||||
|
portfolio_id=portfolio_id,
|
||||||
screens=workflow.display_screens,
|
screens=workflow.display_screens,
|
||||||
form=workflow.form,
|
form=workflow.form,
|
||||||
)
|
)
|
||||||
@ -231,9 +239,12 @@ def new(screen, task_order_id=None):
|
|||||||
|
|
||||||
@task_orders_bp.route("/task_orders/new/<int:screen>", methods=["POST"])
|
@task_orders_bp.route("/task_orders/new/<int:screen>", methods=["POST"])
|
||||||
@task_orders_bp.route("/task_orders/new/<int:screen>/<task_order_id>", methods=["POST"])
|
@task_orders_bp.route("/task_orders/new/<int:screen>/<task_order_id>", methods=["POST"])
|
||||||
def update(screen, task_order_id=None):
|
@task_orders_bp.route(
|
||||||
|
"/portfolios/<portfolio_id>/task_orders/new/<int:screen>", methods=["POST"]
|
||||||
|
)
|
||||||
|
def update(screen, task_order_id=None, portfolio_id=None):
|
||||||
workflow = UpdateTaskOrderWorkflow(
|
workflow = UpdateTaskOrderWorkflow(
|
||||||
g.current_user, http_request.form, screen, task_order_id
|
g.current_user, http_request.form, screen, task_order_id, portfolio_id
|
||||||
)
|
)
|
||||||
|
|
||||||
if workflow.validate():
|
if workflow.validate():
|
||||||
@ -250,6 +261,7 @@ def update(screen, task_order_id=None):
|
|||||||
workflow.template,
|
workflow.template,
|
||||||
current=screen,
|
current=screen,
|
||||||
task_order_id=task_order_id,
|
task_order_id=task_order_id,
|
||||||
|
portfolio_id=portfolio_id,
|
||||||
screens=TASK_ORDER_SECTIONS,
|
screens=TASK_ORDER_SECTIONS,
|
||||||
form=workflow.form,
|
form=workflow.form,
|
||||||
)
|
)
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
{% if task_order_id %}
|
{% if task_order_id %}
|
||||||
<form method='POST' action="{{ url_for('task_orders.new', screen=current, task_order_id=task_order_id) }}" autocomplete="off">
|
<form method='POST' action="{{ url_for('task_orders.new', screen=current, task_order_id=task_order_id) }}" autocomplete="off">
|
||||||
{% else %}
|
{% else %}
|
||||||
<form method='POST' action="{{ url_for('task_orders.update', screen=current) }}" autocomplete="off">
|
<form method='POST' action="{{ url_for('task_orders.update', screen=current, portfolio_id=portfolio_id) }}" autocomplete="off">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -48,6 +48,8 @@ def test_create_new_task_order(client, user_session):
|
|||||||
|
|
||||||
task_order_data = TaskOrderFactory.dictionary()
|
task_order_data = TaskOrderFactory.dictionary()
|
||||||
app_info_data = slice_data_for_section(task_order_data, "app_info")
|
app_info_data = slice_data_for_section(task_order_data, "app_info")
|
||||||
|
portfolio_name = "Mos Eisley"
|
||||||
|
app_info_data["portfolio_name"] = portfolio_name
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("task_orders.update", screen=1),
|
url_for("task_orders.update", screen=1),
|
||||||
@ -56,6 +58,11 @@ def test_create_new_task_order(client, user_session):
|
|||||||
)
|
)
|
||||||
assert url_for("task_orders.new", screen=2) in response.headers["Location"]
|
assert url_for("task_orders.new", screen=2) in response.headers["Location"]
|
||||||
|
|
||||||
|
created_task_order_id = response.headers["Location"].split("/")[-1]
|
||||||
|
created_task_order = TaskOrders.get(creator, created_task_order_id)
|
||||||
|
assert created_task_order.portfolio is not None
|
||||||
|
assert created_task_order.portfolio.name == portfolio_name
|
||||||
|
|
||||||
funding_data = slice_data_for_section(task_order_data, "funding")
|
funding_data = slice_data_for_section(task_order_data, "funding")
|
||||||
funding_data = serialize_dates(funding_data)
|
funding_data = serialize_dates(funding_data)
|
||||||
response = client.post(
|
response = client.post(
|
||||||
@ -70,6 +77,28 @@ def test_create_new_task_order(client, user_session):
|
|||||||
assert url_for("task_orders.new", screen=4) in response.headers["Location"]
|
assert url_for("task_orders.new", screen=4) in response.headers["Location"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_new_task_order_for_portfolio(client, user_session):
|
||||||
|
portfolio = PortfolioFactory.create()
|
||||||
|
creator = portfolio.owner
|
||||||
|
user_session(creator)
|
||||||
|
|
||||||
|
task_order_data = TaskOrderFactory.dictionary()
|
||||||
|
app_info_data = slice_data_for_section(task_order_data, "app_info")
|
||||||
|
portfolio_name = "This is ignored for now"
|
||||||
|
app_info_data["portfolio_name"] = portfolio_name
|
||||||
|
|
||||||
|
response = client.post(
|
||||||
|
url_for("task_orders.update", screen=1, portfolio_id=portfolio.id),
|
||||||
|
data=app_info_data,
|
||||||
|
follow_redirects=False,
|
||||||
|
)
|
||||||
|
assert url_for("task_orders.new", screen=2) in response.headers["Location"]
|
||||||
|
|
||||||
|
created_task_order_id = response.headers["Location"].split("/")[-1]
|
||||||
|
created_task_order = TaskOrders.get(creator, created_task_order_id)
|
||||||
|
assert created_task_order.portfolio == portfolio
|
||||||
|
|
||||||
|
|
||||||
def test_task_order_form_shows_errors(client, user_session):
|
def test_task_order_form_shows_errors(client, user_session):
|
||||||
creator = UserFactory.create()
|
creator = UserFactory.create()
|
||||||
user_session(creator)
|
user_session(creator)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user